Exemplo de Gauge Analógico Bluetooth com Arduino Nano ESP32 - Tutorial de Display de Gauge via BLE

Visão Geral

Este exemplo demonstra um display de gauge no estilo analógico no Arduino Nano ESP32 usando BLE (Bluetooth Low Energy) por meio do app DIYables Bluetooth STEM. Exiba qualquer valor em um gauge no estilo de mostrador, com faixa e unidade configuráveis, no seu celular. Adequado para velocímetros, manômetros, displays de RPM e aplicações semelhantes.

Nota: O Arduino Nano ESP32 suporta somente BLE — o Bluetooth Clássico não é suportado. O DIYables Bluetooth App funciona no Android e no iOS com BLE.

Exemplo de Gauge Analógico Bluetooth com Arduino Nano ESP32 - Tutorial de Display de Gauge via BLE

Recursos

  • Display de gauge analógico: Gauge no estilo de mostrador no seu celular
  • Faixa configurável: Defina os valores mínimo e máximo
  • Unidade personalizada: Exiba km/h, RPM, PSI ou qualquer unidade personalizada
  • Atualizações rápidas: Até 5 atualizações por segundo (intervalo de 200 ms)
  • Solicitação sob demanda: O app pode solicitar o valor atual a qualquer momento
  • Suporte a Android e iOS: O BLE é compatível com as duas plataformas
  • Sem pareamento: O BLE conecta sem pareamento manual

Hardware Necessário

1×Arduino Nano ESP32
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
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.

Código Arduino Nano ESP32

Passos Rápidos

  • Novo no Arduino Nano ESP32? Comece pelo guia de primeiros passos do Arduino Nano ESP32.
  • Conecte o Arduino Nano ESP32 ao seu computador via USB.
  • Abra o Arduino IDE.
  • Selecione a placa Arduino Nano ESP32 e a porta COM correta.
  • Clique no ícone Libraries na barra lateral esquerda.
  • Pesquise por "DIYables Bluetooth" e selecione a biblioteca DIYables Bluetooth da DIYables.
  • Clique em Install.
Biblioteca DIYables Bluetooth para Arduino Nano ESP32
  • Quando for solicitado a instalar as dependências, clique em Install All.
Dependência do DIYables Bluetooth para Arduino Nano ESP32

Código BLE

  • No Arduino IDE, abra File Examples DIYables Bluetooth ArduinoBLE_AnalogGauge, ou cole o código no editor.
