Exemplo de Monitor Bluetooth com ESP32 - Tutorial de Interface de Serial Monitor em Tempo Real
Visão Geral
O exemplo Bluetooth Monitor oferece uma interface de serial monitor sem fio, acessível pelo app DIYables Bluetooth STEM. Projetado para placas ESP32, com suporte a conexões BLE (Bluetooth Low Energy) e Bluetooth Clássico. Transmita mensagens de status em tempo real para o app, receba e processe comandos de texto, exiba informações do sistema e depure seus projetos sem fio — perfeito para monitoramento sem cabos, depuração remota e telas de status do sistema.
Este exemplo oferece suporte a dois modos de Bluetooth:
ESP32 BLE (Bluetooth Low Energy): Funciona no Android e no iOS
ESP32 Bluetooth Clássico: Funciona somente no Android. O iOS não oferece suporte ao Bluetooth Clássico. Use o BLE se precisar de suporte ao iOS.
Recursos
Transmissão em Tempo Real: Envie mensagens de status contínuas para a tela do app
Processamento de Comandos: Receba e trate comandos de texto vindos do app
Monitoramento do Sistema: Exiba uptime, heap livre, informações da CPU e muito mais
Controle de LED: Comandos de LED ON/OFF integrados para testes rápidos
Atualizações Periódicas: Mensagens automáticas de heartbeat e de status em intervalos configuráveis
BLE e Bluetooth Clássico: Escolha o modo Bluetooth que melhor atende ao seu projeto
Multiplataforma: O modo BLE funciona no Android e no iOS; o Bluetooth Clássico funciona no Android
Opção de Baixo Consumo: O modo BLE consome menos energia que o Bluetooth Clássico
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Conecte a placa ESP32 ao seu computador usando um cabo USB.
Abra o Arduino IDE no seu computador.
Selecione a placa ESP32 e a porta COM apropriadas.
Acesse o ícone Libraries na barra à esquerda do Arduino IDE.
Pesquise "DIYables Bluetooth" e encontre a biblioteca DIYables Bluetooth, da DIYables
Clique no botão Install para instalar a biblioteca.
Será solicitado que você instale outras dependências da biblioteca
Clique no botão Install All para instalar todas as dependências da biblioteca.
Escolha um dos dois modos de Bluetooth abaixo, de acordo com a sua necessidade:
Código ESP32 Bluetooth Clássico (funciona com o app somente no Android)
Observação: O Bluetooth Clássico NÃO é compatível com o iOS. Se você precisa de suporte ao iOS, use o código BLE abaixo.
No Arduino IDE, vá em File Examples DIYables Bluetooth Esp32Bluetooth_Monitor, ou copie o código acima e cole no editor do Arduino IDE
/* * DIYables Bluetooth Library - ESP32 Classic Bluetooth Monitor Example * Works with DIYables Bluetooth STEM app on Android * Note: Classic Bluetooth is NOT supported on iOS. Use BLE examples for iOS support. * * This example demonstrates the Bluetooth Monitor feature: * - Send real-time status messages to the mobile app * - Display system information and sensor readings * - Receive and process commands from the app * - Perfect for debugging and system monitoring * * Compatible Boards: * - ESP32 (all variants with Classic Bluetooth) * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status * 3. Use DIYables Bluetooth App to connect and view monitor output * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */#include <DIYables_BluetoothServer.h>#include <DIYables_BluetoothMonitor.h>#include <platforms/DIYables_Esp32Bluetooth.h>// Create Bluetooth instancesDIYables_Esp32Bluetooth bluetooth("ESP32_Monitor");DIYables_BluetoothServer bluetoothServer(bluetooth);// Create Monitor app instanceDIYables_BluetoothMonitor bluetoothMonitor;// Variables for demounsignedlong lastUpdate = 0;constunsignedlong UPDATE_INTERVAL = 3000; // Send update every 3 secondsint messageCount = 0;bool ledState = false;// ESP32 built-in LED (may vary by board)constint LED_PIN = 2;voidsetup() {Serial.begin(115200);delay(1000);Serial.println("DIYables Bluetooth - ESP32 Monitor Example");// Initialize LEDpinMode(LED_PIN, OUTPUT);digitalWrite(LED_PIN, LOW);// Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin();// Add monitor app to server bluetoothServer.addApp(&bluetoothMonitor);// Set up connection event callbacks bluetoothServer.setOnConnected([]() {Serial.println("Bluetooth connected!"); bluetoothMonitor.send("=== ESP32 Monitor Connected ==="); bluetoothMonitor.send("System Ready"); bluetoothMonitor.send("Type HELP for available commands"); bluetoothMonitor.send(""); }); bluetoothServer.setOnDisconnected([]() {Serial.println("Bluetooth disconnected!"); });// Set up message handler for incoming commands bluetoothMonitor.onMonitorMessage([](const String& message) {Serial.print("Received command: ");Serial.println(message); handleCommand(message); });Serial.println("Waiting for Bluetooth connection...");}void handleCommand(const String& cmd) {if (cmd == "HELP") { bluetoothMonitor.send("Available Commands:"); bluetoothMonitor.send(" LED_ON - Turn LED on"); bluetoothMonitor.send(" LED_OFF - Turn LED off"); bluetoothMonitor.send(" STATUS - Show system status"); bluetoothMonitor.send(" HEAP - Show memory info"); bluetoothMonitor.send(" CLEAR - Clear monitor (if supported)"); bluetoothMonitor.send(" HELP - Show this help"); }elseif (cmd == "LED_ON") {digitalWrite(LED_PIN, HIGH); ledState = true; bluetoothMonitor.send("✓ LED turned ON"); }elseif (cmd == "LED_OFF") {digitalWrite(LED_PIN, LOW); ledState = false; bluetoothMonitor.send("✓ LED turned OFF"); }elseif (cmd == "STATUS") { showStatus(); }elseif (cmd == "HEAP") { bluetoothMonitor.send("=== Memory Info ==="); bluetoothMonitor.send("Free Heap: " + String(ESP.getFreeHeap()) + " bytes"); bluetoothMonitor.send("Min Free Heap: " + String(ESP.getMinFreeHeap()) + " bytes"); bluetoothMonitor.send("Heap Size: " + String(ESP.getHeapSize()) + " bytes"); bluetoothMonitor.send("==================="); }elseif (cmd == "CLEAR") { bluetoothMonitor.send(""); }else { bluetoothMonitor.send("✗ Unknown command: " + cmd); bluetoothMonitor.send("Type HELP for available commands"); }}void showStatus() { bluetoothMonitor.send("=== System Status ===");// LED Status bluetoothMonitor.send("LED State: " + String(ledState ? "ON" : "OFF"));// Uptimeunsignedlong uptime = millis() / 1000; bluetoothMonitor.send("Uptime: " + String(uptime / 3600) + "h " + String((uptime % 3600) / 60) + "m " + String(uptime % 60) + "s");// ESP32-specific info bluetoothMonitor.send("Free Heap: " + String(ESP.getFreeHeap()) + " bytes"); bluetoothMonitor.send("CPU Freq: " + String(ESP.getCpuFreqMHz()) + " MHz"); bluetoothMonitor.send("Chip Model: " + String(ESP.getChipModel()));// Messages sent bluetoothMonitor.send("Messages Sent: " + String(messageCount)); bluetoothMonitor.send("====================");}void sendPeriodicUpdate() { messageCount++;// Example of different message typesif (messageCount % 3 == 0) { bluetoothMonitor.send("[INFO] Heartbeat #" + String(messageCount)); } elseif (messageCount % 5 == 0) { bluetoothMonitor.send("[HEAP] Free: " + String(ESP.getFreeHeap()) + " bytes"); }else { bluetoothMonitor.send("[TIME] Uptime: " + String(millis() / 1000) + "s"); }Serial.print("Sent update #");Serial.println(messageCount);}voidloop() {// Handle Bluetooth server communications bluetoothServer.loop();// Send periodic updates (only when connected)if (bluetooth.isConnected() && millis() - lastUpdate >= UPDATE_INTERVAL) { lastUpdate = millis(); sendPeriodicUpdate(); }delay(10);}
Clique no botão Upload do Arduino IDE para carregar o código no ESP32
Abra o Serial Monitor
Confira o resultado no Serial Monitor. Ele deve ficar como abaixo:
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
DIYables Bluetooth - ESP32 Monitor Example
Waiting for Bluetooth connection...
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Código ESP32 BLE (funciona com o app no Android e no iOS)
No Arduino IDE, vá em File Examples DIYables Bluetooth Esp32BLE_Monitor, ou copie o código acima e cole no editor do Arduino IDE
/* * DIYables Bluetooth Library - ESP32 BLE Monitor Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Monitor feature: * - Send real-time status messages to the mobile app * - Display system information and sensor readings * - Receive and process commands from the app * - Perfect for debugging and system monitoring * * Compatible Boards: * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * - ESP32-S3 * - ESP32-C3 * - Any ESP32 board supporting BLE * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status * 3. Use DIYables Bluetooth App to connect and view monitor output * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */#include <DIYables_BluetoothServer.h>#include <DIYables_BluetoothMonitor.h>#include <platforms/DIYables_Esp32BLE.h>// BLE Configurationconst char* DEVICE_NAME = "ESP32BLE_Monitor";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";// Create Bluetooth instancesDIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID);DIYables_BluetoothServer bluetoothServer(bluetooth);// Create Monitor app instanceDIYables_BluetoothMonitor bluetoothMonitor;// Variables for demounsignedlong lastUpdate = 0;constunsignedlong UPDATE_INTERVAL = 3000;int messageCount = 0;bool ledState = false;voidsetup() {Serial.begin(115200);delay(1000);Serial.println("DIYables Bluetooth - ESP32 BLE Monitor Example");// Initialize built-in LEDpinMode(2, OUTPUT); // ESP32 built-in LED is usually on GPIO 2digitalWrite(2, LOW);// Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin();// Add monitor app to server bluetoothServer.addApp(&bluetoothMonitor);// Set up connection event callbacks bluetoothServer.setOnConnected([]() {Serial.println("Bluetooth connected!"); bluetoothMonitor.send("=== ESP32 BLE Monitor Connected ==="); bluetoothMonitor.send("System Ready"); bluetoothMonitor.send("Type HELP for available commands"); bluetoothMonitor.send(""); }); bluetoothServer.setOnDisconnected([]() {Serial.println("Bluetooth disconnected!"); });// Set up message handler for incoming commands bluetoothMonitor.onMonitorMessage([](const String& message) {Serial.print("Received command: ");Serial.println(message); handleCommand(message); });Serial.println("Waiting for Bluetooth connection...");}void handleCommand(const String& cmd) {if (cmd == "HELP") { bluetoothMonitor.send("Available Commands:"); bluetoothMonitor.send(" LED_ON - Turn LED on"); bluetoothMonitor.send(" LED_OFF - Turn LED off"); bluetoothMonitor.send(" STATUS - Show system status"); bluetoothMonitor.send(" HEAP - Show free heap memory"); bluetoothMonitor.send(" HELP - Show this help"); }elseif (cmd == "LED_ON") {digitalWrite(2, HIGH); ledState = true; bluetoothMonitor.send("LED turned ON"); }elseif (cmd == "LED_OFF") {digitalWrite(2, LOW); ledState = false; bluetoothMonitor.send("LED turned OFF"); }elseif (cmd == "STATUS") { showStatus(); }elseif (cmd == "HEAP") { bluetoothMonitor.send("Free heap: " + String(ESP.getFreeHeap()) + " bytes"); }else { bluetoothMonitor.send("Unknown command: " + cmd); bluetoothMonitor.send("Type HELP for available commands"); }}void showStatus() { bluetoothMonitor.send("=== System Status ==="); bluetoothMonitor.send("LED State: " + String(ledState ? "ON" : "OFF"));unsignedlong uptime = millis() / 1000; bluetoothMonitor.send("Uptime: " + String(uptime / 3600) + "h " + String((uptime % 3600) / 60) + "m " + String(uptime % 60) + "s"); bluetoothMonitor.send("Free Heap: " + String(ESP.getFreeHeap()) + " bytes"); bluetoothMonitor.send("Messages Sent: " + String(messageCount)); bluetoothMonitor.send("====================");}void sendPeriodicUpdate() { messageCount++;if (messageCount % 3 == 0) { bluetoothMonitor.send("[INFO] Heartbeat #" + String(messageCount)); } elseif (messageCount % 5 == 0) { bluetoothMonitor.send("[HEAP] Free: " + String(ESP.getFreeHeap()) + " bytes"); }else { bluetoothMonitor.send("[TIME] Uptime: " + String(millis() / 1000) + "s"); }Serial.print("Sent update #");Serial.println(messageCount);}voidloop() { bluetoothServer.loop();if (bluetooth.isConnected() && millis() - lastUpdate >= UPDATE_INTERVAL) { lastUpdate = millis(); sendPeriodicUpdate(); }delay(10);}
Clique no botão Upload do Arduino IDE para carregar o código no ESP32
Abra o Serial Monitor
Confira o resultado no Serial Monitor. Ele deve ficar como abaixo:
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
DIYables Bluetooth - ESP32 BLE Monitor Example
Waiting for Bluetooth connection...
Ln 11, Col 1
ESP32 Dev Module on COM15
2
App para Celular
Instale o app DIYables Bluetooth no seu smartphone: Android | iOS
Se você estiver usando o código ESP32 Bluetooth Clássico, é preciso parear o ESP32 com o seu celular Android antes de abrir o app:
Vá em Configurações > Bluetooth do seu celular
Verifique se o Bluetooth está ligado
Seu celular vai procurar os dispositivos disponíveis
Encontre e toque em "ESP32_Monitor" na lista de dispositivos disponíveis
Confirme a solicitação de pareamento (não é necessário PIN)
Aguarde até aparecer "Paired" abaixo do nome do dispositivo
Se você estiver usando o código ESP32 BLE, não é necessário parear. Basta ir para o próximo passo.
Abra o app DIYables Bluetooth
Ao abrir o app pela primeira vez, ele vai pedir permissões. Conceda as seguintes:
Permissão de Dispositivos Próximos (Android 12+) / permissão de Bluetooth (iOS) - necessária para procurar e conectar a dispositivos Bluetooth
Permissão de Localização (somente Android 11 e anteriores) - exigida por versões mais antigas do Android para procurar dispositivos BLE
Verifique se o Bluetooth está ligado no seu celular
Na tela inicial, toque no botão Connect. O app vai procurar dispositivos BLE e Bluetooth Clássico.
Encontre e toque no seu dispositivo nos resultados da busca para conectar:
Para Bluetooth Clássico: toque em "ESP32_Monitor"
Para BLE: toque em "ESP32BLE_Monitor"
Depois de conectado, o app volta automaticamente para a tela inicial. Selecione o app Monitor no menu de apps.
Observação: Você pode tocar no ícone de configurações na tela inicial para ocultar/mostrar apps. Para mais detalhes, consulte o Manual do Usuário do DIYables Bluetooth App.
Você verá mensagens de status sendo transmitidas na tela do monitor
Digite LED_ON no campo de entrada e toque em Send — o LED integrado do ESP32 vai acender, e o monitor exibirá uma mensagem de confirmação
Agora olhe de volta para o Serial Monitor no Arduino IDE. Você verá:
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Bluetooth connected!
Sent update #1
Sent update #2
Received command: HELP
Received command: STATUS
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Digite comandos no app (HELP, STATUS, LED_ON, LED_OFF, HEAP) e observe as respostas
Personalização Criativa - Adapte o Código ao Seu Projeto
Enviar Mensagens para o App
Use o método send() para transmitir mensagens de texto para a tela do monitor:
Você pode adicionar quantos comandos personalizados precisar, adicionando mais blocos elseif. Por exemplo, adicione RELAY_ON / RELAY_OFF para controlar um relé, ou READ para disparar a leitura de um sensor — qualquer palavra que você digitar no app se torna um comando.
Tratar Eventos de Conexão
Você pode detectar quando o app se conecta ou se desconecta do ESP32:
bluetoothServer.setOnConnected([]() {Serial.println("Bluetooth connected!"); bluetoothMonitor.send("=== ESP32 Monitor Connected ==="); bluetoothMonitor.send("System Ready"); bluetoothMonitor.send("Type HELP for available commands");});bluetoothServer.setOnDisconnected([]() {Serial.println("Bluetooth disconnected!");});if (bluetoothServer.isConnected()) { bluetoothMonitor.send("Status update");}
Como Usar o Monitor
Controles da Interface do App
A interface do monitor no app DIYables Bluetooth oferece:
Exibição de Mensagens: Lista rolável de mensagens recebidas com rolagem automática
Entrada de Texto: Digite comandos na parte inferior
Botão Send: Toque para enviar o comando digitado ao ESP32
Comandos Integrados
O código de exemplo inclui estes comandos integrados:
HELP ? Mostra todos os comandos disponíveis
LED_ON ? Acende o LED integrado
LED_OFF ? Apaga o LED integrado
STATUS ? Mostra o status do sistema (estado do LED, uptime, heap, mensagens enviadas)
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!