Android 에서 BLE 프로 그래 밍 분석 (2)

5428 단어 BLE
블 루 투 스 기술 연맹 은 2010 년 6 월 30 일 블 루 투 스 4.0 기준 을 발 표 했 고, 4.0 기준 은 블 루 투 스 3.0 + HS 기준 에 저 전력 소모 블 루 투 스 (Bluetooth Low Energy · BLE) 지원 을 추가 했다.기 존의 일반 블 루 투 스 와 고속 블 루 투 스에 비해 BLE 의 가장 큰 특징 은 낮은 전력 소모, 낮은 지연, 빠 른 검색 과 연결 속도 이지 만 데이터 전송 속 도 는 기 존 블 루 투 스에 비해 낮다.BLE 장치 의 연결 부분 은 이미 전편 에 소개 되 었 습 니 다.http://blog.csdn.net/luyi325xyz/article/details/41623995。
1. 데이터 전송
        본 고 는 BLE 장치 간 의 데이터 전송 을 소개 할 것 이 며, 먼저 데이터 의 전송 이다.데이터 전송 은 Characteristic 을 통 해 이 루어 집 니 다. 데 이 터 를 보 내 는 Characteristic 은 쓰기 권한 이 있어 야 합 니 다. 즉, BluetoothGatt Characteristic 류 의 mProperties 속성 은 다음 과 같은 두 가지 중 하나 여야 합 니 다.
    /**
     *    :     
     */
    public static final int PROPERTY_WRITE_NO_RESPONSE = 0x04;

    /**
     *    :    
     */
    public static final int PROPERTY_WRITE = 0x08;

        BLE 의 연결 과정 에서 연결 이 성공 하면 BluetoothGatt 형식 변 수 를 되 돌려 줍 니 다 (이전 글 의 2.7 단계 참조). 이 종 류 는 BLE 의 주요 동작 을 패키지 합 니 다.데 이 터 를 보 내 는 데 필요 한 Characteristic 은 BLE 장치 연결 이 성공 한 후 Service 를 가 져 오 는 과정 에서 얻 을 수 있 습 니 다 (이전 글 의 2.10 단계 참조). 따라서 BLE 의 데이터 전송 은 다음 과 같 습 니 다.
@Override
public boolean writeCharacteristic(ICharacteristicBle chrBle) {
	return mBleGatt.writeCharacteristic((BluetoothGattCharacteristic)chrBle);
}

        Characteristic 의 알림 리 셋 을 얻 기 위해 서 는 데 이 터 를 보 내기 전에 이 Characteristic 의 알림 을 사용 해 야 합 니 다.
/**
 *   characteristicde   
 * 
 * @param chrBle    characteristic
 * @param enable     
 * @return        
 */
 public boolean setCharacteristicNotification(ICharacteristicBle chrBle, boolean enable) {
 	return mBaseBle.setCharacteristicNotification(chrBle, enable);	
 }

        BLE 의 기록 결과 리 셋 함수:
/**
 *   characteristics       
 *                ,   characteristics         . APP      
 *        ,        ,  APP          .
 * 
 * @param bleGatt GATT     ,  {@link BluetoothGatt#writeCharacteristic}  
 * @param bleChrc        characteristics 
 * @param status        ,          {@link BluetoothGatt#GATT_SUCCESS}
 */
 public void onCharacteristicWrite(BluetoothGatt bleGatt, BluetoothGattCharacteristic bleChrc, int status) {
			
 	/**             */
 	if (status == BluetoothGatt.GATT_SUCCESS) {
								
		try {
			byte[] mByte = bleChrc.getValue();
			StringBuilder mStrBuilder = new StringBuilder(mByte.length);
						
			/**  byte   */
			for (byte mByteChar : mByte) {
					mStrBuilder.append(String.format("%02x", mByteChar));
				} /** end of for (byte mByteChar : mByte) */
						
				LogUtil.info(TAG, "device chrc write data: " + mStrBuilder.toString());
		} catch (Exception e) {
			LogUtil.error(TAG, "device chrc write data transform error");
			e.printStackTrace();
		}				
	} /** end of if (status == BluetoothGatt.GATT_SUCCESS) */ 

}

        이 반전 함수 에서 발송 결 과 를 처리 합 니 다.
