LoginSignup
14
8

More than 3 years have passed since last update.

郵便ポストをIoT化したよって話

Last updated at Posted at 2018-08-11

はじめに

みなさんIoTライフ楽しんでますか?
RHEMS技研の荒木です

さて今回はオフィスの郵便受けをArduino(ESP-WROOM-02)を用いてIoT化しました

f536e509930a1883e0190e54e5ce56f6_s.jpg
※画像はイメージです

なぜIoT化するの?

オフィスが2階だし下の階にある郵便受けに郵便物が投函されてもされてもわからないし、確認に行くのも面倒だなぁ
そうだ!
それならポストをIoT化してしまおう!

というのが今回の趣旨になります

郵便物が投函されたとき・従業員が郵便物を回収したときにそれぞれSlackに通知が流れるようなっているので郵便物が届いた瞬間回収しにいけるわけです!
夢があるでしょう?

ありますよね?

郵便受けを確認しに行くことがなくなるとサボりにくくなるけどIoT化します

くわしく

仕組みとしてはポストの開閉を感知してAPIエンドポイントに投げる、といった簡単なものになっています
コードは前回(前編)のを郵便受けVer.に改良しただけになります
また、投げたあとの処理も前回(後編)のを郵便受け用に少し変えただけになります

今回書いたコードはこんなかんじです

#include<ESP8266WiFi.h>
#include <WiFiClientSecure.h>
// WiFiアクセスポイントの定数
#define WIFI_SSID     "SSID"
#define WIFI_PASSWD   "PASSWORD"
// APIアクセスに必要な定数
#define API_HOST      "API-HOST"
#define HTTPS_PORT    443
// ピンアサイン
#define SENSOR_PIN1    12
#define SENSOR_PIN2    4

// WiFi Secure Clientを作る
WiFiClientSecure client;

void http_request(String http_method, String uri, String body) {
  // レスポンス格納バッファ
  String buff = "";
  // HTTPSコネクションを開始する
  if (!client.connect(API_HOST, HTTPS_PORT)) {
    // Serial.println("Connection failed");
  }
  // リクエストを組み立て送信する
  client.print(http_method + " " + uri + " HTTP/1.1\r\n" +
               "Host: " + API_HOST + "\r\n" +
               "User-Agent: BuildFailureDetectorESP8266\r\n" +
               "Connection: close\r\n");
  if (body.length() > 0) {
    // bodyが存在するなら、Content-Lengthと共に送信する
    client.print("Content-Length: ");
    client.println(body.length());
    client.println();
    client.println(body);
  } else {
    // bodyが無い場合は、空行を送信する
    client.println();
  }
  // レスポンスヘッダを読み飛ばす
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      // 空行だけならヘッダは終わっている
      break;
    } else {
      // Serial.println(line);
    }
  }
  // レスポンスボディを1文字づつバッファへ格納
  char c;
  while (client.available()) {
    c = client.read();
    buff += c;
  }
  Serial.println(buff);
  client.stop();
}

// 起動時に一度だけ呼ばれるセットアップ関数
void setup(void) {
  // ピンのモードを決定
  pinMode(SENSOR_PIN1, INPUT);
  pinMode(SENSOR_PIN2, INPUT);

  // WiFi接続設定を行う
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWD);

  // WiFi接続を開始する
  while ( WiFi.status() != WL_CONNECTED ) {
    delay(500);
  }
}

// 変数を定義
int sens1;
int sens2;
int sent1 = 0;
int sent2 = 0;

// メインループ
void loop() {

  // センサー読み取り
  sens1 = digitalRead(SENSOR_PIN1);
  sens2 = digitalRead(SENSOR_PIN2);

  // 郵便受けになにか投函されて、まだ未送信だったら
  if ((sens1 == HIGH) && (sent1 == 0)) {
    sent1 = 1; // FULL送信済みとする
    // APIにFULLを通知する
    http_request("POST", "URI", "FULL");
  }
  // 未送信に戻す(sens1)
  if (sens1 == "LOW") sent1 = 0;

  // 従業員が郵便受けを開け中身を取り出しさらに未送信だったら
  if ((sens2 == HIGH) && (sent2 == 0)) {
    sent2 = 1; // EMPTY送信済みとする
    // APIにEMPTYを通知する
    http_request("POST", "URI", "EMPTY");
  }
  // 未送信に戻す(sens2)
  if (sens2 == LOW) sent2 = 0;
  delay(100);
}

とこんなかんじです

郵便物が投函されるとsens1が感知して"FULL"が送信され、従業員が郵便物を回収すると"EMPTY"が送信されるといった処理になります

次は回路です

表はこんなかんじ
HYQV5cibR%+RoczxJu%47Q.jpg

下側についているのがsens1、上にひょろひょろっと出ているのがsens2です
どちらもリードセンサーを用いています

電源はマイクロUSBコネクタを使用してモバイルバッテリーから供給しています
ですが、供給電圧が5VなのでESP-WROOM-02が正常に動いてくれません
なので5V→3.3Vに変換する必要があります
そこで、回路に3端子レギュレータを組み込みます

IMG_1657.JPG

電源→変換時の配線はこのようになっています

USBシリアル 3端子レギュレータ
5V IN
GND GND
3端子レギュレータ ESP02
OUT 3.3V
GND GND

GNDはすべて共用になります
実際に回路を組むときは一箇所に集めるとよいでしょう
あとはプログラム所定のピンを使います

図にするとこんな感じ

fullsizeoutput_1c.jpeg

ESP-WROOM-02がなかったのでESP8266を用いてそれっぽくしています
Arduinoに亀の子してそれっぽくしているので許して下さい
ピンは変わらず同じなので問題はないと思います

郵便受けに取り付けるとこんな感じです

sI5n7yD0Qy63b7e7tBBkHg.jpg

hFGSZAvBQYasMfBy6+%3%g.jpg

が、ここで大きな問題が

なんとWi-Fiが郵便受けからオフィスまで届かないのです!!

1Fから2Fまでの距離しかないのになんで届かないの??
そんな怒りと悲しみを抑えながら執筆中です
そりゃまあ金属の箱にいれるのだから中から電波が出ないのは当たり前なんですけどね
残念ながら今回は完成にいたりませんでした(泣)
(まだサボりに行ける!)
記事執筆時ではアンテナの改良案を模索中です

さいごに

いかがでしたでしょうか?
なにやってんだコイツって思っていただけたなら幸いです
Wi-Fiが届かなかったということで、次回は送信方法の改良をします!!
次回の投稿は未定なので更新されるまでしばしお待ち下さい
それではよきIoTライフを!!!!

https://qiita.com/hina03/items/99df273fbe932dd04941
Ver2が開発されたので読んでください
僕自身が改良したかったのですが幸せなことに忙しくなったので新しくできた部下(?)にやってもらいました
改良案自体は提示したのですが、なんとか本人のみで実装までやってくれました
結局WiFiは使わなかったのですがZigBeeを用いたので簡単に真似できる物となっていますのでぜひお試しください!

14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8