아두이노 우노 R4 WiFi 블루투스 테이블 예제 BLE를 통한 구조화된 데이터 표시 튜토리얼
블루투스 테이블 예제는 DIYables 블루투스 STEM 앱을 통해 구조화된 데이터 표시 기능을 제공합니다. BLE(Bluetooth Low Energy) 를 사용하는 Arduino UNO R4 WiFi 전용으로 설계되어 센서 값, 시스템 상태 및 모든 데이터를 스마트폰의 깔끔한 테이블 형식으로 표시합니다. 실시간 값 업데이트가 가능한 명명된 행을 지원합니다. 대시보드, 시스템 모니터링, 다중 센서 표시에 적합합니다.
참고: Arduino UNO R4 WiFi는 BLE(Bluetooth Low Energy)만 지원 합니다. 클래식 블루투스는 지원하지 않습니다. DIYables 블루투스 앱은 Android에서 BLE와 클래식 블루투스를 모두 지원하고, iOS에서는 BLE를 지원합니다. 이 보드는 BLE를 사용하므로 앱은 Android와 iOS 모두 에서 작동합니다.
명명된 행 : 레이블이 있는 행 정의(예: "온도", "습도")
실시간 업데이트 : 개별 값 업데이트를 효율적으로 푸시
구조 동기화 : 연결 시 테이블 구조 자동 전송
유연한 데이터 : 모든 문자열 또는 숫자 데이터 표시
최대 20행 : 여러 데이터 필드 지원
Android 및 iOS에서 작동 : BLE는 두 플랫폼 모두에서 지원
페어링 불필요 : BLE는 수동 페어링 없이 자동 연결
1 × 아두이노 우노 R4 와이파이 쿠팡 | 아마존
1 × (또는) DIYables STEM V4 IoT 쿠팡 | 아마존
1 × USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1 × USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1 × (추천 ) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1 × (추천 ) Sensors/Servo Expansion Shield for Arduino UNO R4 아마존
1 × (추천 ) 아두이노 우노 R4용 브레드보드 쉴드 쿠팡 | 아마존
1 × (추천 ) 아두이노 우노 R4용 케이스 쿠팡 | 아마존
1 × (추천 ) 아두이노 우노 R4용 전원 분배기 쿠팡 | 아마존
1 × (추천 ) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
다음 단계를 순서대로 따라하세요:
USB 케이블을 사용하여 Arduino UNO R4 WiFi 보드를 컴퓨터에 연결합니다.
컴퓨터에서 Arduino IDE를 실행합니다.
Arduino UNO R4 WiFi 보드와 적절한 COM 포트를 선택합니다.
Arduino IDE 왼쪽 바에서 Libraries 아이콘으로 이동합니다.
"DIYables Bluetooth" 를 검색한 다음 DIYables의 DIYables Bluetooth 라이브러리를 찾습니다.
Install 버튼을 클릭하여 라이브러리를 설치합니다.
#include <DIYables_BluetoothServer .h>
#include <DIYables_BluetoothTable .h>
#include <platforms/DIYables_ArduinoBLE.h>
const char* DEVICE_NAME = "Arduino_Table" ;
const char* SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214" ;
const char* TX_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214" ;
const char* RX_UUID = "19B10002-E8F2-537E-4F6C-D104768A1214" ;
DIYables_ArduinoBLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID);
DIYables_BluetoothServer bluetoothServer(bluetooth);
DIYables_BluetoothTable bluetoothTable;
unsigned long lastUpdate = 0;
const unsigned long UPDATE_INTERVAL = 1000;
int counter = 0;
void setup () {
Serial .begin (9600);
while (!Serial );
Serial .println ("DIYables Bluetooth - Table Example" );
bluetoothServer.begin ();
bluetoothServer.addApp (&bluetoothTable);
bluetoothTable.addRow ("Temperature" );
bluetoothTable.addRow ("Humidity" );
bluetoothTable.addRow ("Pressure" );
bluetoothTable.addRow ("Counter" );
bluetoothTable.addRow ("Uptime" );
bluetoothTable.addRow ("Free Memory" );
bluetoothTable.addRow ("Status" );
Serial .print ("Table rows defined: " );
Serial .println (bluetoothTable.getRowCount ());
bluetoothServer.setOnConnected ([]() {
Serial .println ("Bluetooth connected!" );
bluetoothTable.sendTableStructure ();
updateTableValues();
});
bluetoothServer.setOnDisconnected ([]() {
Serial .println ("Bluetooth disconnected!" );
});
bluetoothTable.onDataRequest ([]() {
Serial .println ("App requested table data" );
bluetoothTable.sendTableStructure ();
updateTableValues();
});
Serial .println ("Waiting for Bluetooth connection..." );
}
void updateTableValues() {
float temperature = 20.0 + random (0, 100) / 10.0;
bluetoothTable.sendValueUpdate ("Temperature" , String (temperature, 1) + " °C" );
int humidity = 40 + random (0, 21);
bluetoothTable.sendValueUpdate ("Humidity" , String (humidity) + " %" );
int pressure = 1000 + random (0, 21);
bluetoothTable.sendValueUpdate ("Pressure" , String (pressure) + " hPa" );
bluetoothTable.sendValueUpdate ("Counter" , String (counter));
counter++;
unsigned long uptime = millis () / 1000;
String uptimeStr = String (uptime / 3600) + "h " +
String ((uptime % 3600) / 60) + "m " +
String (uptime % 60) + "s" ;
bluetoothTable.sendValueUpdate ("Uptime" , uptimeStr);
int freeMemory = 2048 - random (0, 512);
bluetoothTable.sendValueUpdate ("Free Memory" , String (freeMemory) + " bytes" );
bluetoothTable.sendValueUpdate ("Status" , counter % 2 == 0 ? "Running" : "Active" );
Serial .println ("Table values updated" );
}
void loop () {
bluetoothServer.loop ();
if (bluetooth.isConnected () && millis () - lastUpdate >= UPDATE_INTERVAL) {
lastUpdate = millis ();
updateTableValues();
}
delay (10);
}
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
DIYables Bluetooth - Table Example
Waiting for Bluetooth connection...
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
참고: DIYables 블루투스 앱은 Android에서 BLE와 클래식 블루투스를 모두 지원하고, iOS에서는 BLE를 지원합니다. Arduino UNO R4 WiFi는 BLE를 사용하므로 앱은 Android와 iOS 모두 에서 작동합니다. BLE에는 수동 페어링이 필요 없으며 스캔하고 연결하기만 하면 됩니다.
DIYables 블루투스 앱을 엽니다.
처음 앱을 열면 권한을 요청합니다. 다음을 허용해 주세요:
휴대폰에서 블루투스가 켜져 있는지 확인합니다.
홈 화면에서 Connect 버튼을 탭합니다. 앱이 BLE 기기를 스캔합니다.
참고: 홈 화면의 설정 아이콘을 탭하면 앱을 표시하거나 숨길 수 있습니다. 자세한 내용은 DIYables 블루투스 앱 사용 설명서 를 참조하세요.
온도, 습도, 기압, 카운터, 가동 시간, 여유 메모리, 상태 등 행이 있는 테이블이 실시간으로 업데이트되는 것을 확인합니다.
이제 Arduino IDE의 시리얼 모니터를 다시 확인하세요. 다음과 같이 표시됩니다:
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
Bluetooth connected!
Sending table updates...
Temperature: 25.30 °C
Humidity: 55.70 %
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
bluetoothTable.addRow ("Temperature" , "-- °C" );
bluetoothTable.addRow ("Humidity" , "-- %" );
bluetoothTable.addRow ("Pressure" , "-- hPa" );
bluetoothTable.addRow ("Status" , "Initializing..." );
bluetoothTable.sendValueUpdate ("Temperature" , "25.5 °C" );
bluetoothTable.sendValueUpdate ("Status" , "Running" );
bluetoothTable.sendValueUpdate (0, "25.5 °C" );
bluetoothTable.sendValueUpdate (3, "Running" );
bluetoothTable.sendTableStructure ();
bluetoothTable.onDataRequest ([]() {
bluetoothTable.sendTableStructure ();
});
DIYables_BluetoothTable bluetoothTable(bluetoothServer);
void setup () {
bluetoothTable.addRow ("Temperature" , "-- °C" );
bluetoothTable.addRow ("Humidity" , "-- %" );
bluetoothTable.addRow ("Pressure" , "-- hPa" );
bluetoothTable.addRow ("Wind Speed" , "-- m/s" );
bluetoothTable.addRow ("Rain" , "None" );
bluetoothTable.onDataRequest ([]() {
bluetoothTable.sendTableStructure ();
});
}
void loop () {
bluetoothServer.loop ();
static unsigned long lastTime = 0;
if (millis () - lastTime >= 2000) {
lastTime = millis ();
bluetoothTable.sendValueUpdate ("Temperature" , String (readTemp(), 1) + " °C" );
bluetoothTable.sendValueUpdate ("Humidity" , String (readHumidity (), 1) + " %" );
bluetoothTable.sendValueUpdate ("Pressure" , String (readPressure(), 0) + " hPa" );
}
}
void setup () {
bluetoothTable.addRow ("Uptime" , "0s" );
bluetoothTable.addRow ("Free RAM" , "-- bytes" );
bluetoothTable.addRow ("WiFi RSSI" , "-- dBm" );
bluetoothTable.addRow ("IP Address" , "N/A" );
bluetoothTable.addRow ("Status" , "Starting..." );
}
void loop () {
bluetoothServer.loop ();
static unsigned long lastTime = 0;
if (millis () - lastTime >= 1000) {
lastTime = millis ();
unsigned long uptime = millis () / 1000;
String uptimeStr = String (uptime / 3600) + "h " + String ((uptime % 3600) / 60) + "m " + String (uptime % 60) + "s" ;
bluetoothTable.sendValueUpdate ("Uptime" , uptimeStr);
bluetoothTable.sendValueUpdate ("Status" , "Running" );
}
}
1. 앱에서 기기를 찾을 수 없음
Arduino UNO R4 WiFi가 전원이 켜져 있고 스케치가 업로드되어 있는지 확인하세요.
휴대폰의 블루투스가 활성화되어 있는지 확인하세요.
Android 11 이하에서는 위치 서비스도 활성화하세요.
2. 테이블이 비어 있거나 행이 표시되지 않음
연결 전에 setup () 에서 addRow () 가 호출되는지 확인하세요.
구조를 다시 전송하려면 onDataRequest 콜백을 구현하세요.
sendTableStructure () 가 호출되는지 확인하세요.
3. 값이 업데이트되지 않음
sendValueUpdate () 가 루프에서 호출되고 있는지 확인하세요.
행 이름이 정확히 일치하는지 확인하세요(대소문자 구분).
모든 루프 반복에서 bluetoothServer.loop () 가 호출되는지 확인하세요.
4. 행 이름이 일치하지 않음
5. 업로드 실패 또는 보드를 인식하지 못함
기상 관측소 대시보드
시스템 리소스 모니터
다중 센서 데이터 표시
기기 구성 패널
IoT 기기 상태 보드
블루투스 테이블 예제를 마스터한 후 다음을 시도해 보세요:
블루투스 플로터 - 그래픽 데이터 시각화용
블루투스 모니터 - 텍스트 기반 상호 작용용
블루투스 온도계 - 게이지 스타일 표시용
다중 블루투스 앱 - 테이블과 다른 앱 결합
추가 도움이 필요하면:
API 레퍼런스 문서를 확인하세요.
Arduino 커뮤니티 포럼