m5paper_bluetooth_beacon.ino

Kit de développement IoT M5Paper avec écran e-Ink tactile 4,7 pouces · Fichier : m5paper_bluetooth_beacon.ino · Langage : C++ (Arduino) · Usage : Diffuser un signal Bluetooth Low Energy (BLE) pour détecter la présence d'appareils proches.

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);
}

← Retour à la fiche