Adafruit 예제를 참고로 BLE의 가장 기본이 되는 BLE UART 테스트를 해 보자. 필요 없는 기능은 다 제거 하고 가장 심플하게 코드를 수정 했다.
BLE앱에서 nRF52832 보드의 LED를 On/Off 하는 기본 예제
#include <bluefruit.h>
#define LED_BUILTIN 22
// BLE Service
BLEUart bleuart; // uart over ble
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(115200);
Serial.println("nRF52832 SSM BLE-UAR Test");
// Setup the BLE LED to be enabled on CONNECT
Bluefruit.autoConnLed(true);
// Config the peripheral connection with maximum bandwidth
Bluefruit.configPrphBandwidth(BANDWIDTH_MAX);
Bluefruit.begin();
Bluefruit.setTxPower(4);
//콜백 함수 등록
Bluefruit.Periph.setConnectCallback(connect_callback);
Bluefruit.Periph.setDisconnectCallback(disconnect_callback);
// Configure and Start BLE Uart Service
bleuart.begin();
// Set up and start advertising
startAdv();
Serial.println("start advertising");
}
void startAdv(void)
{
// Advertising packet
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addTxPower();
//bleuart 서비스 등록
Bluefruit.Advertising.addService(bleuart);
Bluefruit.ScanResponse.addName();
Bluefruit.Advertising.restartOnDisconnect(true);
Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
}
void loop()
{
//BLE에서 데이터가 전송되면 처리
while ( bleuart.available() )
{
uint8_t ch;
ch = (uint8_t) bleuart.read();
//LED 제어
if(ch=='a')digitalWrite(LED_BUILTIN, 0);
else if(ch=='b')digitalWrite(LED_BUILTIN, 1);
//시리얼 포트로 표시
Serial.write(ch);
}
}
//연결시 수행되는 콜백 함수
void connect_callback(uint16_t conn_handle)
{
// Get the reference to current connection
BLEConnection* connection = Bluefruit.Connection(conn_handle);
char central_name[32] = { 0 };
connection->getPeerName(central_name, sizeof(central_name));
Serial.print("Connected to ");
Serial.println(central_name);
}
//연결 해제시 수행되는 콜백함수
void disconnect_callback(uint16_t conn_handle, uint8_t reason)
{
(void) conn_handle;
(void) reason;
Serial.println();
Serial.print("Disconnected, reason = 0x"); Serial.println(reason, HEX);
}
펌웨어 다룬로드 하고 실행하면 BLE UART로 인식이 된다.
접속해서 UART로 데이터 전송하면 명령에 따라 LED On/Off를 확인 할 수 있다.
반응형