ESP32 Tutorial 30/55 - Servosteuerung über das Web mit MQTT unter Verwendung des Adafruit IO Services | SunFounders ESP32 IoT Lernkit
In diesem Tutorial werden wir lernen, wie man die Position eines Servomotors mit dem ESP32-Mikrocontroller und dem MQTT-Protokoll über das Internet steuert. Durch die Nutzung des Adafruit IO-Dienstes wird es Ihnen möglich sein, den Servomotor aus der Ferne in verschiedenen Winkeln wie 0°, 90° oder 180° zu positionieren. Dieses Projekt demonstriert die Fähigkeiten des ESP32, der über integriertes Wi-Fi und Bluetooth verfügt, was ihn zu einem leistungsstarken Werkzeug für IoT-Anwendungen macht.

In diesem Projekt werden wir einen MQTT-Broker mit Adafruit IO einrichten, ein Dashboard zur Steuerung des Servos erstellen und den ESP32 damit verbinden. Die Servo-Position wird über einen Schieberegler im Dashboard einstellbar sein, was eine Echtzeitsteuerung von jedem internetfähigen Gerät aus ermöglicht (im Video um 5:30).
Hardware erklärt
Die Hauptkomponenten dieses Projekts sind der ESP32-Mikrocontroller und der Servomotor. Der ESP32 ist ein vielseitiger Mikrocontroller mit integrierten Wi-Fi- und Bluetooth-Funktionen, was ihn ideal für IoT-Anwendungen macht. Er kommuniziert mit dem Adafruit IO-Dienst über das MQTT-Protokoll, das leichtgewichtig und effizient für die Übertragung von Nachrichten über das Internet ist.
Der Servomotor ist ein rotativer Aktuator, der eine präzise Steuerung der Winkelposition ermöglicht. Er funktioniert, indem er ein Pulsbreitenmodulations (PWM)-Signal empfängt, das seine Position bestimmt. In diesem Projekt werden wir den Servomotor mit einem der digitalen Pins des ESP32 verbinden, um seinen Winkel aus der Ferne zu steuern.
Datenblattdetails
| Hersteller | Parallax |
|---|---|
| Teilenummer | SG90 |
| Logik/IO-Spannung | 3,3 V - 5 V |
| Versorgungsspannung | 4,8 V - 6,0 V |
| Ausgangsstrom (pro Kanal) | 1 A max |
| PWM-Frequenzrichtlinien | 50 Hz |
| Eingabelogikschwellen | 0,3 V - 0,7 V |
| Spannungsabfall / RDS(on)/ Sättigung | 0,2 V max |
| Thermische Grenzen | Betriebstemperatur: -10°C bis 60°C |
| Paket | Kunststoffgehäuse |
| Hinweise / Varianten | Mini-Servo, 180° Drehung |
- Stellen Sie eine ordnungsgemäße Spannungsversorgung für den Servomotor (4,8 V - 6,0 V) sicher.
- Verwenden Sie einen gemeinsamen Bezug zwischen dem ESP32 und dem Servo.
- Überwachen Sie das PWM-Signal, um zu vermeiden, dass die Grenzen des Servos überschritten werden.
- Verbinden Sie den Servomotor sicher, um Unterbrechungen während des Betriebs zu vermeiden.
- Aktualisieren Sie die Adafruit MQTT-Bibliothek, um die Kompatibilität sicherzustellen.
MQTT-Diagramme
Verdrahtungsanweisungen

