m5paper_bluetooth_beacon.ino

Kit de desarrollo IoT M5Paper con pantalla táctil e-Ink de 4,7 pulgadas · Archivo : m5paper_bluetooth_beacon.ino · Lenguaje : C++ (Arduino) · Uso : Diffuser un signal Bluetooth Low Energy (BLE) pour détecter la présence d'appareils proches.

Transforma el M5Paper en un servidor BLE para interactuar con teléfonos inteligentes u otros dispositivos IoT.

Utiliza la pila BLE nativa de ESP32. Defina SERVICE_UUID y CHARACTERISTIC_UUID con UUID únicos. La pantalla actualiza el estado de conexión. El modo BLE consume mucha energía; combine con sueño profundo si la espera es larga. Pruebe con una aplicación como '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);
}

← Volver a la ficha