?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

BLE NOTIFICATION 문제 문의 드립니다.

페이지 정보

작성자 반지돌이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일15-10-13 10:55 조회6,444회 댓글7건

본문

안녕하세요  BLE 관련하여  현재 국내 최고 전문가님께 답답한 마음에 문의를 드립니다.

 

아두이노 통신프로젝트 를 구매하여 많은  도움을 받고  여러시행착오를 격지 않고 이렇게 바로 BLE와 접하게 되어 무척 기쁘게 생각합니다.

 

다름이 아니라  BLE NOTIFICATION를 받지 못해서 벌써 일주일째 충혈된 눈으로 날밤을 지새우고 있어  BLE 관련 국내 최고 전문가님께 문의를 드리게 되었답니다. 

 

제공해주신 BLE채팅프로그램을   블루두이노와  통신하게 하려고 하는 중인데  스마트폰에서  아두이노로  전송은 아주 잘되고 있으나  

 

 반대로 아두이노에서 스마트폰으로 수신이 전혀 되지 않는 상황이랍니다.   

 

즉  BLE NOTIFICATION 설정에 문제가 있는듯 한데 무엇이 문제인지 좀 알려주시면 대단히 감사하겠습니다.

 

 

BLUEDUINO

블루두이노 제공서비스

1. GENERIC ACCESS SERVICE

2. GENERIC ATTRIBUTE SERVICE

3. DEVICE INFORMATION

4. UNKNOWN SERVICE

 

@ UNKNOWN SERVICE  characteristics:

       1. UNKNOWN CHARACTERISTIC    0000fff1-0000-1000-8000-00805f9b34fb   <---  notification  characteristic

       2. UNKNOWN CHARACTERISTIC    0000fff2-0000-1000-8000-00805f9b34fb

 

       

1. 0000fff1-0000-1000-8000-00805f9b34fb characteristic의 descriptor 는 두개로 구성되어 있습니다.

    1. 00002902-000-1000-9000-00805f9b34fb

    2. 00002901-000-1000-9000-00805f9b34fb

 

 2.  0000fff2-0000-1000-8000-00805f9b34fb  CHARACTERISTIC 에  값을 대입하여 

      BLE채팅앱에서  스마트폰에서 아두이노로 전송은 아주 잘됩니다.

 

다만 

1.  0000fff1-0000-1000-8000-00805f9b34fb  NOTIFICATION 설정후 

   BluetoothGattCallback mGattCallback = new BluetoothGattCallback() 에서

 

   public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) 

  에서 전혀 반응이 없다는것이 문제 입니다.

 

 

참고 저의  NOTIFICATION 설정값입니다.

 

public static final UUID CCCD = UUID
      .fromString("00002902-0000-1000-8000-00805f9b34fb");
public static final UUID CCCF = UUID
      .fromString("00002901-0000-1000-8000-00805f9b34fb");
public static final UUID RX_SERVICE_UUID = UUID
      .fromString("0000fff0-0000-1000-8000-00805f9b34fb");
public static final UUID RX_CHAR_UUID = UUID
      .fromString("0000fff2-0000-1000-8000-00805f9b34fb");
public static final UUID TX_CHAR_UUID = UUID
      .fromString("0000fff1-0000-1000-8000-00805f9b34fb");

 

 public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
                                            boolean enabled) {
      if (mBluetoothAdapter == null || mBluetoothGatt == null) {
          Logs.d("# BluetoothAdapter not initialized");
          return;
      }

 if(  isNotificationCharacteristic(characteristic)  ) {

/*
if(characteristic.getUuid().equals(TX_CHAR_UUID)){
   BluetoothGattDescriptor descriptor = characteristic.getDescriptor(TX_CHAR_UUID);
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);
}
*/

   // if (characteristic.getUuid().equals(TX_CHAR_UUID)) {
   //  mBluetoothGatt.setCharacteristicNotification(ch   // if (characteristic.getUuid().equals(TX_CHAR_UUID)) {aracteristic, enabled);

     if (characteristic.getUuid().equals(TX_CHAR_UUID))
       {
          Logs.d("# writeDescriptor on");
          mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
          BluetoothGattDescriptor desc = characteristic.getDescriptor(CCCD);
          desc.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
          mBluetoothGatt.writeDescriptor(desc);

       }
       else
       {
          Logs.d("# writeDescriptor off");
          mBluetoothGatt.setCharacteristicNotification(characteristic, false);
          BluetoothGattDescriptor desc = characteristic.getDescriptor(CCCD);
          desc.setValue(BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
          mBluetoothGatt.writeDescriptor(desc);

       }





    } // if is notification

  }

참고 notification 설정과 디스크립터설정은 정상적으로 잘 수행됩니다. 아무런 에러가 발생하지 않습니다.

다만   onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic)  에서 아무런 반응이 발생하지 않는다는것이 큰문제 인데 무엇이 문제 일까요??????????

