ようやくWebコントロールに成功

あれから1ケ月半。

さぼっていた訳でなく、時間を見つけては、ひたすらRAPIROをWebでコントロールするためのプログラム作りに時間を費やしていたのでした。

今までやってきたことを整理しようと思ったものの、試行錯誤の連続で、その都度記録に残していなかったので、半分以上何をやったか忘れてしまった状態。((+_+))

僅かな記憶を頼りに整理してみましょう。

まずApache2にmodo_pythonを入れようとしたら、それは古い技術なのでmodo_wsgiにしたほうがよいとの記事を見つけ、挑戦してみる。

・・・が、うまくいかない。

次に、セッション管理ができる「flask」という軽量webフレームワークを見つけ、インストールしようとしたら既にインストールされていた。

これを用いて、色々とやってみる。

簡単にWebプログラムは作れるのだが・・・。

悪戦苦闘した結果、どうもArduinoとの接続情報をセッションで引き継ぐことはできないようだ。

少なくとも、私の情報収集能力と技術では・・・。

pyserialの英語の原文ドキュメントも何度も読み直したんだけどね。

また、通常はプログラムを修正したら、いちいちプログラムを再起動しなくても自動的に反映できるはずが、どうも反映できない。

毎回Apache2を再起動しないと反映できなかった。

ある時、flaskアプリケーションを、LXTerminal上から起動していないのに、プログラムが動いていることに気付く。

どうやらRaspberryPiを立ち上げ、Apache2が自動起動した時点で該当のプログラムが起動されているようだった。

Apache2連携の設定をしたときに、そうなったみたいである。

ブラウザでテストしていると、プログラムが落ちたときに、どこで落ちたかわからないので、ファイルにログを出力する機能も組み込む。

思ったときにログが出力されないので、あまり役には立たなかったが・・・。

flaskでArduinoとの接続情報をセッションで引き継ぐことに約1ケ月を浪費し、ついに断念。

薄々できなさそうなことに気付いた時点で、プランBを考えていた。

それは、雑談会話プログラムのときと同様に、RaspberryPiが立ち上がった時点でRAPIROを操作するArduino基盤に接続するプログラムを自動的に立ち上げ、flaskアプリケーションからの指示を待つ作戦。

指示は、テキストファイルを経由して、それをお互いが読み書きする方式。

これしかないと考えた。

タイムラグがあるので、適当にスリープコマンドを入れる。

この作戦は割とすんなりと進めることができた。

しかし、カメラの撮影画像がうまく表示できない。

どうも以前に表示したキャッシュの内容を表示するばかりで一向に撮影したばかりの画像が表示されない。

毎回、操作の指示を出す度にブラウザのキャッシュをクリアすることもできないので、都度違う名前のファイルを作成して、それを表示させることに。

具体的には、flaskアプリケーションとRAPIROを操作するプログラムとで同期をとって、ファイル名の後ろに数字をつけたファイルで画像を撮影し、表示する作戦。

ファイルがどんどん増えていくので、RAPIROを操作するプログラムが自動起動された時点で、すべて削除する機能も追加。

しかし、変数がプログラム内の関数に渡せない。

グローバル変数は、プログラムの最初に定義しておけばよいものと勝手に思い込んでいたら、pythonは他の言語と全く違う。

グローバル変数の宣言は、引き渡される関数内でやらないといけないのであった。

これには、びっくり。

今までの常識が通用しない。

それと前からおかしいと思っていたことが、はっきりした。

RaspberryPiからRAPIROのArduino基盤に接続して操作するコマンドは、LXTerminal上からプログラムを実行すると、すぐにエラーになって動かなくなる。

これは、雑談会話プログラムの時も同様であった。

バックグラウンドで実行しないと駄目みたいですね。

今回、せっかくセッション管理も学んだので、ログイン画面と排他制御も実装してみました。

DSC_1038.JPG

DSC_1039.JPG

スマホでも動きます。

よかったら、動画もご覧頂ければと思います。

片手で動画を撮影しながら、キーボードを叩いているので、一部画像が乱れるところがありますが、ご容赦を。(^_-)-☆


さあ、これですっきりとした気分で、顔識別に挑戦できるぞ!

この記事へのコメント