LoginSignup
4
4

More than 5 years have passed since last update.

WebサーバにアクセスするとArduinoでLチカ(HTTPS対応)

Last updated at Posted at 2016-02-21

以前にPythonでサーバを立ち上げ、ブラウザからArduinoを操作するという仕組みについて書きました。

このときはBottleというフレームワークを使っていたのですが、getUserMediaなどJavaScriptで画像を扱うインタフェースがHTTPSでしか使えなくなり、BottleをHTTPSに対応させるのが難しいので、CherryPyというフレームワークに変えてみました。

まず、前作業として、下記を参考にオレオレ証明書を作っておきます。
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

このpemを指定してHello worldを表示するサンプルがこちら。Arduinoへ接続する前に、こちらで動作確認してみてください。

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())

ブラウザが怒りますが安心してください。履いてます。正常動作です。

これに、pyserialによるシリアル送信とCORS対応(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())

これを実行してhttps://127.0.0.1:8080/?value=1にアクセスすると、Arduinoに「1」という値が送信されます。

Arduino側のスクリプトは、こちらを参考にしてください。

Githubにも置きましたので、こちらからもどうぞ。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4