WEB経由でのGPIO制御のめどが立ったので、3Dプリンターの遠隔モニターを改善します。
WEB経由のGPIO制御
FastCGIを断念
lighttpで、FCGIでGPIO制御を試みましたが、なんともなりません。エラーログを見て、ネット上に似たような症状がアップされていないが探しましたが、現在の知識では無理ということで、FCGIを断念して、CGIでやることにしました。
lighttpd.confに以下を設定して、一応、CGI対応としたました。
server.modules += { mod_cgi, }
$HTTP["url"] =~ "^/cgi-bin/" { cgi.assign = ( ".py" => "/usr/bin/pythonCGI" ) }
GPIOを断念
これで、動くはずでしたが、urlにpythonスクリプトを指定して動かしてみると、
との表示が出てしまいます。一番シンプルなスクリプトではちゃんと動きました。
#!/usr/bin/python3 import sys, os,time query_string=os.environ.get("QUERY_STRING") import RPi.GPIO as GPIO import urllib.parse if not query_string: print('Empty query') else: i = urllib.parse.parse_qs(query_string) if "q" in i: if i["q"][0] == "w": print('Turn on') elif i["q"][0] == "s": print('Turn off')
で、元のスクリプトを1行づつコメントアウトして行って、判明した原因が、GPIOを出力に設定するところでした。
GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) #GPIO.setup(13,GPIO.OUT) <<これのコメント外すとエラー発生 #GPIO.output(13,True) #for test #time.sleep(1) #GPIO.output(13,False)
不可解です。コンソールから起動すると正常に作動するのに、Web経由だと動きません。謎です。
最終的に、pythonモジュールのpigpioを使って、ようやく動くようになりました。
3Dプリンタ電源制御
システムブロック図
システム構成です。プッシュスイッチを押して
、全体の電源オン。緊急時にはweb経由で電源オフが出来き、再度スイッチを押すまでオフのまま。
以下、詳細作動。
電源オン時:①プッシュスイッチオンで、②5VDCが出力。リレー③を経由して、AC100V用リレー④を作動(保持)させる。同時に、3Dプリンタへ100Vを供給。
電源オフ時:ラズパイから信号出力①し、リレー②を作動(接点がオープン)。AC100vリレーがオフ③し、5VDC出力が停止④。同時に、3Dプリンタへの100Vが停止⑤。
外観構想
コンセントボックスとラズパイをくっ付けた、制御装置を構想。例により、ケースは3Dプリンタで製作予定。ラズパイは、透明ケースのままネジ止めして、ケースの横に長四角の穴を開け、GPIOの信号線を出します。
使用部品
製作開始
ケース
3Dプリンタで造形したところ。
AC100Vコンセントとスイッチを仮付け。ナットをケース側に埋め込ませ、瞬間接着剤で固定してあります。
カバーを付けたところ。
ラズパイは、こんな感じで乗ります。ラズパイから出るのはUSBカメラのみ。
ところが上手く行きません。コンセントにプラグを刺して、抜いたら、コンセントごと外れてしまいました。ナットの接着が甘くて、取れてしまったみたい。接着剤では強度が出ないかもしれません。その場は、ケースに直接ネジ止めするしか無さそうです。
今後
今日は、ここまでで、タイムアウト。続きは、年末年始の休み中にやります。
ps:ラズパイの動きが、少し不安定なのが気がかりです。