宅配ボックス通知デバイスを作りました

宅配ボックス、便利ですよね。でも、荷物が届いても気付かなくて困ったことはありませんか?

そこで、宅配ボックスに荷物が届いた時に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 <Arduino.h>
#include <FastLED.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include "HTTPClient.h"
#include "FS.h"

const char* SSID = "your_ssid";
const char* PASS = "your_pass";

void initWiFi()
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID, PASS);
  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!(初めての方はこちらのライター付きが良いですね)

M5Stamp Pico DIY Kit

M5Stamp Pico DIY Kit

  • スイッチサイエンス
Amazon

23/8/15追記:8月頭に電池切れと思って取り外したら、暑さでセンサ固定の両面テープが外れていただけだったみたいです。折角なので充電したので最大稼働時間は結果不明のままですが、電池変更版を12月頭から動作開始したので少なくとも8か月(開閉回数は約100回)以上でした。ちゃんとDeepSleepは機能してそうですね。ご参考まで。