LL Tiger でフィジカルコンピューティングのセッションをやってたので。。昔書いたのを、書いておこう。
発表していたかたは Funnel を Actionscript 経由で操作してたけど。python で直接操作します。
http://www.slideshare.net/biscuitjam/lightweight-language-tiger-2010-4885267
ローカルの MacBook に USB で gainer を接続。
最終的にはサーバの USB 端子に gainer つないでリレーで商用電源が On/Off できるなぁと思ったのですが、リレー動かすにはの電力が足らない&信頼性に欠ける。(ルータの電源を入り切りしようとしてた)とかあって放置してました。
MacBook ( apache ) <- USB ケーブル-> gainer で確認したけど、MacBook がサーバでも変わらない。(はず)
サーバに index.cgi として置いておいてアクセスすると『On』『Off』ボタンを押すとリレーが動きます。
#!/usr/bin/python # -*- coding: utf-8 -*- html = '''Content-Type: text/html <html> <head> <title>どのボタンが押されたか取得する</title> </head> <body> <h1>テストです。</h1> <p>押されたボタンは、「%s」です。</p> <p>status : %s </p> <form action="index.cgi" method="post"> <input type="submit" name="btn1" value="ON" /> <input type="submit" name="btn2" value="OFF" /> </form> </body> </html> ''' import cgi import serial import time ser = serial.Serial( '/dev/cu.usbserial-A4004QiO', baudrate = 38400, timeout=0, ) ser.write("KONFIGURATION_1*") time.sleep(0.5) msg = ser.readline() f = cgi.FieldStorage() if f.getfirst('btn1'): ser.write('H0*') btn = 'ON' time.sleep(0.5) msg = ser.readline() elif f.getfirst('btn2'): ser.write("L0*") btn = 'OFF' time.sleep(0.5) msg = ser.readline() else: btn = '' msg = ser.readline() print html %(btn,msg,) ser.close()
昔の写真あった!
じつは Perl でやろうとして出来なくて python でできたのでした。