Development Environment
이전at command firmware flash와달리,현재download tool이update됨에따라,
flash가능한bin file의개수가줄어현재의flash download tool로는이전과같은bin file을모두flash하는것이불가능
-> Atcomman를upload하고수정을하지않고사용하므로factory_WROOM-32.bin file하나로upload해도된다.
-> 따라서, factory file을upload,address 0x0,DoNotChgBincheck를통해flash
Data Check
BLE Scanning Application : nRF Connect, BLE Name : Cycplus C3 12025
CSC Measurement로 value가 찍히는 것을 확인
(Cycling Speed and Cadence service)
(UUID 0x2A5B, Properties : Notify)
Service UUID : 0x1816
AT Command
1.BLE initialization (Client)
$ AT+BLEINIT=1
2. BLE Client : Start scanning
$ AT+BLESCAN=1,3 // Scanning Enable, 3초 동안 scanning
<BLE address>,<rssi>,<adv_data>,<scan_rsp_data> 정보를 담고있다.
여기서, adv_data가 중요할 것 같아 추가적인 자료
adv_data란?
Advertising data :
1st byte: length of the element (excluding the length byte itself)
2nd byte: AD type – specifies what data is included in the element
AD data – one or more bytes - the meaning is defined by AD type
Some of the most commonly used data types are:
0x01 = Flags
0x03 = Complete List of 16-bit Service Class UUIDs
0x09 = Complete Local Name
0x08 = Shortened Local Name
라고 되어있다. 이를 통해 현재 데이터를 분석해보면
Adv_data - 031985040201061109437963706c7573204333203132303235
Cycplus – 0x 43 79 63 70 6c 75 73
Address - e7:6b:e3:69:b6:df
Cycplus ~~라는 name을 가진 device의 Address는 e7:6b:e3:69:b6:df 이다.
AT command의 ble address 중 Cycplus device에 connection할 때, 사용하기 위해 device의 address가 필요했다.
AT Command
3. Connection
$ AT+BLECONN=0, "BLE_Addr“,1 //e7:6b:e3:69:b6:df
41 54 2B 42 4C 45 43 4F 4E 4E 3D 30 2C 22 65 37 3A 36 62 3A 65 33 3A 36 39 3A 62 36 3A 64 66 22 2C 31 0D 0A
4. Discover Service, Characteristic
$ AT+BLEGATTCPRIMSRV=conn_index / AT+BLEGATTCCHAR=conn_index, srv_index
5. Read
$ AT+BLEGATTCRD=conn_index, srv_index, char_index
AT Command
문제점 : descriptor index를 주지 않을 경우, 상위의 characteristic의 value를 출력해야 되는데 ERROR 출력
UUID
UUID : 128bit 값 = 16bit 값 * 2^(96)+ blebaseUUID
Bluetooth base UUID : 00000000 0000 1000 8000 00805f9b34fb
현재 알 수 있는 Cycplus device information
Adv_data - 031985040201061109437963706c7573204333203132303235
Address - e7:6b:e3:69:b6:df
Service UUID : 0x1816 > 00001816 0000 1000 8000 00805f9b34fb
Characteristics UUID : 0x2A5B > 00002a5b 0000 1000 8000 00805f9b34fb
Arduino ide에서 address,service,characteristics uuid를 활용하여 server와 통신가능
결과적으로 위의 정보를 토대로 device와 connection할 수 있었으며 data를 가져올 수 있었다.
그럼 이 데이터가 무엇이냐?
CSC Measurement
CSC measuremen는 속도 관련 data, cadence 관련 data를 전송하는 데 사용된다.
FLAG Field에 따라
Bit 0.누적 휠 회전 및 마지막 휠 이벤트 시간 필드
Bit 1.누적 크랭크 회전 및 마지막 크랭크 이벤트 시간 필드
중 하나 또는 두 필드 쌍이 포함된다.
Server는 자전거가 움직이는 속도 관련 data와 사용자가 크랭크를 돌리는 분당 횟수를 나타내는 cadence 관련 data를 측정한다.
Wheel Revolution data ( flag Bit 0이 1일 때)
-누적 휠 회전수 : 4bytes
-마지막 휠 이벤트 시간 : 2bytes
Crank Revolution data ( flag Bit 1이 1일 때)
-누적 크랭크 회전수 : 2bytes
-마지막 크랭크 이벤트 시간 : 2bytes 로 구성된다.
위에서는 flag가 모두 0x02 == 0b10 이므로 Crank Revolution data와 관련된 4bytes로 구성,
누적 크랭크 회전수 = 2,3번째 field
마지막 크랭크 이벤트 시간 = 4,5번째 field가 된다.
'Project > BLE' 카테고리의 다른 글
[BLE] esp32 communication using AT command (0) | 2022.04.11 |
---|---|
[BLE] esp32 communication using wifi, ble, uart (0) | 2022.04.11 |
[BLE] esp32 study (0) | 2022.04.11 |
[IOT] 2. Fan Control with BLE (0) | 2021.07.12 |
[IOT] 1. Fan Control with Arduino,relay Module (0) | 2021.06.23 |