4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-11-13

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

image

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

image

こちらで使ってみます。


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>
4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?