ESP32 GATT(HeartRate) 구현해보기

ESP32 GATT(HeartRate) 구현해보기

ESP32 GATT 포스팅

목차

  1. ESP32 Arduino IDE 설정하기
  2. ESP32 Ble GAP 설정하기
  3. Ble GATT 개론
  4. ESP GATT(HeartRate) 구현해보기

본 포스팅은 아두이노 IDE(Arduino IDE)를 이용해서 GATT 구현하는 포스팅입니다.

코드를 하나하나 다 짤 수는 없는 노릇이니 예제를 먼저 불러보자

 파일 - 예제 - ESP32_BLE_Arudino - BLE_notify

를 실행하자. ESP32_BLE_Arudino는 사용자 지정 라이브러리 쪽에 위치해있다.

BLE_notify for Arduino by Kolban

갓-콜반 센세가 작성한 notify 예제를 응용해서 심박수 예제를 만들어볼거다.

이번에 사용할 서비스는 Heart Rate이고, 주소는 0x180D이다.

사용할 CHARACTERISTIC은 Heart Rate Measurement이고, 주소는 0x2A37이다.

따라서 #define을 아래와 같이 수정해주자.

Modify Servie UUID to 0x180d(HeartRate Service)
characteristic uuid to 0x2a37(heartrate mearsurement)

디바이스 이름을 바꾸고 싶다면 init안의 이름을 바꾸면 된다.

Change name what you want in BLEDevice::init

사용할 characteristic의 특징을 설정하고 싶으면 아래 부분을 수정하면 된다. 지난 포스팅에서 다뤘다시피 필수적으로 사용하는 특징은 notify이므로 notify를 제외한 모든 특성을 제거했다.

Heart Rate Measurement only uses notify property.

수정해야하는 코드는 아래 부분이다.

Modify Characteristic Property

Heart Rate Measurement 특성은 5개의 행렬을 가진다. 따라서 길이를 5로 설정해서 그 특징에 맞게 설정해줘야한다. 그 특징은 해당 사이트에서 확인해주면된다.

나는 버튼이 눌리면 bpm이 1씩 올라가는 예제를 만들고 싶었으므로 (실제로 회로를 꾸며서 계산할 생각이 없다.) button 구조체부터 만들었다.

Make Struct for button function and
declare button1.

그리고 setup에서 인터럽트를 생성한다.

Add attachinterrupt for falling edge

그리고 인터럽트 코드를 아래와 같이추가해주면 되겠다.

add code in isr()

그 다음 HeartRate measurement에 맞는 행렬을 만들어준다음 연결시 값을 notify해주는 코드를 작성해주면 되겠다.

(엄밀히 말하면 구조체로 만들어 주는 것이 맞으나, 별 기능이 없으므로 행렬로 해결했다.)

declare HeartBeat array and mofiy notify code.

이 업로드 된 상태에서 잘 되는지 nrf connect에서 확인해보자.

execute ble code

잘 된다. 근데 다소 아쉬운점이 있다면, advertising 할 때 2. 항목에서 다뤘던 것처럼 하트모양으로 만들고 싶은거다.

그래서 위처럼 바꿔보자.

BLEAdvertising *pAdvertising = pServer->getAdvertising();

코드 밑에 아래 코드 한 줄만 추가하자.

pAdvertising->addServiceUUID(SERVICE_UUID);

그러면 아래 영상처럼 하트로 변한 것을 볼 수 있을 것이다.

끗.

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d 블로거가 이것을 좋아합니다: