Servosteuerung für ioBroker über ESP8266 und MQTT

In diesem Artikel zeige ich Dir, wie Du einen Servo über einen ESP8266 und MQTT mittels ioBroker steuern kannst.

Für ein neues Projekt habe ich eine kleine Steuerung gesucht, über die ich in ioBroker mehrere Servos steuern kann. Ein erster Ansatz über Tasmota hat leider nicht funktioniert, da ich hier über PWM die Servos nicht ansteuern konnte. Also entschied ich mich dazu, doch einen kleinen Sketch für den ESP8266 zu entwickeln. Dabei waren folgende Anforderungen gegeben:

  • Steuerung von mehreren Servos (aktuell 3, kann aber im Sketch erweitert werden)
  • Steuerung über ioBroker

Als Kommunikationsprotokoll setze ich, wie in den meisten Projekten, auch hier auf das MQTT-Protokoll.

Hier zunächst die Liste der benötigten Produkte:

Der verwendete Servo SG90 wird mit einer Betriebsspannung von 5V betrieben. Für den Anschluss habe ich einfache Male-Male Stecker verwendet, die ich mit der Buchse und dem Breadboard verbinde. Der braune Pin wird am ESP8266 an GND angeschlossen, rot an VIN und der gelbe Pin an den digitalen Pin D2.

Im folgenden Schaubild seht ihr die genaue Verkabelung der einzelnen Servos mit dem ESP8266.

Im nächsten Schritt können wir dann mit der Implementierung des Sketch beginnen. Ich habe den Sketch als Download hier bereitgestellt:

Sketch - ioBroker Servo Steuerung (205 Downloads)


Im Sketch müssen wir zunächst die Konfiguration vervollständigen. Hierfür muss die WLAN_SSID sowie das Kennwort eingetragen werden. Zudem muss die IP-Adresse des MQTT-Brokers (in meinem Fall die IP-Adresse von ioBroker) sowie der entsprechende Port definiert werden.






Im Sketch werden nun in der setup-Funktion die entsprechenden Servo-Objekte aufgebaut und an die digitalen Anschlüsse D2 bis D4 zugeordnet. Zudem wird eine Verbindung zum WLAN-Netzwerk sowie MQTT-Broker hergestellt. Alles weitere läuft nun in der MQTT-Callback Funktion. Hier werden die entsprechenden Topics verarbeitet und somit die Servos gesteuert.

Nach dem Flashen des ESP8266 können wir in ioBroker auch schon in die Objekte wechseln. In den Objekten unterhalb des MQTT-Adapters sehen wir die Datenpunkte ServoControl\Servo1 bis Servo3. Hier können wir nun über den Datenbank Angle den Winkel des jeweiligen Servos steuern. Der Winkel geht hierbei von 0 bis 180°

Für den Test des Sketch habe ich eine kleine Visualisierung erstellt, mit dem ich ein CircleKnob Widget zur Servo-Steuerung verwendet habe. Das Widget stellt dabei denWinkelbereich von 0 bis 180° dar und lässt per Klick auch Änderungen zu. Als Datenpunkt habe ich den Angle-Datenpunkt eines Servos verwendet. Bei einer Änderung des Datenpunkts wird somit auf dem ESP8266 die Callback Funktion aufgerufen und der Servo entsprechend bewegt.

Im folgenden Bild siehst Du die verschiedenen Werte des Datenpunkts sowie die Servo-Stellung.

Ich hoffe Dir gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

9 Gedanken zu „Servosteuerung für ioBroker über ESP8266 und MQTT

  • 3. Mai 2020 um 11:25
    Permalink

    Vielen Dank für die tolle Anleitung

    Antwort
  • 14. Mai 2020 um 15:19
    Permalink

    Mein ESP verliert nach einiger Zeit die Verbindung zum WLAN. Kann man etwas am Sketch ändern um eine stabilere WLAN-Verbindung zu gewährleisten?

    Antwort
  • 1. Juni 2020 um 8:08
    Permalink

    Guten Morgen, ich habe das Script auf einen Womos D1 mini aufgespielt, Netzwerk usw. angepasst, Modul kann aber keine Verbindung zum Router aufbauen, warum ?
    Danke für Tips

    Antwort
  • 1. Oktober 2020 um 3:07
    Permalink

    Hallo Matthias

    super anleitung ,hat auch gleich funktioniert
    hätte da noch eine Frage
    wie kann man da einen 360 grad Servo Ansteuern ?

    Danke für deine Hilfe schon mal im Voraus

    Antwort
  • 8. Oktober 2020 um 13:34
    Permalink

    Hallo Matthias,

    Vielen Dank für das tolle Projekt. Bin gerade am umsetzten 🙂
    Nun hab ich doch noch eine Frage zum MQTT.
    Ich habe beim MQTT Broker ein User und ein Passwort vergeben.
    Wie kann ich dies im Sketch ergänzen?

    Danke und Gruss Thomas

    Antwort
  • 8. Oktober 2020 um 21:34
    Permalink

    Hallo Matthias,

    Danke für Dein Feedback. Auf die Schnelle hab ich das nicht hinbekommen. Versuche es nun mal ohne User & PW mit einer neuen Sonoff Instanz… Zumindest für den ersten Test.
    Bin noch relativ neu im Thema Arduino… Tasmota geht solala.

    Nun meldet die Arduino IDE immer beim überprüfen „D2 was not declared in this scope“ Denke bei D3 und D4 käme dann gleich dieselbe Medlung. Wo muss ich suchen? Danke

    Gruss Thomas

    Antwort
  • 8. Oktober 2020 um 21:52
    Permalink

    Läuft 🙂
    Musste folgende Zeile ganz nach oben verschieben:
    #include „Arduino.h“

    Gruss Thomas

    Antwort
  • 21. Oktober 2020 um 21:22
    Permalink

    Hallo Matthias,
    vielen Dank, super Anleitung!!!
    Das Ganze hat sehr gut geklappt, nur habe ich ein seltsamnes Phänomen:
    Wenn das NodeMcu länger ohne Stromversorgung war, und dann mit Strom versorgt wird, dann geht die Servosteuerung erstmal NICHT. Nach mehrmaligem Ein/Ausstecken des Boards, dann geht die Funktion plötzlich schon.
    Woran kann das liegen?

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.