본문 바로가기

RaspberryPi/RaspberryPi PicoW

Raspberry Pi PicoW - BLE Custom Profile 서비스 테스트

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 으로 데이터 송수신 되는 것을 확인 할 수 있다.

 

반응형