Früher habe ich über den Mechanismus geschrieben, einen Server mit Python zu starten und Arduino über einen Browser zu betreiben.
http://qiita.com/drafts/9abfa1a4b6bf66a5f8fa/edit
Zu diesem Zeitpunkt verwendete ich ein Framework namens Bottle. Da jedoch Schnittstellen, die Bilder mit JavaScript wie getUserMedia verarbeiten, nur mit HTTPS verwendet werden können, ist es schwierig, Bottle mit HTTPS kompatibel zu machen. Daher habe ich es in ein Framework namens CherryPy geändert. Es war.
Erstellen Sie zunächst als Vorarbeit ein Oleore-Zertifikat, das sich auf Folgendes bezieht. http://docs.cherrypy.org/en/latest/deploy.html#ssl
$ openssl genrsa -out privkey.pem 2048
$ openssl req -new -x509 -days 365 -key privkey.pem -out cert.pem
Hier ist ein Beispiel für die Anzeige von Hello World durch Angabe dieses Pems. Bevor Sie eine Verbindung zu Arduino herstellen, überprüfen Sie bitte den Betrieb hier.
import cherrypy
cherrypy.server.ssl_module = 'builtin'
cherrypy.server.ssl_certificate = "cert.pem"
cherrypy.server.ssl_private_key = "privkey.pem"
class HelloWorld(object):
@cherrypy.expose
def index(self):
return "Hello world!"
if __name__ == '__main__':
cherrypy.quickstart(HelloWorld())
Der Browser wird wütend, aber keine Sorge. ~~ Ich trage es. ~~ Normalbetrieb.
Hier ist die Hinzufügung der seriellen Übertragung durch Pyserial- und CORS-Unterstützung (Einstellung, um den Zugriff über Domänen im HTTP-Header zu ermöglichen).
import cherrypy
cherrypy.server.ssl_module = 'builtin'
cherrypy.server.ssl_certificate = "cert.pem"
cherrypy.server.ssl_private_key = "privkey.pem"
import serial
ser = serial.Serial('/dev/tty.usbmodem1411',9600)
def multi_headers():
cherrypy.response.header_list.extend(
cherrypy.response.headers.encode_header_items(
cherrypy.response.multiheaders))
cherrypy.tools.multiheaders = cherrypy.Tool('on_end_resource', multi_headers)
class CherryArduino(object):
@cherrypy.expose
@cherrypy.tools.multiheaders()
def index(self,value='Hello'):
cherrypy.response.multiheaders = [('Access-Control-Allow-Origin', '*')]
ser.write(str(value))
return value
if __name__ == '__main__':
cherrypy.quickstart(CherryArduino())
Wenn Sie dies tun und auf "https: //127.0.0.1: 8080 /? Value = 1" zugreifen, wird der Wert "1" an Arduino gesendet.
Das Skript auf der Arduino-Seite finden Sie hier.
http://qiita.com/usopyon/items/aada42d44c6f2cd0a3ff
Ich habe es auch auf Github gestellt, also klicken Sie bitte auch hier.
https://github.com/usopyon/cherrypy_serial
Recommended Posts