WebサーバにアクセスするとArduinoでLチカ

  • 4
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

この手のは猫も杓子も作ってるかと思いますが、bottle.pyというWebフレームワークとpySerialを使って書いてみました。コンテンツはWeb、ハードウェアはlocalhostというケースも考えられるので、CORS(Cross-Origin Resource Sharing)対応としてAccess-Control-Allow-Originヘッダを付けています。

import serial
import sys
from bottle import response,route,run

try:
    ser = serial.Serial('/dev/tty.usbmodem1451',9600)
except OSError:
    ser = False
except:
    print sys.exc_info()[0]
    raise

@route('/arduino/<command>')
def arduino(command):
    response.set_header('Access-Control-Allow-Origin','*')
    if ser:
        ser.write(command)
        line = ser.readline()
        return line
    else:
        return "arduino is not connected"

run(host="localhost",port=8946,debug=True)

arduino側はシリアルで文字列「1」を受け取ると1秒だけ光ります。

byte c = 0;

void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}

void loop(){
  while (Serial.available()){
    c = (int)Serial.read();
    //Serial.flush();
    switch(c){
      case 49://1
        digitalWrite(13,HIGH);
        delay(1000);
        digitalWrite(13,LOW);
        break;
    }
  }
}

bottle.pyもpySerialもMacならpipでインストールできます。

pip install bottle
pip install pyserial

Windowsの場合、pySerialでのポート指定が少し違うので、こちらを参照してください。

http://goodsite.cocolog-nifty.com/uessay/2012/12/python_arduino.html

※追記※
Githubに登録しました
https://github.com/usopyon/bottle_serial