본문 바로가기

[ST_MICRO]/STM32WB

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

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

 

반응형