/* * DIYables Bluetooth Library - ESP32 BLE Analog Gauge Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Analog Gauge feature: * - Display values on an analog meter/gauge * - Configurable range and unit * - Perfect for sensor monitoring (speed, pressure, voltage, etc.) * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothAnalogGauge.h> #include <platforms/DIYables_Esp32BLE.h> // BLE Configuration const char* DEVICE_NAME = "ESP32BLE_Gauge"; 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 instances DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Analog Gauge app instance (min=0, max=100, unit="km/h") DIYables_BluetoothAnalogGauge bluetoothGauge(0.0, 100.0, "km/h"); // Variables for gauge value float currentValue = 0.0; unsigned long lastUpdate = 0; const unsigned long UPDATE_INTERVAL = 200; // Update every 200ms // Optional: Analog input pin for sensor const int ANALOG_PIN = A0; // ESP32 ADC pin // Function to read sensor value float readSensorValue() { // TODO: Replace with actual sensor reading // Option 1: Read from analog pin and map to gauge range // int rawValue = analogRead(ANALOG_PIN); // return map(rawValue, 0, 4095, 0, 100); // ESP32 has 12-bit ADC // Option 2: Simulated data (sine wave) static float phase = 0; phase += 0.05; if (phase > 2 * PI) phase = 0; return 50 + 50 * sin(phase); // Oscillates between 0-100 } void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 BLE Analog Gauge Example"); // Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin(); // Add gauge app to server bluetoothServer.addApp(&bluetoothGauge); // Set up connection event callbacks bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); currentValue = readSensorValue(); bluetoothGauge.send(currentValue); Serial.print("Initial value sent: "); Serial.print(currentValue); Serial.print(" "); Serial.println(bluetoothGauge.getUnit()); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); bluetoothGauge.onValueRequest([]() { currentValue = readSensorValue(); bluetoothGauge.send(currentValue); Serial.print("Value requested - Sent: "); Serial.print(currentValue); Serial.print(" "); Serial.println(bluetoothGauge.getUnit()); }); Serial.println("Waiting for Bluetooth connection..."); Serial.print("Gauge range: "); Serial.print(bluetoothGauge.getMin()); Serial.print(" - "); Serial.print(bluetoothGauge.getMax()); Serial.print(" "); Serial.println(bluetoothGauge.getUnit()); } void loop() { bluetoothServer.loop(); if (bluetooth.isConnected() && millis() - lastUpdate >= UPDATE_INTERVAL) { lastUpdate = millis(); currentValue = readSensorValue(); bluetoothGauge.send(currentValue); Serial.print("Gauge: "); Serial.print(currentValue, 1); Serial.print(" "); Serial.println(bluetoothGauge.getUnit()); } delay(10); }
  • Clique em Upload para gravar o sketch na placa.
  • Abra o Serial Monitor.
  • A saída do Serial Monitor deve ficar assim:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
DIYables Bluetooth - Analog Gauge Example Waiting for Bluetooth connection...
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Aplicativo Móvel

  • Instale o DIYables Bluetooth App no seu celular: Android | iOS

Nota: O DIYables Bluetooth App funciona no Android e no iOS com BLE. Nenhum pareamento manual é necessário.

  • Abra o DIYables Bluetooth App.
  • Na primeira abertura, conceda as seguintes permissões:
    • Dispositivos próximos (Android 12+) / Bluetooth (iOS) — necessário para procurar e conectar a dispositivos Bluetooth
    • Localização (somente Android 11 e anteriores) — exigido por versões mais antigas do Android para procurar BLE
  • Verifique se o Bluetooth está ativado no seu dispositivo.
  • Toque em Connect na tela inicial. O app vai procurar dispositivos BLE.
DIYables Bluetooth App - Tela Inicial com o Botão de Busca
  • Toque em "Arduino_Gauge" nos resultados da busca.
  • Depois de conectar, volte à tela inicial e abra o app Analog Gauge.
DIYables Bluetooth App - Tela Inicial com o App Analog Gauge

Toque no ícone de configurações na tela inicial para mostrar ou ocultar apps. Veja o Manual do Usuário do DIYables Bluetooth App para mais detalhes.

  • O gauge analógico exibe os valores com um movimento suave do ponteiro, simulando um velocímetro.
DIYables Bluetooth App - Tela do Analog Gauge

Agora volte ao Serial Monitor no Arduino IDE. Você verá:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Bluetooth connected! Gauge value: 50.00 km/h Gauge value: 59.76 km/h Gauge value: 68.78 km/h
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Personalização Criativa - Adapte o Código ao Seu Projeto

Configurar a Faixa e a Unidade do Gauge

// Speedometer: 0-200 km/h DIYables_BluetoothAnalogGauge bluetoothGauge(bluetoothServer, 0.0, 200.0, "km/h"); // Pressure gauge: 0-100 PSI DIYables_BluetoothAnalogGauge bluetoothGauge(bluetoothServer, 0.0, 100.0, "PSI"); // RPM gauge: 0-8000 RPM DIYables_BluetoothAnalogGauge bluetoothGauge(bluetoothServer, 0.0, 8000.0, "RPM"); // Percentage: 0-100% DIYables_BluetoothAnalogGauge bluetoothGauge(bluetoothServer, 0.0, 100.0, "%");

Enviar Valores ao Gauge

// Send a value to the gauge bluetoothGauge.send(75.5); // Read from sensor and send float sensorValue = analogRead(A0) * (100.0 / 1023.0); bluetoothGauge.send(sensorValue);

Tratar Solicitações de Valor

bluetoothGauge.onValueRequest([]() { float value = readSensor(); bluetoothGauge.send(value); Serial.print("Requested: "); Serial.println(value); });

Exemplos de Programação

Gauge com Potenciômetro

DIYables_BluetoothAnalogGauge bluetoothGauge(bluetoothServer, 0.0, 100.0, "%"); void loop() { bluetoothServer.loop(); static unsigned long lastTime = 0; if (millis() - lastTime >= 200) { lastTime = millis(); float percent = analogRead(A0) * (100.0 / 1023.0); bluetoothGauge.send(percent); } }

Monitor de Nível de Bateria

DIYables_BluetoothAnalogGauge bluetoothGauge(bluetoothServer, 0.0, 100.0, "%"); float readBatteryLevel() { float voltage = analogRead(A0) * (5.0 / 1023.0) * 2; // voltage divider float percent = map(voltage * 100, 300, 420, 0, 100); return constrain(percent, 0, 100); } void loop() { bluetoothServer.loop(); static unsigned long lastTime = 0; if (millis() - lastTime >= 1000) { lastTime = millis(); bluetoothGauge.send(readBatteryLevel()); } }

Solução de Problemas

Problemas Comuns

1. O dispositivo não aparece no app

  • Confirme que a placa está ligada e que o sketch foi carregado
  • Verifique se o Bluetooth está ativado no seu celular
  • No Android 11 e anteriores, ative também os serviços de localização

2. O gauge não atualiza

  • Verifique se send() é chamado dentro do loop
  • Confira o tempo do intervalo de atualização
  • Confirme que bluetoothServer.loop() é chamado a cada iteração

3. O gauge exibe uma faixa incorreta

  • Revise os valores mín/máx no construtor
  • Confirme que a string da unidade está correta
  • Valores fora da faixa configurada serão limitados

4. O ponteiro pula de forma irregular

  • Aplique suavização ou média nas leituras do sensor
  • Reduza a frequência de atualização, se necessário
  • Verifique se há ruído nas entradas analógicas

5. O upload falha ou a placa não é reconhecida

  • Instale o pacote de placa Arduino Nano ESP32 mais recente pelo Board Manager
  • Tente outro cabo USB ou outra porta

Ideias de Projeto

  • Velocímetro para carrinho RC
  • Manômetro para sistemas pneumáticos
  • Indicador de nível de bateria
  • Gauge de RPM para motores
  • Medidor de intensidade de sinal

Próximos Passos

Depois de concluir o exemplo de Gauge Analógico Bluetooth, explore:

  1. Bluetooth Temperature — Display de gauge específico para temperatura
  2. Bluetooth Plotter — Visualize dados ao longo do tempo
  3. Bluetooth Slider — Envie valores de volta ao Arduino
  4. Multiple Bluetooth Apps — Combine o gauge com outros widgets de app

Suporte

Para ajuda adicional:

  • Consulte a documentação de Referência da API
  • Fóruns da comunidade Arduino

※ NOSSAS MENSAGENS

  • 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!