Hier gibt es definitiv noch viel Verbesserungspotenzial. Das Ansteuern des zweiten Servos ist noch nicht implementiert, eine Fehlerbehandlung fehlt komplett, und das Layout der HTML-Seite fällt rudimentär aus. Es bleiben viele kleine Funktionen, die Sie selbst schrittweise implementieren und verbessern können. Um den Server zu starten, müssen Sie sich im virtuellen Environment befinden und das Kommando python server.py auf der Konsole absetzen.
Listing 5
server.py
from flask import Flask
import pigpio
import time
pwm = pigpio.pi()
pwm.set_mode(17, pigpio.OUTPUT)
pwm.set_PWM_frequency(17, 50)
pos=1500
app = Flask(__name__)
@app.route('/')
def hello_world():
page = '<HTML><BODY>'
page = page + '<iframe src="http://<RASPI-IP/URL>:8889/stream/1" width="800px" height="600px"></iframe><BR>'
page = page + '<TABLE width="800px"><TR><TD><BUTTON type="button" onclick="servo(1)">Links</TD>'
page = page + ' <TD><BUTTON type="button" onclick="servo(2)">Rechts</TD></TABLE>'
page = page + '<SCRIPT>'
page = page + 'function servo(url) { console.log(url);'
page = page + 'const xhttp = new XMLHttpRequest();xhttp.open("GET", url, true);xhttp.send();'
page = page + '}</SCRIPT>'
page = page + '</BODY></HTML>'
return page
@app.route('/1')
def l():
global pos
pos=pos+50
pwm.set_servo_pulsewidth(17, pos)
return ''
@app.route('/2')
def r():
global pos
pos=pos-50
pwm.set_servo_pulsewidth(17, pos)
return ''
if __name__ == '__main__':
app.run(debug=True,host="0.0.0.0")
Es brummt
Servomotoren fahren abhängig von der Signallänge eine bestimmte Position an. Im Inneren stecken ein Poti für die Positionsermittlung sowie eine Regelelektronik, die den Motor steuert.
Bei den meisten Servos kommt hier traditionelle Analogtechnik zum Einsatz. Gelegentlich ist die Regelung oder Mechanik nicht in der Lage, die Position zu erreichen, die der Signallänge entspricht. In einem solchen Fall fängt die Regelung an zu schwingen. Dadurch wechselt der Motor ständig die Richtung und fängt an zu brummen. Um das zu verhindern, ermitteln Sie empirisch, bei welchen Signallängen der Motor (noch) nicht brummt.
Mitunter rufen aber auch mechanische Widerstände das Brummen hervor. Alles in allem ist das keine schlimme Sache, allerdings reagiert die Kamera mit massiver Fehlfokussierung darauf.
Fazit
Mit einer aktuellen Anleitung und ein wenig Aufwand ist es gar nicht so schwer, den Kamera-Stream des Raspberry Pi auf einer Webseite darzustellen (Abbildung 4).
Eine wichtige Komponente in einem solchen Setup stellt allerdings ein gut funktionierender Mediaserver dar. Wir haben uns für MediaMTX entschieden, weil der Server sehr viele Möglichkeiten bietet und ohne zusätzliche Software funktioniert. Zugegebenermaßen haben wir nur einen Bruchteil der von MediaMTX gebotenen Funktionen verwendet. Wenn Sie tiefer in das Thema einsteigen möchten, lesen Sie sich die Anleitung bei Github genau durch. (tle)
Der Autor
Martin Mohr erlebte die komplette Entwicklung der modernen Computertechnik live mit. Nach dem Studium entwickelte er überwiegend Java-Applikationen. Mit dem Raspberry Pi erwachte seine alte Liebe zur Elektronik wieder.
Glossar
- RTSP
-
Das Real Time Streaming Protocol (RTSP) wurde zum Übertragen von kontinuierlichen Datenströmen entwickelt. Dabei kann es sich um Audio- oder Videodaten, Messwerte von Sensoren oder ähnliche Daten handeln.
Infos
- Raspberry Cam: https://www.amazon.de/dp/B076F83JW5
- Dokumentation Raspberry Pi Kamera:https://www.raspberrypi.com/documentation/computers/camera_software.html
- MediaMTX: https://github.com/bluenviron/mediamtx
- MediaMTX herunterladen: https://github.com/bluenviron/mediamtx/releases/latest
- Servomotoren kaufen: https://www.amazon.de/AZDelivery-Roboter-Hubchrauber-Flugzeug/dp/B07CYZSVKW/
- STL-Dateien: https://www.thingiverse.com/thing:7051628
- U-Maker Box: https://www.weidmueller.de/de/produkte/elektronik/elektronikgehaeuse/raspberry_pi_gehaeuse.jsp
- Bibliothek Pigpio: https://abyz.me.uk/rpi/pigpio/
- Flask Python Server: https://flask.palletsprojects.com/en/stable/






