2時間のハンズオンテキスト
工場などで、
- 物流記録
- 異常検知
- 重量測定ログ
などをしたい。
Raspberry Pi を使って作ってみる。
こういったことをしたい
- ロジ管理
- タグ・コードリーダ
- DB連携
- データ遠隔可視化
- 工作機械のモニタ
- センサ繋げる
- データ蓄積
- リモートモニター/アラート
- 計測器
- シリアル通信
- データ蓄積
- データ可視化
基礎的なシステム構築レクチャー
- テキストログと同期
- ssh によるリモートログイン
- コマンドライン操作
- コマンドライン操作をスクリプト化
- スクリプトをPHPで実行
ここらへんを、レガシーなテクニックをつかってやる。
特別なソフトを使わず、
昔ながらのレガシーUnix系コマンド。
この組み合わせで20年同じものが使えている。
今後も20年は使える(はず)
外部連携
- 既存の生産管理DB
- メール
- クラウド
などと連携するとベター。
スタンドアロンで記録を取るだけでもいい。
ということで、基本機能は外部DB連携はしないけれど、拡張してDB連携などもできるようなものを考える。
課題抽出
- データ蓄積とデータのリモート可視化
- センサなどの接続やプログラムは自分で調べて解決できます。
- 外部連携すると効果は高いけれども、連携しなくても業務改善
- データ集約と見せ方の工夫だけで一次ゴールを作成できる
- それを元に次のステップを検討することを提案している
トレーニング
今回、以下のようなことを実現するシステムを作成するトレーニングを行った。
- データを集約して表示するだけで見える化できる。
- これをすることでデータを集めることができる。
- ネットワークに参加した他のPCやスマホで閲覧できる。
トレーニングの内容は以下の通り。
- GPIOコマンドでデジタル値を取る
- シェルスクリプトで無限ループ
- センサーの値変化をモニターする
- 日付をコマンドで取る
- デジタル値と日付を結合する
- 出力をリダイレクトしてファイル化
- cronで定期実行
- sshで外部から入ってファイルを見る
- scpでログファイルを転送
- Apacheをインストール
- WebサーバにPCからアクセス
- PHPで計算した結果をWeb表示
- ログファイルをWeb表示
- 見やすく成形
- ログファイルの抜粋を表示
インストール
以下まで終わらせておこう。
- Raspberry Pi を複数台用意 (今回の例では2台)
- Raspberry Pi へ Raspbian をインストール
- Raspberry Pi がインターネットに接続
IPアドレスを確認
Raspberry Pi にログインして、
ipconfig
と入力してエンターすると表示されます。
資料などを見て、固定 IP アドレスにできるならベターです。
今回は、2台のアドレスを「169.254.12.20」と「169.254.12.21」だとしておきます。
169.254.12.20 をエッジ、
169.254.12.21 をサーバとします。
母艦(PC)からログイン
PC に SSH クライアントをインストールしておきます。
いろんなSSHクライアントがありますが、Windows の場合は TeraTerm などが定番です。
エッジ側の Rasbperry Pi にログインします。
IPアドレスは「169.254.12.20」、ユーザ名は「pi」、パスワードは特に変更していなければ「raspberry」です。
Mac や Linux の場合は
ssh pi@169.254.12.20
のようにして接続します。
エッジとサーバの通信
エッジから
ping 169.254.12.21
のようにして、確認します。
Request Time Out や、 Distination Host Unreachable の表示が出たら何か問題があります。
GPIOの値を取る
RaspberryPiのGPIOは、以下のような並びになっています。
数字がの並び順がデタラメですね。WiringPiというツールを使うと少しはマシな番号の割り振りになります。
こちらで使ってみます。
gpio readall
とすると以下のようになります
電子回路の実験
まずは、LEDをつけてみます。何もなくても点灯するかどうかチェックです。
点きましたか? 点いたら配線を変えていきます。
ではスイッチをつなげてみあます。以下のようにしてください。
図
この写真はボタンを押すとLEDが点きます。
このボタンが押されたかどうかをRaspberryPiで検出してみます。
gpio read 0
とすると
0
が出てきます。
ボタンを押すと
1
が出てきます。
記録を取る
これを、記録を取ってみましょう。
まず、ボタンが押された時間を出してみます。
date
とすると、日付が出てきます。
vim gpiocheck.sh
として、
date
echo SWITCH=
gpio read 0
とします。
これを実行すると、キーボードで入力したように実行できます。
実行のためには、実行許可を与えます。
chmod 777 gpiocheck.sh
として、
./gpiocheck.sh
とすると、
2018年 11月 13日 火曜日 16:54:36 JST
SWITCH=
0
と出てきます。ちょっと見づらいですね。
スクリプトを変更して、以下のようにしてみます。
t=`date`
m=" SWITCH="
a=`gpio read 0`
echo "${t} ${m} ${a}"
実行すると、
2018年 11月 13日 火曜日 16:54:36 JST SWITCH=0
と出てきました。
記録を取る
./gpiocheck.sh > gpio.log
とすると、ファイルに記録が取れます。
cat gpio.log
で閲覧。
./gpiocheck.sh >> gpio.log
とすると、ドンドン記録が溜まっていきます。
自動実行
sudo vim /etc/rc.local
として、
/home/pi/gpiocheck.sh >> /home/pi/gpio.log
という行を追加します。
リモートに転送
エッジから、
scp /home/pi/gpio.log pi@169.254.12.21:/home/pi
とします。
サーバにログオンして、
cat /home/pi/gpio.log
とすると、コピーされてるのがわかります。
転送を自動化
パスワードを打たないといけなので、それを打たなくてもいいように署名をつくります。
この記事を参照して、やっていきます。
https://qiita.com/Tanaaaaan/items/50c3f0ddc15c40b750d2
うまくできたら、以下の行を/etc/rc.localに追加します
scp /home/pi/gpio.log pi@169.254.12.21:/home/pi
サーバの設定
サーバでは、sshでログインすると見えますが、Webブラウザで見えるようにしてみます。
apache と php をインストールします。
sudo apt nstall apache2 php5
インストールできたら、ブラウザから見てみます。
を開くとページが出てきます。
サーバで、index.html を消して、
sudo bash
cd /var/www/html
rm index.html
PHPを編集します。
vim /var/www/html/index.php
<h1>GPIO data</h1>
<pre>
<?php
system("tail /home/pi/gpio.log");
?>
</pre>