In diesem Beitrag möchte ich dir zeigen, wie du einen Servomotor vom Typ SG90 am ESP32 betreiben kannst.


Um den kleinen Servomotor vom Typ SG90 am ESP32 zu betreiben, musst du eine zusätzliche Stromquelle anschließen, ich verwende ein Power Shield für das 400 Pin Breadboard.
Den Servomotor habe ich bereits in den beiden Beiträgen zum Microcontroller Arduino Arduino, Lektion 16: Servo ansteuern sowie für den Rasppberry PI Raspberry PI Tutorial #7: Servomotor steuern beschrieben. Jedoch möchte ich in diesem Beitrag darauf eingehen was es beim ESP32 zu beachten gibt und wie dieser an dem Microcontroller programmiert wird.
benötigte Bauteile für diesen Beitrag
Du benötigst folgende Bauteile für diesen Beitrag:
- einen ESP32*,
- ein Datenkabel*
- ein Servomotor vom Typ SG90*,
- ein 400 Pin Breadboard*
- ein Power Shield*
- eine 9V Blockbatterie*,
- passender Batterieclip* mit Jackadapter
- 4 Breadboardkabel*, 10 cm, Stecker – Stecker
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Die Servos, Breadboardkabel und vor allem die Batterien erhältst du in „Maxipackungen“ pro Stück deutlich günstiger.
Aufbau der Schaltung
Der Servomotor vom Typ SG90 verfügt über 3 Pins. Da wir eine zusätzliche Stromquelle in Form eines Power Shields verwenden, müssen wir zunächst GND vom Breadboard an den Pin „G“ des ESP32 verbinden. Vom Stecker des Servomotors wird braun an GND bzw. „-“ und rot an VCC bzw. „+“ des Breadboards angeschlossen.
Der gelbe Pin des Steckers wird an den GPIO Pin 4 des ESP32 angeschlossen.

Quellcode
Bevor wir mit der Programmierung beginnen können, müssen wir die technischen Daten des Servomotors SG90 im Datenblatt nachlesen. Du findest ein Datenblatt unter http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf.
Aus diesem Datenblatt können wir entnehmen, dass dieser Servomotor mit einer Frequenz von 50Hz arbeitet.
#Bibliothek zum ansteuern der GPIO Pins from machine import Pin, PWM #Bibliothek welche die Funktion enthält den Ablauf zu Pausieren import time #der Servomotor ist am GPIO 4 angeschlossen #die Arbeitsfrequenz ist 50Hz servo = PWM(Pin(4), freq=50, duty=77) #Variable für den Wert einer Pause zwischen den #Schritten des Servomotors PAUSE = 0.05 #Endlosschleife while(True): #Schleife von 0 bis 100 for duty in range(0,100): servo.duty(duty) time.sleep(PAUSE) #Schleife von 100 bis 0 for duty in range(100,0, -1): servo.duty(duty) time.sleep(PAUSE)
Video
Fazit
Einen kleinen Servomotor vom Typ SG90 am ESP32 mit MicroPython zu betreiben ist relativ einfach und auch schnell erledigt. Den Code kannst du natürlich auch nutzen, um größere Servomotoren wie den MG995 oder MG996R am ESP32 zu betreiben bzw. anzusteuern. Da diese Servomotoren deutlich mehr Leistung aufnehmen, benötigst du für diese eine stärkere Spannungsversorgung.

Im nächsten Beitrag möchte ich dir zeigen, wie du das 16 Kanal Servo Driver Modul vom Typ PCA9685 mit MicroPython ansteuerst und somit mit nur einem GPIO Pin maximal 16 Servomotoren ansprechen kannst.

Huhu,
ich habe den Aufbau exakt nach Deinem Vorschlag gemacht (ich setze ein Heltec WiFi Kit 32 ein).
Das Kuriose ist, dass der Servo nur wie erwartet funktioniert, wenn ich ihn direkt über das WiFi Kit mit Strom versorge (egal ob 3,3V oder 5V – funktioniert beides).
Schließe ich ihn hingegen an ein externes Power Shield an (egal ob 3,3V oder 5V / GND des WiFi Kits ist mit GND vom Power Shield verbunden) dann brummt der Servo nur, ändert aber nicht seine Stellung.
Hast Du eine Idee?
Ich glaube das diese Setup eh nicht funktionieren kann denn den ESP32 3.3V Signal auf die GPIOs hat und den Servo 5V signal braucht oder?
Das brummen habe ich auch wann den Servo GND nicht mit den ESP GND verbunden ist. Bei mir bewegt sich leider auch nichts.
Hi,
in dem Aufbau ist am Breadboard ein Power Supply Modul mit einer 9V Blockbatterie angeschlossen.
Dieses Modul liefert 3,3V & 5V wobei ich hier die 5V für den Servo abgreife.
Wichtig dabei ist das GND vom Power Supply Modul mit dem ESP32 verbunden wird.
Gruß,
Stefan Draeger