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 でできたのでした。
