ESP-NOW Home Automation ESP8266 Raspberry Pi MQTT - Gunook
ESP-NOW Home Automation ESP8266 Raspberry Pi MQTT - Gunook
Anonim
ESP-NOW Home Automation ESP8266 Raspberry Pi MQTT
ESP-NOW Home Automation ESP8266 Raspberry Pi MQTT

In diesem Instructable zeige ich Ihnen, wie ich ESP-NOW in meiner Hausautomation verwendet habe. Im Schaltplan sehen Sie die Kommunikationsflüsse

Ich zeige Ihnen:

  • So funktioniert der Absender
  • wie funktioniert der empfänger
  • So funktioniert die serielle Kommunikation mit einem Raspberry Pi

Wie MQTT und meine Hausautomation funktionieren, zeige ich nicht, dafür findest du andere gute Anleitungen.

Credits: Dieses Instructable wurde inspiriert von:

Video #172 von Andreas Spiess

www.esploradores.com/practica-6-conexion-es…

Schritt 1: Backup über WLAN und MQTT

Backup über WLAN und MQTT
Backup über WLAN und MQTT

Ich habe herausgefunden, dass ESP-NOW extrem schnell und ziemlich zuverlässig ist, aber manchmal fehlschlägt. In meinem Programm habe ich ein Backup über normale WLAN- und MQTT-Verbindung hinzugefügt.

Schritt 2: Die Fernbedienung/der Sender

Die Fernbedienung/der Sender
Die Fernbedienung/der Sender
Die Fernbedienung/der Sender
Die Fernbedienung/der Sender
Die Fernbedienung/der Sender
Die Fernbedienung/der Sender
Die Fernbedienung/der Sender
Die Fernbedienung/der Sender

Im ersten Schema sehen Sie, wie das Programm des Absenders funktioniert:

  1. Der esp8266 startet beim Einschalten oder beim Zurücksetzen
  2. ESP-NOW ist initialisiert
  3. Das Modul sendet ESP-NOW für eine definierte Zeit
  4. Das Modul prüft in einer Rückruffunktion, ob die ESP-NOW-Nachricht vom Empfänger empfangen wurde.

    1. Wenn die ESP-NOW-Nachricht empfangen wurde, geht das Modul in einen Tiefschlaf mit niedriger Leistung
    2. Wurde die ESP-NOW-Nachricht nicht empfangen, startet das Modul eine WiFi-Verbindung und eine MQTT-Verbindung als Backup-Verbindung.

Das Programm für den Absender befindet sich in meinem Github (Master_sender.ino). Das Programm sendet sowohl das Thema als auch die Nachricht für die MQTT-Hausautomation in einer kombinierten ESP-NOW-Nachricht, kombiniert mit einem '&'-Zeichen für eine einfache Aufteilung beim Empfänger.

Ich habe zwei verschiedene Fernbedienungen / Sender gemacht:

Sender 1: Der esp8266 befindet sich im Tiefschlaf und wird durch einen Reset aktiviert. Die LED in der Taste leuchtet und dimmt, wenn das Modul fertig ist. Wenn die Batteriespannung zu niedrig ist, blinkt die LED. Wenn ESP-NOW fehlgeschlagen ist, blinkt die LED, bevor zu WiFi/MQTT-Verbindungen gewechselt wird. Der esp8266 wird von einem LiPo-Akku mit einem HT7333-Spannungsregler auf 3.3V. gespeist

Sender 2: Der esp8266 wird ausgeschaltet und durch Drücken der Taste eingeschaltet. Normalerweise wird die ESP-NOW-Verbindung nach dem „Klicken“der Schaltfläche hergestellt. Der esp8266 wird direkt von einem LiPo-Akku gespeist. Ich weiß nicht, ob der esp8266 durch die hohe Spannung eines voll geladenen Akkus (bis zu 4,2 V) beschädigt wird, wenn er nur wenige 100 ms eingeschaltet wird. Es ist höher als die Spezifikationen (3,0 - 3,6 V).