Um den Servomotor mit dem ESP32 zu verbinden, beginnen Sie damit, den Masseanschluss des Servos mit dem Massepin des ESP32 zu verbinden. Verbinden Sie als Nächstes den Stromanschluss (normalerweise rot) des Servos mit dem 5V-Pin des ESP32. Verbinden Sie schließlich den Signalanschluss (häufig gelb oder weiß) mit dem digitalen Pin 25 des ESP32. Stellen Sie sicher, dass die Verbindungen sicher sind, um Unterbrechungen während des Betriebs zu verhindern.
Wenn Sie eine Batterie zur Stromversorgung des ESP32 verwenden, stellen Sie sicher, dass die Batteriespannung im akzeptablen Bereich für sowohl den ESP32 als auch den Servomotor liegt. Überprüfen Sie außerdem, ob die Verdrahtung mit den in Ihrem Code verwendeten Pin-Definitionen übereinstimmt, um Probleme zu vermeiden (im Video um 12:45).
Codebeispiele und Anleitung
Im bereitgestellten Code binden wir zunächst die erforderlichen Bibliotheken für den ESP32 und MQTT ein. Wir definieren das Servo-Objekt und geben den Pin an, an den es angeschlossen ist.const int servoPin = 25;. Der Standardwinkel ist ebenfalls eingestellt mitconst int defaultServoAngle = 90;, die die Anfangsposition darstellen wird, wenn das ESP32 hochfährt.
Servo myServo;
const int servoPin = 25;
const int defaultServoAngle = 90;
int servoAngle = defaultServoAngle;
Dieser Codeabschnitt initialisiert den Servo an Pin 25 und setzt seinen Standardwinkel auf 90°. Die VariableservoAnglewird basierend auf den Nachrichten, die vom MQTT-Broker empfangen werden, aktualisiert.
In dersetup()Funktion, wir verbinden uns mit Wi-Fi und richten den MQTT-Client ein. Die Anmeldeinformationen für Adafruit IO werden hier definiert, einschließlich des Benutzernamens und des Schlüssels:
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_xmIW58uNNsjJCSOqzZ9QoHyq29wu"
Dieser Abschnitt stellt die Verbindung zum Adafruit IO-Dienst her. Stellen Sie sicher, dass Sie diese Werte durch Ihre eigenen Adafruit IO-Anmeldeinformationen ersetzen, wenn Sie den Code implementieren.
Schließlich sorgt die Hauptschleife dafür, dass die Verbindung zum MQTT-Server aktiv bleibt und eingehende Nachrichten verarbeitet werden. Die Position des Servos wird basierend auf dem empfangenen Winkel aktualisiert:
mqtt.processPackets(500);
int pulseWidth = map(servoAngle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
Dieser Code ordnet den Servowinkel der entsprechenden Pulsbreite zu und sendet ihn an den Servomotor. DerprocessPackets()Die Funktion ermöglicht es dem ESP32, eingehende MQTT-Nachrichten zu verarbeiten und sicherzustellen, dass der Servo auf Befehle reagiert, die über das Adafruit IO-Dashboard gesendet werden.
Demonstration / Was Sie erwarten können
Sobald alles eingerichtet ist, sollten Sie in der Lage sein, den Servo über das Adafruit IO-Dashboard mit dem von Ihnen erstellten Schieberegler zu steuern. Wenn Sie den Schieberegler bewegen, wird der Servo seinen Winkel in Echtzeit anpassen. Stellen Sie sicher, dass Ihr ESP32 mit WLAN verbunden ist und die MQTT-Verbindung stabil ist. Wenn der Servo nicht reagiert, überprüfen Sie die Verkabelung und die Stromversorgung des Servos (im Video um 20:15).
Seien Sie sich der Reichweitenbeschränkungen für den Servo bewusst; das Senden eines Wertes außerhalb von 0° bis 180° kann dazu führen, dass er sich unerwartet verhält. Der Code enthält Prüfungen, um solche Vorkommen zu verhindern, indem der Winkel innerhalb dieses Bereichs begrenzt wird.
Video-Zeitstempel
- 00:00 Start
- 1:54 Projektvorstellung
- 2:52 Einführung in MQTT
- 6:50 Adafruit IO Einrichtung
- 9:54 Verkabelung des Servos
- 11:07 Code erklärt
- 18:59 ESP32-Board und COM-Port auswählen
- 22:10 Projektvorführung
Common Course Links
Common Course Files
Dinge, die Sie vielleicht brauchen
-
AliExpressKaufen Sie den SG90 Servo-Motor 180 oder 360 von AliExpress.s.click.aliexpress.com
Ressourcen & Referenzen
-
DokumentationESP32 Tutorial 17/55 - SunFunder Servomotor-Dokumentationdocs.sunfounder.com
-
ExternSG90 Servomotor auf Amazon USAamzn.to
Dateien📁
Andere Dateien
-
SG90 Seroo Motor-Datenblatt
robojax-servo-SG90_datasheet.pdf0.12 MB