5주차_참고 : 코드 설명 - dhryu60/SmartDevice_2025-1 GitHub Wiki

이 코드는 ESP32 마이크로컨트롤러를 Bluetooth Low Energy (BLE) 서버로 설정하여, 클라이언트 장치로부터 RGB 값을 수신하고 이를 시리얼 모니터에 출력하는 기능을 수행합니다. 각 부분을 상세히 설명하겠습니다.


1. 라이브러리 포함

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

BLE 기능을 활용하기 위해 필요한 라이브러리들을 포함합니다.

  • BLEDevice.h: BLE 장치 초기화 및 전반적인 BLE 기능을 제공합니다.
  • BLEUtils.h: BLE 관련 유틸리티 함수들을 포함합니다.
  • BLEServer.h: BLE 서버 생성 및 관리를 위한 기능을 제공합니다.

2. 전역 변수 선언

BLEServer* pServer;
BLECharacteristic* pCharacteristic;
  • pServer: BLE 서버 객체를 가리키는 포인터입니다.
  • pCharacteristic: BLE 특성(characteristic)을 가리키는 포인터로, 클라이언트와의 데이터 교환에 사용됩니다.

3. setup() 함수

void setup() {
  Serial.begin(115200);
  BLEDevice::init("ESP32-RGB-Control");
  pServer = BLEDevice::createServer();
  BLEService *pService = pServer->createService(BLEUUID((uint16_t)0x1812));
  pCharacteristic = pService->createCharacteristic(
                     BLEUUID((uint16_t)0x2A56),
                     BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY
                   );
  pService->start();
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(pService->getUUID());
  pAdvertising->start();
}
  • Serial.begin(115200);: 시리얼 통신을 초당 115200 baud rate로 초기화합니다.

  • BLEDevice::init("ESP32-RGB-Control");: BLE 장치를 초기화하고, 장치 이름을 "ESP32-RGB-Control"로 설정합니다.

  • pServer = BLEDevice::createServer();: BLE 서버를 생성하고, pServer 포인터에 할당합니다.

  • BLEService *pService = pServer->createService(BLEUUID((uint16_t)0x1812));: UUID가 0x1812인 BLE 서비스를 생성합니다.

  • pCharacteristic = pService->createCharacteristic( BLEUUID((uint16_t)0x2A56), BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY );: UUID가 0x2A56인 BLE 특성을 생성하며, 이 특성은 클라이언트로부터 데이터를 쓰기(WRITE) 및 알림(NOTIFY) 기능을 가집니다.

  • pService->start();: 서비스를 시작하여 클라이언트가 이를 탐색할 수 있도록 합니다.

  • BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();: 광고(advertising) 객체를 가져옵니다.

  • pAdvertising->addServiceUUID(pService->getUUID());: 광고 패킷에 서비스 UUID를 추가하여, 클라이언트가 이 서비스를 인식할 수 있도록 합니다.

  • pAdvertising->start();: BLE 광고를 시작하여, 주변 BLE 클라이언트 장치들이 이 서버를 발견하고 연결할 수 있도록 합니다.


4. loop() 함수

void loop() {
  if (pCharacteristic->getValue().length() > 0) {
    std::string rgbValue = pCharacteristic->getValue();
    Serial.println(rgbValue.c_str()); // 수신된 RGB 값 출력
  }
}
  • if (pCharacteristic->getValue().length() > 0) {: 특성에 새로운 데이터가 쓰여졌는지 확인합니다.

  • std::string rgbValue = pCharacteristic->getValue();: 특성에 저장된 값을 문자열로 가져옵니다.

  • Serial.println(rgbValue.c_str());: 수신된 RGB 값을 시리얼 모니터에 출력합니다.


5. 추가 고려사항

  • 콜백 함수: 현재 코드는 loop() 함수에서 지속적으로 특성 값을 확인하고 있습니다. 더 효율적으로 구현하려면, 특성 값이 변경될 때 호출되는 콜백 함수를 정의하여 처리할 수 있습니다.

  • 에러 처리: 코드에는 에러 처리 부분이 없으므로, 실제 구현 시에는 예외 상황에 대한 처리가 필요합니다.


이 코드는 BLE 서버를 설정하고, 클라이언트로부터 RGB 값을 수신하여 시리얼 모니터에 출력하는 기본적인 기능을 수행합니다. 이를 기반으로 다양한 BLE 응용 프로그램을 개발할 수 있습니다.

⚠️ **GitHub.com Fallback** ⚠️