RaspberryPi で IoT データの遠隔ビュー

# ２時間のハンズオンテキスト

工場などで、

- 物流記録
- 異常検知
- 重量測定ログ

などをしたい。

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は、以下のような並びになっています。

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/753fe8dd-358d-ff3c-0525-b57843fd1215.png)

数字がの並び順がデタラメですね。WiringPiというツールを使うと少しはマシな番号の割り振りになります。

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/f5f808f8-8b6d-da9a-7bb5-06f01309f984.png)

こちらで使ってみます。

```

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

```

インストールできたら、ブラウザから見てみます。

http://169.254.12.21

を開くとページが出てきます。


サーバで、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>
```