In der Vergangenheit habe ich mich mit Low-Power Sensornetzwerken befasst und hier im Blog darüber berichtet:
- Heltec HTCC-AB02A – Sieger im IoT Laufzeittest
- Solar-betriebener LoRaWAN-Sensorknoten mit Heltec CubeCell
- BLE Hub zur Abfrage mehrerer BLE Peripherals
Grundsätzlich stehen für die Kommunikation WiFi, BLE und LoRa zur Verfügung. Jede Kommunikation hat dabei spezielle Eigenschaften bezüglich Reichweite, Payload und Strombedarf.
Angeregt durch den Beitrag ESP32 – Ultra-Long Battery Life With ESP-NOW habe ich ESP-NOW in meine Betrachtungen mit einbezogen.
ESP-NOW ist ein proprietäres, von Espressif entwickeltes Protokoll, das es mehreren Geräten ermöglicht, ohne WiFi miteinander zu kommunizieren. Vor der Kommunikation ist ein Pairing zwischen den kommunizierenden Geräten erforderlich. Nach dem Pairing ist die Verbindung sicher und Peer-to-Peer, ohne dass ein Handshake erforderlich ist. Nach dem Pairing ist die Verbindung persistent, d.h. nach einem Reset oder Spannungsausfall eines Teilnehmers erfolgt eine erneute Verbindungsaufnehme automatisch.
Zur Einarbeitung empfehle ich den Beitrag Getting Started with ESP-NOW (ESP32 with Arduino IDE) von Rui Santos, da ich hier nicht auf alle Details eingehen möchte.
Die folgenden Kommunikationsmöglichkeiten bietet ESP-NOW. Zwei Controller können entweder unidirektional (One-Way) oder bidirektional (Two-Way) miteinander kommunizieren.

Die Kommunikation kann aber auch in der Form One-to-Many bzw. Many-to-One erfolgen. Die folgenden Abbildungen zeigen das jeweilige Layout des Netzwerks.


Damit eine zielgerichtete Kommunikation aufgebaut werden kann, muss der Sender die Adresse des jeweiligen Empfängers kennen. Verwendet wird hier die MAC-Adresse (Media Access Control Address) des berteffenden Controllers – eine eindeutige Hardware-Kennung, die jedes Gerät in einem Netzwerk identifiziert.
Mit dem Programm get_ESP_MAC_Address.ino kann die MAC-Adresse eines ESP32 oder ESP8266 abgefragt werden.

Ich möchte im folgenden ein Sensornetzwerk aufbauen, dessen Sensorknoten aus batterie- bzw. solarbetriebene DFRobot FireBeetle ESP32-E oder ThingPulse ePulse Low Power ESP32 Boards besteht, die die erhobenen Messwerte über ESP-NOW an ein ThingPulse ESP-Gateway senden. Der zweite ESP32 im Gateway übernimmt dann diese Daten und bereitet sie zum Versenden über MQTT auf.


Als Sensor verwende ich jeweils eine M5Stack ENV.II Unit, die einen Sensirion SHT31 und einem Bosch BMP280 Sensor beinhaltet. Es lassen sich also Temperatur, relative Luftfeuchtigkeit und barometrischer Druck erfassen. Der Sensor wird über den I2C-Bus an den ESP32 angeschlossen.
Jeder Sensorknoten erfasst über seine M5Stack ENV.II Unit die Messdaten und sendet diese über ESP-NOW an einen ESP32 (ESP1) des ESP-NOW Gateways (ESP_SensorNode.ino).
Die seriellen Ausgaben der Sensorknoten und des ESP-NOW Gateways (ESP1) sind in den folgenden Abbildungen gezeigt. Die Anzeige im ESP-NOW Gateway ist auf Werte gerundet, die der Messgenauigkeit der Sensoren entsprechen.

Die erfassten Messdaten werden dann vom ESP1 mit Hilfe des Programms ESP-NOW_Gateway.ino seriell an den ESP2 des ESP-NOW Gateways übertragen und dort in MQTT-Messages übersetzt.

Ich sende mit dem Programm ESP-NOW_Gateway_WiFi.ino die Messages an den Public MQTT Broker von HiveMQ. Die folgende Abbildung zeigt die erhobenen Temperaturmesswerte (sht31Temperature & bmp280Temperature) von zwei angeschlossenen Sensorknoten.

Die auf dem MQTT Broker abgelegten Daten können nun von einem weiteren MQTT Client abonniert (subscribed) und zur Anzeige gebracht werden.
2021-10-12/ck