5주차_참고 : 코드 설명 - dhryu60/SmartDevice_2025-1 GitHub Wiki
이 코드는 ESP32 마이크로컨트롤러를 Bluetooth Low Energy (BLE) 서버로 설정하여, 클라이언트 장치로부터 RGB 값을 수신하고 이를 시리얼 모니터에 출력하는 기능을 수행합니다. 각 부분을 상세히 설명하겠습니다.
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
BLE 기능을 활용하기 위해 필요한 라이브러리들을 포함합니다.
-
BLEDevice.h
: BLE 장치 초기화 및 전반적인 BLE 기능을 제공합니다. -
BLEUtils.h
: BLE 관련 유틸리티 함수들을 포함합니다. -
BLEServer.h
: BLE 서버 생성 및 관리를 위한 기능을 제공합니다.
BLEServer* pServer;
BLECharacteristic* pCharacteristic;
-
pServer
: BLE 서버 객체를 가리키는 포인터입니다. -
pCharacteristic
: BLE 특성(characteristic)을 가리키는 포인터로, 클라이언트와의 데이터 교환에 사용됩니다.
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 클라이언트 장치들이 이 서버를 발견하고 연결할 수 있도록 합니다.
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 값을 시리얼 모니터에 출력합니다.
-
콜백 함수: 현재 코드는
loop()
함수에서 지속적으로 특성 값을 확인하고 있습니다. 더 효율적으로 구현하려면, 특성 값이 변경될 때 호출되는 콜백 함수를 정의하여 처리할 수 있습니다. -
에러 처리: 코드에는 에러 처리 부분이 없으므로, 실제 구현 시에는 예외 상황에 대한 처리가 필요합니다.
이 코드는 BLE 서버를 설정하고, 클라이언트로부터 RGB 값을 수신하여 시리얼 모니터에 출력하는 기본적인 기능을 수행합니다. 이를 기반으로 다양한 BLE 응용 프로그램을 개발할 수 있습니다.