ST에서 제공하는 ST BLE Toolbox앱을 이용하여 STM32CubeIDE BLE HRM(Heart Rate) 테스트 코드는 복잡하고 쉽게 수정하기 어려운 구조 이므로 Arduino 환경에서 쉽고 간단하게 다양한 라이브러리를 추가 해서 테스트 해볼 수 있다.
우선 기본 코드를 작성하자.
BLE Service 생성하고 BLE HRS Characteristic을 등록 해 주면 된다.
이후 일정 주기로 HRS특성(ESP32-C3 HRS 테스트 예제 참고)에 맞게 값을 전송하면 된다.
#include "Arduino.h"
#include "BLE.h"
uint16_t hrs_location = 1;
int16_t hrs_ctrl = 1;
byte hrs_mesure[8] = { 0b00001110, 60, 0, 0, 0 , 0, 0, 0};
BLEService HrsService("180D");
BLECharacteristic HrsMeasureChar("2A37", (BLE_PROPERTY_READ | BLE_PROPERTY_NOTIFY), hrs_mesure);
BLECharacteristic HrsBodyLocationChar("2A38", (BLE_PROPERTY_READ | BLE_PROPERTY_NOTIFY), hrs_location);
BLECharacteristic HrsControlChar("2A39", (BLE_PROPERTY_READ | BLE_PROPERTY_NOTIFY), hrs_ctrl);
void setup()
{
Serial.begin(115200);
while (!Serial) { }
BLE.begin();
BLE.setLocalName("STM32WB_HRS");
BLE.setAdvertisedServiceUuid(HrsService.uuid());
HrsService.addCharacteristic(HrsMeasureChar);
HrsService.addCharacteristic(HrsBodyLocationChar);
HrsService.addCharacteristic(HrsControlChar);
BLE.addService(HrsService);
BLE.advertise();
delay(1000);
}
void loop()
{
if (!BLE.advertising() && !BLE.connected()) {
BLE.advertise();
}
if(bpm>90) bpm = 60;
else bpm += 5;
heart[1] = (byte)bpm;
int energyUsed = 3000+bpm;
heart[3] = energyUsed / 256;
heart[2] = energyUsed - (heart[2] * 256);
HrsMeasureChar.writeValue(hrs_mesure, 8);
HrsBodyLocationChar.writeValue(hrs_location);
HrsControlChar.writeValue(hrs_ctrl);
Serial.print("bpm = ");
Serial.println(bpm);
delay(2000);
}
프로그램 다운로드 후 ST BLE ToolBox 앱을 실행하면 STM32WB_HRS로 인식이 되는것을 확인 할 수 있다.
HRS 서비스를 확인해보면 일정간격으로 심박수가 출력 되는 것을 확인 할 수 있다.
참 쉽다(?).
STM32CubeIDE 에서 프로그램 작성하는 것 보다 간단하고 쉽게 수정할 수 있다.
앞으로 간단한 BLE 테스트는 Arduino에서 테스트 하면 좋은것 같다.
반응형