
Hier zeige ich, wie man Arduino R4 Wi-Fi über MQTT mit Home Assistant verbinden kann, um Daten per MQTT-Publish zu empfangen und zu senden. Ich werde dafür die ArduinoMqttClient-Bibliothek verwenden. Der Beispielcode, den ich hier einfüge, verbindet sich zuerst mit unserem Wi-Fi-Netzwerk, dann mit unserem MQTT-Broker über Benutzername und Passwort, und schließlich abonniert er das angegebene MQTT-Topic und horcht auf Nachrichten, während er auch Daten von sich selbst veröffentlicht.
Das Thema basiert auf dem neuen Arduino R4 Wi-Fi Board:

Auf der Softwareseite habe ich ArduinoMqttClient verwendet:
https://www.arduino.cc/reference/en/libraries/arduinomqttclient/
https://github.com/arduino-libraries/ArduinoMqttClient
Die Bibliothek sollte über Libraries installiert werden:

Dann können wir den Beispielcode ausführen, den wir in Kürze gemeinsam schreiben werden.
Zunächst fügen wir die Header ein und definieren die Konstanten (Ortung von Wi-Fi- und MQTT-Server):
Code: C / C++
Als nächstes erstellen wir global Instanzen von WiFi- und MQTT-Clients:
Code: C / C++
Als Nächstes führen wir im Setup alles aus:
Code: C / C++
Der obige Code startet die serielle Schnittstelle, so dass man beobachten kann, was der Arduino im Serial Monitor tut.
Als nächstes starten wir Wi-Fi:
Code: C / C++
In der Schleife versuchen wir, uns als Client mit dem drahtlosen Netzwerk zu verbinden. Wenn die Verbindung erfolgreich ist, drucken wir unsere IP:
Code: C / C++
Dann starten wir MQTT:
Code: C / C++
Der Verbindungsversuch wird in einer Schleife durchgeführt. Die erste Verbindung wird mit einem Fehler -2 fehlschlagen. Ich habe den Code auf den ArduinoMqttClient-Beispielen und der Diskussion im Arduino-Forum basiert und es sieht so aus, als ob jeder dieses Problem hat.
Wir abonnieren dann die MQTT-Themen, die uns interessieren, und richten einen Callback ein, den die Bibliothek von MQTT aufruft, wenn sie Daten empfängt:
Code: C / C++
Ohne subscribe eines bestimmten Themas auszuführen erhalten wir keine an dieses Thema gesendeten Daten!
Die Fortsetzung erfolgt in dem erwähnten Callback. Er wird nur aufgerufen, wenn wir Daten erhalten:
Code: C / C++
In diesem Callback kann man die empfangenen Daten frei verarbeiten, das Relais schalten, etc.
Die Hauptschleife bleibt noch - dort muss man den MQTT-Client aktualisieren, ich veröffentliche dort zusätzlich die Zeit vom Arduino:
Code: C / C++
Das ist alles. Wir speichern und laden es auf Arduino hoch. Ich gehe davon aus, dass Home Assistant bereits aktiviert ist. Wir rufen das MQTT-Tool auf, Home Assistant sieht die von Arduino veröffentlichten Informationen:

Arduino sieht auch, was HA veröffentlicht:

Die Kommunikation funktioniert in beide Richtungen korrekt.
Vollständiger Code:
Spoiler:
Code: C / C++
Zusammenfassung
Der Arduino R4 WiFi ist gerade erst auf den Markt gekommen und bietet bereits fertige Mechanismen, um einfach eine Verbindung zu einem MQTT-Broker herzustellen, wie z. B. dem in Home Assistant. Das Abonnieren eines MQTT-Topics und das Veröffentlichen von Daten auf dem ausgewählten Topic funktioniert ebenfalls problemlos. Es gibt also nichts, was uns daran hindern könnte, unsere Projekte einfach mit IoT-Netzwerken zu verbinden, und ich beziehe mich dabei sogar auf unsere älteren Projekte, die vor dem R4 entstanden sind, denn die Migration vom Uno R3 zum R4 WiFi ist auch nicht so schwierig.
Seht Ihr irgendwelche potenziellen Anwendungen für MQTT auf dem R4?
Cool? DIY-Rangliste Hilfreicher Beitrag? Kauf mir einen Kaffee.