Raspverry Pi Pico W의는 Bluetooth Classic 및 BLE(Bluetooth Low Energy) 기능을 지원한다.
BLE 기능을 테스트 해보자. Pico W의 BLE 설정 테스트를 참고 하여 코드를 작성할 수 있다.
가장 간단하게 테스트 해 볼수 있는 BLE Custom Profile로 데이터를 송수신 하는 코드를 작성하자.
#include <BTstackLib.h>
#include <SPI.h>
static char characteristic_data = 'H';
//BLE 연결 콜백 함수
void deviceConnectedCallback(BLEStatus status, BLEDevice *device) {
(void) device;
switch (status) {
case BLE_STATUS_OK:
Serial.println("Device connected!");
break;
default:
break;
}
}
//BLE 연결 해제 콜백 함수
void deviceDisconnectedCallback(BLEDevice * device) {
(void) device;
Serial.println("Disconnected.");
}
/* LISTING_END(LEPeripheralDeviceDisconnectedCallback): Device Disconnected Callback */
//Read Callback 함수
uint16_t gattReadCallback(uint16_t value_handle, uint8_t * buffer, uint16_t buffer_size) {
(void) value_handle;
(void) buffer_size;
if (buffer) {
Serial.print("gattReadCallback, value: ");
Serial.println(characteristic_data, HEX);
buffer[0] = characteristic_data;
}
return 1;
}
//Write Callback 콜백 함수
int gattWriteCallback(uint16_t value_handle, uint8_t *buffer, uint16_t size) {
(void) value_handle;
(void) size;
characteristic_data = buffer[0];
Serial.print("gattWriteCallback , value ");
Serial.println(characteristic_data, HEX);
return 0;
}
void setup(void) {
Serial.begin(115200);
//콜백 함수 등록
BTstack.setBLEDeviceConnectedCallback(deviceConnectedCallback);
BTstack.setBLEDeviceDisconnectedCallback(deviceDisconnectedCallback);
BTstack.setGATTCharacteristicRead(gattReadCallback);
BTstack.setGATTCharacteristicWrite(gattWriteCallback);
//GATT 설정
BTstack.addGATTService(new UUID("B8E06067-62AD-41BA-9231-206AE80AB551"));
BTstack.addGATTCharacteristic(new UUID("f897177b-aee8-4767-8ecc-cc694fd5fcef"), ATT_PROPERTY_READ, "This is a String!");
BTstack.addGATTCharacteristicDynamic(new UUID("f897177b-aee8-4767-8ecc-cc694fd5fce0"), ATT_PROPERTY_READ | ATT_PROPERTY_WRITE | ATT_PROPERTY_NOTIFY, 0);
//Bluetooth시작 , BLE advertisements
BTstack.setup();
BTstack.startAdvertising();
}
//BLE 메인 루프
void loop(void) {
BTstack.loop();
}
RP2040 펌웨어 다운로드 후 장치 검색하면 LE Shield로 검색된다.
BLE장치 연결후 Write/Read Characteristic 으로 데이터 송수신 되는 것을 확인 할 수 있다.
반응형