宅配ボックス、便利ですよね。でも、荷物が届いても気付かなくて困ったことはありませんか?
そこで、宅配ボックスに荷物が届いた時にLINEで通知してくれるシステムを作りました!
・・・という訳で今年もM5Stackコンテストにエントリーしました。今回は実用性特化で単純な構成というのもあり、M5Stampのお陰で少ない部品で簡単に作れます。
原理検証の為に既製部品を使用した「通常版」と、稼働時間を犠牲に部品再選定し3Dプリントで自作した「小型版」の2種類製作しました。
稼働時間は検証中ですが、通常版で半年程度はあると思います。
M5Stamp PICOを使用することで手軽かつ稼働時間を長くすることが出来ました!
■構成部品
通常版:M5Stamp PICO(\1,100) + Groveケーブル(\50) + ドアセンサースイッチ(\250) + 単4乾電池x3本(\90) + 電池ケース(\120) (※合計材料費1,610円)
小型版:M5Stamp PICO(\1,100) + リードスイッチ(\40) + 適当な磁石 + 自作磁石ケース + LR44ボタン電池x3個(\40) + 自作電池ケース + 自作ケース (※合計材料費1,180円+樹脂代)
■サイズ
通常版:60x30x30(ほぼ電池ケース)
小型版:本体Φ25x35mm、+磁石
■接続例
リードスイッチ(ドアセンサースイッチ)の片方をIO32に、もう片方をGNDに。
■プログラム例(参考、無保証です)
1.リードスイッチで開閉を検知するとDeepSleepから復帰する
2.WiFiに接続し、LINE Notify経由でLINE通知後、DeepSleepする
#include <FastLED.h>
#include <WiFiClientSecure.h>
#include "HTTPClient.h"
#include "FS.h"
const char* PASS = "your_pass";
void initWiFi()
{
while( WiFi.status() != WL_CONNECTED ){ delay( 200 ); }
Serial.printf( "[%lu] WiFi Connection OK \n", millis() );
}
const char* host = "notify-api.line.me";
const char* token = "your_token";
const char* message = "宅配ボックスの開閉を検知しました";
WiFiClientSecure client;
void sendLine()
{
client.setInsecure();
Serial.printf( "[%lu] LINE Notify Connection \n", millis() );
if( !client.connect(host, 443) ){ Serial.printf("[%lu] Connection NG \n", millis() ); }
String query = String("message=") + String(message);
String request = String("") +
"POST /api/notify HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Authorization: Bearer " + token + "\r\n" +
"Content-Length: " + String(query.length()) + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n\r\n" +
query + "\r\n";
client.print(request);
}
#define NUM_LEDS 1
CRGB leds[NUM_LEDS];
void setup() {
Serial.begin(115200);
pinMode(GPIO_NUM_32, INPUT_PULLUP);
pinMode(GPIO_NUM_27, OUTPUT);
FastLED.addLeds<SK6812, GPIO_NUM_27, RGB>(leds, NUM_LEDS);
esp_sleep_enable_ext0_wakeup(GPIO_NUM_32, HIGH);
initWiFi(); leds[0] = CRGB::Blue; FastLED.show();
sendLine(); leds[0] = CRGB::Black; FastLED.show();
while( digitalRead(GPIO_NUM_32) );
esp_deep_sleep_start();
}
void loop() {
}
ありがとうM5Stamp!(初めての方はこちらのライター付きが良いですね)
23/8/15追記:8月頭に電池切れと思って取り外したら、暑さでセンサ固定の両面テープが外れていただけだったみたいです。折角なので充電したので最大稼働時間は結果不明のままですが、電池変更版を12月頭から動作開始したので少なくとも8か月(開閉回数は約100回)以上でした。ちゃんとDeepSleepは機能してそうですね。ご参考まで。