?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

질문 | BLE device로 데이터 보내기가 안됩니다. ㅠ

페이지 정보

작성자 eachone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-12-08 19:16 조회1,044회 댓글0건

본문

구글링하다 이거다! 라는 자료가 없어서 헤메이다가 여기까지 왔습니다. ㅠ

아두이노에 블루투스 모듈을 장착하고

휴대폰으로 특정 문자열을 전송하려고합니다.

기본적인 코드는 구글링하다보니 스켄하고, BLE목록에서 선택한다음 연결하는 코드를 구해 조금씩 변경해보면서 쓰고 있습니다.

BluetoothGattCharacteristic characteristic = mGattCharacteristics.get(1).get(0);

위라인에서 자꾸 characteristic을 얻어오다가 자꾸 죽는문제가 있는데 디버깅 해보니 size 0인데 접근하니 outofindexbound로 죽더군요 일단 블루투스 모듈을 다른걸로 바꾸니 해결은 되었는데 왜 characteristic을 못가져오는건지 확인해봐야 겠습니다.

여쭤보고 싶은 것은 outofindexbound exception이 발생하지 않은 BT모듈에서는 연결도 잘되는데 데이터를 전송하려고  

BluetoothGatt.writeCharacterstic(characteristic)을 호출하면 항상 결과값이 false입니다.

추적해보니,

characterstic의 프로퍼티가 PROPERTY_WRITE 도 아니고 PROPERTY_WRITE_NO_RESPONSE 도 아니라서 해당 함수가 false를 반환하는거였습니다. 

 

  public boolean writeCharacteristic(BluetoothGattCharacteristic characteristic) {

        if ((characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_WRITE) == 0

            && (characteristic.getProperties() &

                BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) == 0) return false;

        if (DBG) Log.d(TAG, "writeCharacteristic() - uuid: " + characteristic.getUuid());

        if (mService == null || mClientIf == 0) return false;

        BluetoothGattService service = characteristic.getService();

        if (service == null) return false;

        BluetoothDevice device = service.getDevice();

        if (device == null) return false;

        try {

            mService.writeCharacteristic(mClientIf, device.getAddress(),

                service.getType(), service.getInstanceId(),

                new ParcelUuid(service.getUuid()), characteristic.getInstanceId(),

                new ParcelUuid(characteristic.getUuid()),

                characteristic.getWriteType(), AUTHENTICATION_NONE,

                characteristic.getValue());

        } catch (RemoteException e) {

            Log.e(TAG,"",e);

            return false;

        }

        return true;

    }

 

characterstic값이 왜 저렇게 되어있는걸까요? 값을보니 0x20으로 INDICATE값이던데 어디서 잘못된건지 모르겠습니다.

혹시 집히는 곳이 있다면 부탁드립니다.

댓글목록

등록된 댓글이 없습니다.