[ST_MICRO]/STM32WB

STM32WB55 SSM - Arduino BLE HRS(Heart Rate Service) 테스트

nexp 2023. 9. 24. 21:51

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에서 테스트 하면 좋은것 같다.

 

반응형