Hinweis: Wenn die Batterieladung niedrig ist, schlägt ESP-NOW fehl.

Schritt 3: Der Empfänger - Hardware (esp8266 und Raspberry Pi)

Der Empfänger - Hardware (esp8266 und Raspberry Pi)
Der Empfänger - Hardware (esp8266 und Raspberry Pi)
Der Empfänger - Hardware (esp8266 und Raspberry Pi)
Der Empfänger - Hardware (esp8266 und Raspberry Pi)
Der Empfänger - Hardware (esp8266 und Raspberry Pi)
Der Empfänger - Hardware (esp8266 und Raspberry Pi)

Die Beschreibung des Empfängers gliedert sich in zwei Teile:

  1. Hardware
  2. Software

Die Hardware

Der empfangende esp-01 ist mit meinem Raspberry Pi Zero verbunden, auf dem mein Hausautomationssystem (Openhab2) und Node Red laufen.

Im Schaltplan sind die einfachen Verbindungen dargestellt:

  • RX des esp-01 zu TX des RasPi
  • TX des esp-01 zum RX des RasPi
  • GND zu GND
  • Der esp-01 VCC wird vom 3.3V Pin des Raspi. gespeist
  • Beim esp-01 werden sowohl RST als auch CH_PD hochgezogen.

Ich habe einen Schnittstellenanschluss gemacht, um ihn einfach zu montieren

In einem Bild sehen Sie meine Kabelverbindungen zu meinem Raspberry Pi 3 (der die gleiche Pinbelegung hat, aber ich habe einen anderen 3,3-V-Pin verwendet, um eine Verbindung zu CH_PD herzustellen).

Das esp-01 wurde wie in meinem anderen Instructable gezeigt programmiert (siehe Schritt 3).

Schritt 4: Der Empfänger - Software (Seriell, Node Red, MQTT)

Der Empfänger - Software (Seriell, Node Red, MQTT)
Der Empfänger - Software (Seriell, Node Red, MQTT)
Der Empfänger - Software (Seriell, Node Red, MQTT)
Der Empfänger - Software (Seriell, Node Red, MQTT)
Der Empfänger - Software (Seriell, Node Red, MQTT)
Der Empfänger - Software (Seriell, Node Red, MQTT)

Programm auf esp8266

Das Programm für den esp-01-Empfänger befindet sich in meinem Github (Master_sender.ino). Das Programm ist wirklich einfach, es druckt nur die empfangene ESP-NOW-Nachricht über die serielle Schnittstelle zum Raspberry Pi.

Serielle Schnittstelle

Auf dem Raspberry Pi müssen Sie für die normale serielle Kommunikation den Serial Port aktivieren (auf Raspbian 'sudo raspi-config' ausführen).

Der Name der seriellen Schnittstelle lautet:

  • Raspberry Pi Zero: /dev/ttyAMA0
  • Raspberry Pi 3: /dev/ttyS0

Sie können den seriellen Port überprüfen, indem Sie 'dmesg |. ausführen grep tty' oder 'ls /dev'

Knoten Rot

Wählen Sie in Node Red den seriellen Eingangsknoten aus und richten Sie den seriellen Port ein (siehe die beigefügten Bilder). Beachten Sie die Baudrate der seriellen Verbindung, diese muss mit der im esp8266 programmierten Baudrate übereinstimmen.

Die Ausgabe des seriellen Knotens wird von einem Funktionsknoten transformiert, der die Nachricht am '&'-Zeichen aufteilt und die msg.topic und die msg.payload setzt. Die Ausgabe der Funktion wird in den mqtt-Ausgabeknoten geleitet, der die Nachricht an den MQTT-Server sendet. Beachten Sie, dass das Themenfeld des mqtt-Knotens leer ist, da das Thema in der Nachricht festgelegt ist.