HOME >> 鉄道模型工作室 > モニタ式の操作盤を作ろう WebIOPiとの連携
ラズパイのWebIOPi アプリを使って卓上レイアウトを遠隔操作するプロジェクトを進めている。 先回にて操作画面をそれらしく改善することが出来たが、LEDの点滅を遠隔操作する事が出来なかった。 そこでWebIOPiとの連携方法を検討した。
■ WebIOPiとの連携
いままで参考にして来た「RaspberryPiで学ぶ電子工作」の課題例では、ボタンのクリックによるボタンの色の変更とGPIOへのアクションは JavaScript とPython の両方の記述で対応し、さらに変数を多く使用して汎用的に対応できる方法で紹介されている。 一方、画像を取り換える方式を参考にしたのは、昔に紐解いた JavaScript の教則本であり、その処理の仕方が異なっているのであり。
ソフト力の乏しい小生にとっては、これをどうマッチングするのかが問題だったのである。 そこで、乏しいアイディアを使った実施したのが、先回の例であるが、見事に裏切られてしまった。
もう一度ネットでその方法を探ったところ、さるサイトにヒントを見つけ出した。 マクロ関数を使って連携させるとのことであった。
.
ラズベリーパイのGPIOは、HTMLからJavaScriptを使ってWebIOPiの関数ライブラリーを呼び出せば、操作できるとのことである。 この内容を自分なりに解釈してイラストにしたのを左に示す。 間違っている場合にはご容赦下さい。
そして、そのマクロ関数には、自分が処理しいGPIO の操作を記述しておくのである。
**************************************
ラズパイで稼動しているWEBサーバーアプリのWebIOPi は、Webブラウザのための、画面処理用のファイルを保管していると同時に、自身内で処理するスクリプトファイル(この場合は、Python にて記述されている script.py )も管理している。
タブレットやスマホからアクセスすると、画面処理用のファイル、即ち、index.html と styles.css、および javascript.js のファイルを送信して、アクセス側の画面を表示させる。
アクセス側の画面でクリックなどの操作が行われると、javascript.js ファイルが反応し、指定のマクロ関数の実行をWebサーバー側に要求する。 すると、サーバー側のスクリプトファイルである script.py の中のマクロ関数が実行され、結果としてGPIO の操作が実施されるのである。
今回は使用しなかったが、センサなどによって制御機器側の状態変化を感知すれば、逆のルートをたどってアクセス側の画面に表示させることも可能なのだ。
■ 記述を修正する
そこで、javascript.js ファイルと script.py をマクロ関数を使った記述に変更した。 変更後のファイルを収めるフォルダは 26 として再設定すると、見事に作動させるkとが出来た。
給電回路を模したLEDは今まで通りですが、ポイント操作の回路は、赤色LEDを直接点灯させる簡単な回路です。 1KΩの抵抗を挟んでGPIO ポートに直接接続しています。 転轍器の表示が反位に変わると、赤色LEDが点灯することが確認できました。
修正した二つのファイルを下に示めしますので、参考にして下さい。
同じような記述が並んでいます。 変数を駆使してスマートに書く方法があると思いますが、素人には愚直な方法が確実です。 どこをどう変えているのかも分かり易いと思っています。 なお、何度も述べますが、これらのファイルは単独では機能しません。 関係する多くのファイルのセットが必要です。
■ いろいろなトラブル
悪戦苦闘してここまで来ましたが、この間にいろいろなトラブルに遭遇してきました。 それらをまとめて覚書きとしておきます。
● WebIOPi が指定ファイルの機能を実行してくれない。
理由は、設定ファイル /etc/webiopi/config の[SCRIPTS] セクションに、実行させるスクリプトファイルが指定されていないためである。
myscript = /usr/share/webiopi/htdocs/bb/26/script.py
新しいファイル毎にファイルだ名を替えているので、ここの記述も変えておく必要があるのである。 よく忘れていたのだ。
● WebIOPi が突然機能しなくなった。
新しい記述をテストするべくラズパイを再起動させたが、タブレットから突然アクセスできませんとのメッセージが出た。 最初は、何がおかしいのか分からんかったが、初期ステップに戻って、webiopi の起動を確認すると停止した状態であった。 ラズパイを再起動させたり、自動起動を中止したりしたが改善されなかった。
いつもの様にネット情報を探すと、同じようなトライブルの人がいましたが、OSを再インストールして対応したとのこと。 こらはヤバいと思いながらさらに探してみると、status コマンドを使って状態を確認する方法が記載されていました。
$ sudo /etc/init.d/webiopi status
すると、Active の項目が dead になっていて、死んでいるとのメッセージでした。 さらに、他の情報によると、ログを確認して見なさいとのアドバイスを見つけた。 その方法は、
$ cat /var/log/webiopi
を打ち込んで見ると、ずらりと文字列が表示された。 初めて見る画面だったので、順次見て行くと、或る行に目が留まった。
ERROR - invalid syntax (script.py , line 63 )
とあり、間違い箇所を表示していた。 原因はコロンとセミコロンの記述間違いであった。 ファイルの63行には、確かに間違いの記述があったのだ。
このたった一文字の違いを修正して再起動後、webiopi を起動させると、涼しい顔をしてアクセス可能となった。
● 文字の打ち込み間違い
上記の例のように、文字の打ち込み間違いはたびたび発生していたのである。 もうすぐ80才になる後期高齢者にとっては、しょぼつく目をこすりながらの作業は、ミスが多くなるのである。 ちなみに、今回のトライも最初は、左方向進行のボタンが作動しなかったのです。 何度かチェックして見つけたミスは、
leftOFF と書くべきところを ledtOFF
と書いていたのである。 今回は、専用のアプリがなかったので、メモ帳を使っての編集作業であった。 このため、単純な文法ミスをチェックしてもらえる機能がなかったので、より苦労させられたのである。
■ 準備完了だ
操作機能を一通り確認できたので、その他の設定を実施した。
今はまだテスト中なので、モニタ、キーボード、マウスが配線してあるが、卓上レイアウトにて使用する時はこれらのケーブルは接続しないスッキリとした状態で使う予定である。 台の空いているスペースに必要なユニットを配置するつもりだ。 また、ブレードボードの端にある押しボタンスイッチは、シャットダウンボタンである。
次回は、ポイント駆動ユニットを接続してテストを実施しよう。
2021/8/14 作成