[PYTHON] L Chika (HTTPS-kompatibel) mit Arduino beim Zugriff auf den Webserver

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

L Chika (HTTPS-kompatibel) mit Arduino beim Zugriff auf den Webserver
Wenn Sie auf den Webserver zugreifen, L Chika mit Arduino
[https-Proxy mit Tintenfisch] Beseitigen Sie den Fehler beim Zugriff auf einen Webserver, auf dem kein zwischengeschaltetes CA-Zertifikat verkettet ist.
Greifen Sie mit python27 / pyodbc auf dem Container auf den SQL Server des Hosts zu
Laden Sie den mit Gunicorn eingerichteten Server neu, wenn Sie den Code ändern
Remote L Chika mit Pigpio
Der HTTP-Zugriff über einen Proxy in Python Web Scraping war bei Anfragen einfach
Wenn Sie das Intervall der Achsenskala mit APLpy anpassen möchten