ich habe micht etwas mit Websockets beschäftigt und der "Chat" zwischen Browser und Raspi steht schon mal
Code: Alles auswählen
import RPi.GPIO as GPIO
import tornado.ioloop
import tornado.web
import tornado.httpserver
import tornado.websocket
import time
import os
PIN_OUT_1 = 29
PIN_OUT_2 = 31
PIN_RECHTS = 28
PIN_LINKS = 30
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_OUT_1, GPIO.OUT)
GPIO.setup(PIN_OUT_2, GPIO.OUT)
GPIO.setup(PIN_RECHTS, GPIO.OUT)
GPIO.setup(PIN_LINKS, GPIO.OUT)
class WSHandler(tornado.websocket.WebSocketHandler):
if drive == 1:
print 'servo start'
Servo.start(50)
def check_origin(self, origin):
return True
def open(self):
print 'New connection was opened'
self.write_message("Welcome to my websocket!")
def on_message(self, message):
print 'Incoming message:', message
self.write_message("You said: " + message)
if message == "fahren":
GPIO.output(PIN_OUT_2, False)
Servo = GPIO.PWM(PIN_OUT_1, 50)
drive = 1
if message == "halten":
print 'Eingabe erkannt', message
GPIO.output(PIN_OUT_2, False)
Servo = GPIO.PWM(PIN_OUT_1, 50)
drive = 2
def on_close(self):
print 'Connection was closed...'
GPIO.cleanup()
application = tornado.web.Application([
(r'/ws', WSHandler), ])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
Sobald eine Nachricht eintrifft, wird mir das mit message übergeben und ich kann diese in IF statements verarbeiten.
Das Problem ist, wenn "fahren" kommt, arbeitet python den Code nur einmal schnell ab, so dass der PWM Befehl nicht weiter ausgeführt wird.
Dieser soll aber so lange ausgeführt werden, bis das halten Signal kommt.
Im HTML Skript wird das halten sofort gesendet, wenn ich den Knopf los lasse.
Mein Versuch Schleifen zu machen innerhalb der on_message Funktion, schlug fehl.
Mein nächste Versuch lag darin den PWM Befehl ausserhalb der on_message Funktion auszuführen, in der Hoffnung das der Code an der Stelle auch normal abgearbeitet wird.
Leider wird er dort nicht ausgeführt.
Was kann ich hier tun?
Ich dachte die Handler agieren hier wie Interrupts und das ansonsten das Python Programm normal weiter läuft.
Vielen Dank!
Gruß
Tenor