ホームへ

IoT試作の例 その4・宅配ボックスに荷物が来た

機能 「その3玄関に訪問者」と類似しています

  1. この装置を弊社の宅配ボックスにに設置すると、荷物が置かれたとき、どこにいてもスマホに通知が来る

システム概要

準備

  1. ネット上の、様々な事象に対する、様々なサービスを無料で行ってくれるIFTTTを利用します
  2. ここではNotificationsというサービスを使っています
  3. IFTTTに自分のIDを登録する
  4. IFTTTにサービスを申し込み、プログラムに組み込むキーを取得する、
  5. スマホ側にもIFTTTアプリをインストールしておきます
  6. このサービスを使うと、自前のレンタルサーバーを用意しなくても、いいので、誰でも手軽にIoTを始められますね

装置側

  1. 装置本体は、WiFi子機に設定し、建物内のWifi親機と通信する
  2. 宅配ボックスの
  3. 荷物台に荷物が置かれると、
  4. 板の下に仕掛けてあるタクトスイッチが押され、IFTTTサービスにデータを送る
  5. 台から荷物が持ち上げられると、受け取り完了の通知が送られる

スマホ側お知らせ画面

  1. この装置からのデータがIFTTTに送られると、スマホ側にこのように通知が来ます

主要部品

  1. Wi-Fiモジュール ESP-WROOM-02 購入元:秋月電子 購入時価格@650円
  2. タクトスイッチ 購入元:秋月電子 購入時価格@10円
  3. LED 各色 購入元:秋月電子 購入時価格@18円

システム仕様

  1. WiFiモジュール ESP8266のプログラム作成はarduino IDEを使用
    ARDUINOホームページ

    arduinoソースコード クリックで展開
                
    // ライブラリの読み込み
    #include <ESP8266WiFi.h>
    
    // 転送レート
    #define SERIAL_SPEED  115200
    
    // Wi-Fi SSID
    #define WLAN_SSID         "親機のid"
    // Wi-Fi パスワード
    #define WLAN_PASS         "親機のパスワード"
    
    // IFTTTのイベント名 のった時
    #define IFTTT_EVENT_NAME  "kago"
    
    // IFTTTのイベント名 上げたとき
    #define IFTTT_EVENT_NAME_PICKUP  "uketori"
    
    // IFTTTのホスト名
    #define IFTTT_HOST_NAME   "maker.ifttt.com"
    
    // IFTTTのシークレットキー
    #define IFTTT_KEY         "暗号キー"
    
    // ポート番号
    #define PORT_NUMBER       80
    
    // ledを接続するピン
    #define ledPin  14
    
    // swを接続するピン
    #define SW_PIN 16
    
    boolean buttonState = LOW;
    
    //籠の状態
    int kagoSts = 0;
    
    //センサーの閾値
    int kagoSikii = 300;
    
    void setup(void) {
      pinMode(ledPin, OUTPUT);
    
      pinMode(SW_PIN, INPUT);
      digitalWrite(SW_PIN, LOW); // off
    
      // パソコンとのシリアル通信のポートを開ける
      Serial.begin(SERIAL_SPEED);
    
      // Wi-Fi設定
      setupWiFi();
    }
    
    /*
      Wi-Fiを設定します
    */
    void setupWiFi() {
      Serial.print("Connecting to ");
      Serial.println(WLAN_SSID);
    
      // シリアルポートの指定
      WiFi.begin(WLAN_SSID, WLAN_PASS);
      while (WiFi.status() != WL_CONNECTED) {
        delay(3000);
        Serial.print(".");
      }
    
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
      delay(3000);
    }
    
    void loop(void) {
      delay(2000);
    
      WiFiClient client;
      const int httpPort = 80;
    
      Serial.print("connecting to ");
      Serial.println(IFTTT_HOST_NAME);
    
      // Use WiFiClient class to create TCP connections
    
      if (!client.connect(IFTTT_HOST_NAME, httpPort)) {
        Serial.println("connection failed");
        Serial.println("wait 5 sec...");
        delay(5000);
        return;
      }
    
      buttonState = digitalRead(SW_PIN);
      Serial.print(" buttonState ==> ");
      Serial.println(buttonState);
    
      // 検知したら
        if (buttonState == HIGH) {
      //if (digitalRead(SW_PIN)) {
      Serial.print(" buttonState == HIGH ");
        if (kagoSts == 0) {
          kagoSts = 1;
          Serial.println("Send Data notta");
          // IFTTTへホストへ接続
          //connectHost();
    
          // IFTTTへ送信するデータ
          char sendData[256] = "";
          sprintf(sendData, "GET http://maker.ifttt.com/trigger/%s/with/key/%s HTTP/1.1\r\nHost:maker.ifttt.com\r\nConnection: close\r\n\r\n", IFTTT_EVENT_NAME, IFTTT_KEY);
          Serial.println(sendData);
    
          // IFTTTへデータを送信
          //      client.print((const uint8_t*)sendData);
          client.print(sendData);
          for ( int i = 0 ; i < 20 ; i++) {
            digitalWrite(ledPin, HIGH);
            delay(100);
            digitalWrite(ledPin, LOW);
            delay(100);
          }
        }
      }
      //何も乗ってないときはゼロにしておく
      else {
        if (kagoSts == 1) {
          kagoSts = 0;
          Serial.println("Send Data ageta");
          // IFTTTへ送信するデータ
          char sendData[256] = "";
          sprintf(sendData, "GET http://maker.ifttt.com/trigger/%s/with/key/%s HTTP/1.1\r\nHost:maker.ifttt.com\r\nConnection: close\r\n\r\n", IFTTT_EVENT_NAME_PICKUP, IFTTT_KEY);
          Serial.println(sendData);
    
          // IFTTTへデータを送信
          client.print(sendData);
          for ( int i = 0 ; i < 3 ; i++) {
            digitalWrite(ledPin, HIGH);
            delay(500);
            digitalWrite(ledPin, LOW);
            delay(500);
          }
        }
      }
    }
    
    
                
                


  • 構造はいたって単純です。
  • 無料サービスなので、文句は言えませんが、通知が来るまで、結構タイムラグがあったりします