1. はじめに
こちらのYouTubeの最初の5分間にインスパイアされて、
https://youtu.be/AanyOK3_yQU
工場の生産ラインで稼働状況を知らせるパトライトを使ったIoTを再現してみました。
私は製造業の人でもエンジニアでもないので、変なところがあればご指導願います。
完成イメージ
以下の画像のように、
パトライトの状況をスマホ(LINE)やデータベース(GoogleSpreadSheet)に 送ります。
環境・使用ツールなど
動作確認OS
macOS Monterey
ハードウェア
- M5StickC Plus
- M5Stack用光センサユニット
-
パトライトシグナルタワーWME-302D-RYG
※定価は約2万円ですが、メルカリで2400円でゲットしました。
開発ツール
- LINE Notify
- IFTTT
- Google Speadsheet
- UIFlow (ビジュアルプログラミングツール)
2.開発
2-1. 工場側
M5StickC plus というマイコンボードを使います。
M5StickC plus と UIFlow の設定
まず、
最初の設定はこちら参照
https://qiita.com/tatsuya1970/items/c0a2a317c9d10942cbcb
M5StickC Plus の電源をオンにする
※ 電源ボタンは2秒長押しで ON, 6秒長押しで OFF

UIFlow
UIFlowにアクセス
https://flow.m5stack.com/
以下の画像のようにセッティングする
(1)Apiキー 先ほどののAPIキーを入力、 Language:日本語
(2)濃いオレンジのM5Stickのアイコンをクリック
(3)「OK」をクリック
マイコンボードにセンサーをつける

UIFlowでの開発
UIFlowの左サイドの「Label」アイコンをM5Stickの画像にドラッグ&ドロップ
UIFlow でのビジュアルプログラミング
光センサの値が表示されました。

2-2. データを受ける側 (LINE)
(参考にした記事)
https://qiita.com/twtjudy1128/items/e4980be7ffd1b465144a
LINE Notify と IFTTT を使います。
-
LINE Notify(ラインノティファイ)とは、LINEと外部のWebサービスやアプリを連携し、ユーザーがカスタマイズされた好みの情報を受け取ることができる機能です(無料)
今回は、外部のセンサーのデータを受領するために使います。 -
IFTTT(イフト) とは異なるソーシャルメディアやプラットフォームを連携させるWebサービスです。(一定数まで無料)
今回は、センサーのデータをマイコンを通じて通信したものを、LINEへつなぐ役目を担います
LINE Notify
LINE Notify にアクセス
ログインできたら右上に自分のLINE名が表示される
「IFTTT」をクリック
「Recieve a web request」と書かれたブロックをクリック
「EventName」を入力して、「Create Trigger」
次は、LINEに通知がいく設定をします。
「Then That」をクリック
もし、「connect + LINEと連携しますか?」
というメッセージがでる人は、「YES」
こんな画面になる

- Recipient : 通知が来てほしいLINEグループを選択
- Message : 送られてくるメッセージ グレースケールのValue1とかは変数になってて、M5Stickからテキストを代入できます。
- Photo URL :テキストだけじゃなく、写真も送ってほしいときは、ここにイメージURLか変数を入れます。
今回は以下のように設定し、「Create action]
以下のURLをどこかに控えておく
https://maker.ifttt.com/trigger/LightTest/with/key/[Your key]
センサーのしきい値の設定
パトライトにセンサーを養生テープでくっつける
パトライトが点灯しているときと消えてるときのセンサーの値を調べて、しきい値を決めます。
私の部屋は、パトライトが点灯しているときは、おおむねセンサーの値が900以上でしたので、しきい値を900とします。
UIFlowに戻り、 以下のプログラムを作成します。 しきい値とさきほどIFTTTで控えたURLを入力します。 パトライトが消えたらLINEに「STOP」アラート、パトライト稼働中は「RUN」というアラートがいきます。
プログラムを作成したら、下方の「Run」で実行してください。
10秒ごとにLINEに光センサーの情報が投稿されます。

このままでは、パトライトの点灯・消灯に関わらず、一定間隔でLINEに通知が行きます。
点灯→消灯、消灯→点灯 といった状況が変更になったときだけLINEに通知するようにするには、
以下の画像のように
パトライトの状況を表す変数 state と
状況が変わった時にフラグ1がたつ変数 changeを作ります。
change変数が1のときだけ、LINEに送信するようにしました。
※ほかにいい方法があるかもしれませんが。
このように、状況が変わったときだけLINEに通知してくれます。
(参考)複数のLINEに送る場合
配列とループを使います。
なぜか、ループ内では3秒以上間隔を開けないと送信できませんでした。
2-3. データを受ける側 (GoogleSpreadSheet)
(参考にしたブログ)
https://qiita.com/chocomo/items/e5506d00cc82790d2b4d
GoogleSpreadシートを新規作成
シート名を「data」にして、
以下のようにセルに入力する。
以下のコードをコピペ
function doPost(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('data'); //”data”シートをアクティブにする。
var jsonString = e.postData.getDataAsString();
var params = JSON.parse(jsonString);
// データをシートに追加
sheet.insertRows(2,1); // 2行目に行を追加
sheet.getRange(2, 1).setValue(new Date()); // 受信日時を記録
sheet.getRange(2, 2).setValue(params.Value); // センサー値
sheet.getRange(2, 3).setValue(params.State); // 稼働状況
}
次のユーザーとして実行:自分
アクセスできるユーザー:全員
最初なので認証が済んでませんよというアラートが出る。
Advanced をクリック
先ほど作成したスクリプトのファイル名が現れるので、クリックする。
「Allow」をクリック
あらためて、デプロイをクリックすると、
デプロイが成功
以下のURLをどこかに控えておく。
UIFlow に戻り、 以下のプログラムの中に、さきほどのURLを入力する。
PLAYすると、
GoogleSpreadSheet に光センサーのデータがいくはず。
以上です。