ble-capteur.ino
BLE del S3 con ArduinoBLE: la placa anuncia un servicio 181A con una característica de medida que cualquier móvil puede leer o escuchar (notify). El nivel analógico se empuja cada segundo al central conectado, sin sondeo en la app.
Hardware
Un Arduino Nano ESP32 (ESP32-S3 de doble núcleo, Wi-Fi 2,4 GHz + Bluetooth Low Energy, formato físico compatible con el Nano, USB nativo, pines de 3,3 V únicamente). Nano ESP32, móvil con nRF Connect (u otro escáner BLE), sensor en A0.
Cableado
Nada que cablear para probar con un pin flotante; sensor 0-3,3 V en A0 en uso real.
Funcionamiento
BLE.advertise difunde nombre y servicio; central.connected() mantiene la sesión. writeValue sobre una característica BLENotify envía una notificación ATT al móvil.
Ejecución
Instala el paquete Arduino ESP32 Boards (o sigue la guía oficial del Nano ESP32), selecciona Arduino Nano ESP32 y carga. Los pines son de 3,3 V: nunca envíes 5 V a una entrada. El monitor serie usa el USB nativo.
Variantes
Añade pairing/bonding para cifrar el enlace, o emula el perfil estándar Battery (0x180F) para ser visible de los SO sin app dedicada.
ble-capteur.ino
// Service BLE personnalise sur le Nano ESP32 (ArduinoBLE).
// Une caracteristique "mesure" notifie le niveau analogique.
#include <ArduinoBLE.h>
BLEService service("181A"); // service capteur environnemental
BLEUnsignedCharCharacteristic mesure("2A6E", BLERead | BLENotify);
void setup() {
Serial.begin(115200);
if (!BLE.begin()) {
Serial.println(F("BLE KO"));
while (true);
}
BLE.setLocalName("NanoESP32-Capteur");
BLE.setAdvertisedService(service);
service.addCharacteristic(mesure);
BLE.addService(service);
mesure.writeValue(0);
BLE.advertise();
Serial.println(F("BLE pret, en attente de connexion"));
}
void loop() {
BLEDevice central = BLE.central();
if (central) {
Serial.print(F("Connecte : "));
Serial.println(central.address());
while (central.connected()) {
int brut = analogRead(A0);
uint8_t niveau = map(brut, 0, 4095, 0, 255); // ADC 12 bits
mesure.writeValue(niveau); // BLENotify : pousse vers le central
delay(1000);
}
Serial.println(F("Central deconnecte"));
}
}