귀하의 조언이 큰 도움이 될듯 합니다.    질의에 답해주시면 대단히 감사하겠습니다.  감사합니다.

 

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

저도 처음에 송수신이 가능한 Characteristic 을 찾지 못해 고생을 했는데.. 무식하게 characteristic과 특성(read, write, noti...)을 모두 출력해서 바꿔가며 테스트 했습니다. HM-10 모듈이 아니라면 귀찮아도 이렇게 테스트 해보셔야 할 것 같습니다.
https://github.com/godstale/BLEChat/blob/master/src/com/hardcopy/blechat/bluetooth/BleManager.java
위 링크에서 checkGattServices() 함수 안에서 모든 characteristic과 특성 출력하도록 수정하고 characteristic 바꿔가며 테스트 해보세요.

반지돌이님의 댓글

반지돌이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

답변주셔서 감사 합니다.  HM-10모듈이 아닌 블루두이노 에서 상황입니다.  notification Characteristic  은 단한개  notification characteristic0000fff1-0000-1000-8000-00805f9b34fb 인데요    문제는
onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) 에 반응이 오도록  ON/OFF 하는 기능이 무엇이냐 하는 것인데요  동일한 블루두이노 장치로  타어플에서는  Notification on/off 를 버튼으로  자유롭게 제어되는것을 확인했구요  단 blechat 에서는 전혀 Notification 이 먹히지 않고 있다는것이지요  말씀하신 체크 해봐야 할 characteristic 은 단한개 뿐인데 단지 on/off하는 방법만 알면 좋겠습니다.    BLE Scanner:Read,Write,Notify  앱에서는 동일한  아두이노 기계에서 잘동작중인데요  안드로이드 스튜디오 에서 컴파일한  blechat 에서 notificaton이 전혀 반응하지 않고 있답니다.  힌트라도 주시면 대단히 감사하겠습니다.

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

네 이미 characteristic 을 알고 계시다면 setCharacteristicNotification() 메서드로 on/off 가능합니다. 위에 링크해놓은 파일의 243 line을 참고하세요.
이 작업은 BLE 장치가 페어링 된 이후 onServicesDiscovered() 콜백 메서드가 호출될 때 characteristic 검사하면서 실행해주면 됩니다. checkGattServices() 메서드 참고하세요.

반지돌이님의 댓글

반지돌이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

답변 감사합니다.  자체적으로 해결된듯합니다.  업체별 블루투스 장치마다 제공해주는 서비스와 characteristic 이 달라서  장치에 맞게 프로그램도 수정되어야  해결되는 모양입니다.  즉 블루투스 업체별 제공해주는 서비스,characteristic를  먼저파악하고 명확하게 필요한  characteristic를  define 한후 프로그램을 작성하는 접근방식도 도움이 될듯 합니다.  감사합니다.

조준우님의 댓글

조준우 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

안녕하세요
blueduino ble 관련하여 공부중인학생입니다.
모델도 같고 휴대폰에서 아두이노로 송신되는것만 되는 것도 똑같은상황이라
여쭤볼게 있어서 연락드립니다.
만약 보신다면 010 9600 3746 으로 연락한번만 부탁드려요!!

안드로이드에미쳐님의 댓글

안드로이드에미쳐 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

쓰기 속성은 Write 고 장비가 보내는 것 읽는 것이 notification 이죠?
위에서는 특성 값 돌면서 uuid 설정 값 맞는거 찾는것이고요..?