Tornado auf Himbeer-Pi zu verwenden, websockets sowie monitor serielle Schnittstelle Arduino-Kommunikation

Im wesentlichen, was ich mir erhoffe zu erreichen ist ein canvas-basiertes web-interface zur Steuerung einer Arduinoüber eine Raspberry Pi. Die Anwendungsfall ist, dass ein Benutzer navigiert zu raspberrypi:8080 zeigt eine Leinwand. Dann werden beim verschieben eines Schiebereglers, eine websocket-Nachricht wird gesendet, um die Tornado - server auf dem Raspberry Pi. Tornado dann schickt eine serielle Nachricht an den Arduino, die änderungen der RGB Wert eines LED. So weit So gut, ich habe in der Lage, dies zu tun mit Hilfe der Dokumentation, die von einem Entwickler, Raspberry Pi, Android-HTML5-Echtzeit-Servo Control.

Jedoch ist die Kommunikation nur in einer Richtung vom Raspberry Pi zum Arduino. Ich möchte den Tornado auch die überwachung der seriellen Schnittstelle um beliebige sensor Daten zurück an das front-end. Hier, wo ich bin unsicher, wie es weitergehen soll. Ich war in der Lage, etwas zu erreichen, wie dies mit Node.jsdie Monitore für beide websocket-Nachrichten sowie Nachrichten asynchron Seriell.

Sollte ein asynchroner Prozess hervorgebracht werden, die ständig überwacht den port? Ich habe gesehen, ein paar Optionen für diese Art von Lösung.

  1. Einige Leute vorschlagen tornado.gen.Taskaber für die einzelnen HTTP-Anfragen, nicht für die ständige serielle Daten.
  2. tornado.ioloop.PeriodicCallback was könnte ich überprüfen, serielle Daten jede Millisekunde, aber das klingt nach einer Menge Aufwand.
  3. ich habe auch gesehen, separate tools wie Swirl. (Swirl ist überholt, nach es ist Github repo)

Oder sollte ich eine separate Python Anwendung, die Monitore, die serielle und dann kommuniziert der Tornado-Anwendung auf etwas, das Sie verstehen können, wie die folgenden?

  1. websocket-Nachrichten mithilfe eines der websocket-client
  2. ZeroMQ (Beispiel: pyzmq /Beispiele /eventloop /web.py)

So gibt es viele Optionen..., Was sind einige Empfehlungen und einige Gründe zu versuchen, oder vermeiden Sie eine der oben aufgeführten Optionen?

Hier ist, was ich habe und ich muss hinzufügen, serielle überwachung von:

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket

from tornado.options import define, options
define("port", default=8080, help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.render('index.html')

class WebSocketHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print 'new connection'
        self.write_message("connected")

    def on_message(self, message):
        print 'message received %s' % message
        self.write_message('message received %s' % message)

    def on_close(self):
        print 'connection closed'

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(
        handlers=[
            (r"/", IndexHandler),
            (r"/ws", WebSocketHandler)
        ]
    )
    httpServer = tornado.httpserver.HTTPServer(app)
    httpServer.listen(options.port)
    print "Listening on port:", options.port
    tornado.ioloop.IOLoop.instance().start()

InformationsquelleAutor der Frage niltoid | 2013-01-06

Schreibe einen Kommentar