Änderungen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

DataTransferWebRaspberryArduino

1.902 Byte hinzugefügt, 18:40, 27. Jul. 2017
Hier wird beschrieben wie man Daten in Echtzeit und Duplex von einer WebSeite über den Raspberry Pi zum Arduino schicken kann.
Als erstes brauchen wir einen WebServer. Da wir Python verwenden wollen nehmen wir [http://www.tornadoweb.org/en/stable/ Tornado].
</body>
</html>
</pre>
 
Danach eine Python-Datei mit dem Server-Code erstellen /server/server.py
 
<pre>
import tornado.web
import tornado.websocket
import tornado.httpserver
import tornado.ioloop
import serial
import thread
 
ser = serial.Serial('/dev/ttyS0', 9600)
print(ser.name)
 
def readSerial():
while True:
data = ser.read();
print 'from Arduino: ', data
# received from Arduino written to all WebSocket clients
[con.write_message(data) for con in WebSocketHandler.connection$
 
 
class WebSocketHandler(tornado.websocket.WebSocketHandler):
connections = set()
 
def open(self):
self.connections.add(self)
print 'new connection was opened'
pass
 
def on_message(self, message):
print 'from WebSocket: ', message
ser.write(message); # received from WebSocket writen to ard$
 
def on_close(self):
self.connections.remove(self)
print 'connection closed'
pass
 
class IndexPageHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
 
 
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r'/', IndexPageHandler),
(r'/websocket', WebSocketHandler),
(r'/(.*)', tornado.web.StaticFileHandler, {'path': './root'})
]
 
settings = {
'template_path': 'templates'
}
tornado.web.Application.__init__(self, handlers, **settings)
 
if __name__ == '__main__':
ser.flushInput()
thread.start_new_thread(readSerial, ())
ws_app = Application()
server = tornado.httpserver.HTTPServer(ws_app)
server.listen(9090)
tornado.ioloop.IOLoop.instance().start()
</pre>
 
Für den Arduino diesen Code verwenden.
<pre>
 
</pre>
688
Bearbeitungen