2. 데이터 수신
        데이터 수신 방식 은 두 가지 가 있 습 니 다. 읽 기와 알림 입 니 다.읽 는 방식 은 속도 가 느 리 지만 결 과 는 안정 적 이 고 알림 방식 은 반대 입 니 다.실제 사용 과정 에서 알림 방식 을 많이 사용한다.읽 기 방법 을 먼저 소개 하 겠 습 니 다. 읽 기 방식 으로 읽 어야 할 Characteristic 은 읽 기 권한 이 있 습 니 다.
/**
 *    
 */
public static final int PROPERTY_READ = 0x02;

        읽 는 함수:
@Override
public boolean readCharacteristic(ICharacteristicBle chrBle) {
	return mBleGatt.readCharacteristic((BluetoothGattCharacteristic)chrBle.getImpl());
}

        읽 은 결 과 는 읽 은 리 셋 함수 에서 얻 을 수 있 습 니 다:
/**
 *    characteristics       
 * 
 * @param GATT     ,  {@link BluetoothGatt#readCharacteristic}  
 * @param bleChrc         characteristics 
 * @param status        ,            {@link BluetoothGatt#GATT_SUCCESS}
 */
public void onCharacteristicRead(BluetoothGatt bleGatt, BluetoothGattCharacteristic bleChrc, int status) {
			
	/**             */
	if (status == BluetoothGatt.GATT_SUCCESS) {
		byte[] mByte = bleChrc.getValue();
		StringBuilder mStrBuilder = new StringBuilder(mByte.length);
					
		/**  byte   */
		for (byte mByteChar : mByte) {
			mStrBuilder.append(String.format("%02x", mByteChar));
		} /** end of for (byte mByteChar : mByte) */
				
		LogUtil.info(TAG, "device chrc change data: " + mStrBuilder.toString());
	} /** end of if (status == BluetoothGatt.GATT_SUCCESS) */
			
}
        다음은 알림 방식 입 니 다. 그 중에서 알림 방식 의 설정 함 수 는 바로 위의 알림 함수 입 니 다. 설정 이 성공 한 후에 알림 리 셋 함 수 를 통 해 결 과 를 얻 을 수 있 습 니 다.
/**
 *     characteristics       
 * 
 * @param bleGatt  characteristics    GATT     
 * @param bleChrc        characteristics
 */
 public void onCharacteristicChanged(BluetoothGatt bleGatt, BluetoothGattCharacteristic bleChrc) {			
	byte[] mByte = bleChrc.getValue();
	StringBuilder mStrBuilder = new StringBuilder(mByte.length);
	
	/**  byte   */
	for (byte mByteChar : mByte) {
		mStrBuilder.append(String.format("%02x", mByteChar));
	} /** end of for (byte mByteChar : mByte) */
			
	LogUtil.info(TAG, "device chrc change data: " + mStrBuilder.toString());					
}
        이렇게 해서 BLE 의 통신 과정 이 완성 되 었 다.
        BLE 샘플 2 개 첨부
        1. Google 공식 BLE 사례
        https://github.com/googlesamples/android-BluetoothLeGatt
        2. 그리스 에서 무선 센서 네트워크 (WSN) 를 연구 하 는 박사 가 쓴 BLE 오픈 소스 라 이브 러 리
        https://github.com/alt236/Bluetooth-LE-Library---Android         재 미 있 지만 제 대학원 졸업 논문 도 WSN 과 관련 이 있 습 니 다. 지금 은 BLE 와 관련 된 안 드 로 이 드 프로 그래 밍 을 하고 있 습 니 다. 지금 보면 WSN 에서 가장 핫 한 것 은 블 루 투 스 입 니 다.

좋은 웹페이지 즐겨찾기