m5paper_bluetooth_beacon.ino
Transforme le M5Paper en serveur BLE pour interagir avec des smartphones ou autres appareils IoT.
Utilise la stack BLE native de l'ESP32. Définissez SERVICE_UUID et CHARACTERISTIC_UUID avec des UUID uniques. L'écran met à jour l'état de connexion. Le mode BLE est énergivore ; combinez avec le sommeil profond si l'attente est longue. Testez avec une app comme 'nRF Connect'.
m5paper_bluetooth_beacon.ino
#include <M5EPD.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
BLEServer *pServer = NULL;
BLECharacteristic *pCharacteristic = NULL;
bool deviceConnected = false;
M5EPD_Canvas canvas(&M5.EPD);
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
deviceConnected = true;
canvas.clear();
canvas.setCursor(10, 10);
canvas.print("Client Connected!");
canvas.pushCanvas(0, 0, UPDATE_MODE_GC16);
}
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
canvas.clear();
canvas.setCursor(10, 10);
canvas.print("Waiting for Client...");
canvas.pushCanvas(0, 0, UPDATE_MODE_GC16);
BLEDevice::startAdvertising();
}
};
void setup() {
M5.begin();
M5.EPD.SetRotation(90);
canvas.createCanvas(540, 960);
canvas.setTextSize(3);
BLEDevice::init("M5Paper_Beacon");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(SERVICE_UUID);
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setValue("Hello World");
pService->start();
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->start();
canvas.setCursor(10, 10);
canvas.print("BLE Ready");
canvas.pushCanvas(0, 0, UPDATE_MODE_GC16);
}
void loop() {
delay(100);
}