iXIT株式会社 岡崎です。
去年は短時間でシステム化できるようにノーコードを試して実戦投入しました。
今年は、システム化できる範囲を広げようとIoTを試し始めました。
概要
人感センサーで1.5m以内に人が来たことを検知したら、
WebAPIを叩くという仕組みを作ってみます。
人が廊下を通ったら、WebAPIを叩いて回数記録&閾値で通知する感じ。
今回はWebAPIを叩くところまで。
使い道
・一人暮らしの親が元気にしているかをリモートから自動で把握
・防犯として、夜間に人が通たら通知
材料
追加購入した物 合計1,870円(税込み)
①人感センサー M5Stack用PIRセンサユニット(583 円)
(赤外線の変化によって人の接近を検知するセンサー。
1.5m以内に人が来たら検知します。)
(CPU 240MHz×2、メモリ0.5MB、フラッシュメモリ4MB、Wi-Fi、Bluetooth)
手元にあったもの
③何らかのWebAPI
※今回はノーコード(Bubble.io)で作ったLINEメッセージ送信のWabAPIを使います。
④USB-Cのケーブル、USB充電器
作り方
- ①②④をそれそれケーブルでつなげます
- 「②マイコンボード」にプログラムを書きこむ
ざっくり以上です。
システム内の流れ
【人が廊下を通る】
↓ 赤外線
【①人感センサーが検知する】1.5m以内に人が近づいたら検知
↓ Goveケーブル
【②マイコンボードがWebAPIを叩く】
※デバッグ用に、検知したらLEDが緑から赤に変わるように設定
↓ Wifi
↓ インターネット
【③何らかのWebAPI】
※今回は、検知したらLINEメッセージを送ります。
ここまで動かした動画 (10秒)
プログラム
マイコンボードのプログラムは、C言語風の「Arduino言語」という言語で書きました。
①マイコンボードの初期化処理(setup)
②マイコンボードが起動中にループ実行する処理(loop)
③WebAPI呼び出し(send_line_message)
④マイコンボードのLEDの色変更(display_LED)
※【 】の中は環境によって変更
#include "M5Atom.h" #include <WiFi.h> #include <WiFiMulti.h> #include <HTTPClient.h> #include <ArduinoJson.h> WiFiMulti wifiMulti; uint8_t DisBuff[2 + 5 * 5 * 3]; // ①マイコンボードの初期化処理 void setup() { M5.begin(true, false, true); delay(10); display_LED(0x00, 0x00, 0x00); //人感センサーと接続 pinMode(32, INPUT); //Wifi接続 wifiMulti.addAP("【SSID】", "【PASSWORD】"); } // ②マイコンボードが起動中にループ実行する処理 void loop() { if(digitalRead(32)==1){ //人感センサーが検知中は、LEDを赤に変更 display_LED(0xff, 0x00, 0x00); //WebAPIを呼び出し(今回はLINEメッセージ送信) send_line_message(); delay(10000); }else{ //人感センサーが検知していない場合、LEDを緑に変更 display_LED(0x00, 0xff, 0x00); } delay(100); M5.update(); } // ③WebAPI呼び出し void send_line_message() { if((wifiMulti.run() == WL_CONNECTED)) { //送信する情報を作成 DynamicJsonDocument doc(JSON_OBJECT_SIZE(2)); doc["uuid"] = "【LINEアカウントの内部ID】"; doc["message"] = "廊下を通ったよ"; String json; serializeJson(doc, json); // WebAPIを呼び出し HTTPClient http; http.begin("https://no-template01.bubbleapps.io/version-test/api/1.1/wf/line_send_mes/"); http.addHeader("Content-Type", "application/json"); http.POST(json); http.end(); delay(50); } } // ④マイコンボードのLEDの色変更 void display_LED(uint8_t Rdata, uint8_t Gdata, uint8_t Bdata) { DisBuff[0] = 0x05; DisBuff[1] = 0x05; for (int i = 0; i < 25; i++) { DisBuff[2 + i * 3 + 0] = Rdata; DisBuff[2 + i * 3 + 1] = Gdata; DisBuff[2 + i * 3 + 2] = Bdata; } M5.dis.displaybuff(DisBuff); }