Plus tôt, j'ai écrit sur le mécanisme de démarrage d'un serveur avec Python et d'exploitation Arduino à partir d'un navigateur.
http://qiita.com/drafts/9abfa1a4b6bf66a5f8fa/edit
À cette époque, j'utilisais un framework appelé Bottle, mais comme les interfaces qui gèrent les images avec JavaScript telles que getUserMedia ne peuvent être utilisées qu'avec HTTPS, il est difficile de rendre Bottle compatible avec HTTPS, donc je l'ai changé pour un framework appelé CherryPy. C'était.
Tout d'abord, comme travail préliminaire, faites un certificat oléore en vous référant à ce qui suit. 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
Voici un exemple pour afficher Hello world en spécifiant ce pem. Avant de vous connecter à Arduino, veuillez vérifier le fonctionnement ici.
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())
Le navigateur se met en colère, mais ne vous inquiétez pas. ~~ Je le porte. ~~ Fonctionnement normal.
Voici l'ajout de la transmission série par le support pyserial et CORS (paramètre permettant l'accès à travers les domaines dans l'en-tête HTTP).
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())
Si vous faites cela et accédez à https: //127.0.0.1: 8080 /? Value = 1
, la valeur" 1 "sera envoyée à Arduino.
Veuillez vous référer ici pour le script du côté Arduino.
http://qiita.com/usopyon/items/aada42d44c6f2cd0a3ff
Je l'ai également mis sur Github, alors veuillez également cliquer ici.
https://github.com/usopyon/cherrypy_serial
Recommended Posts