#はじめに
こんにちは!RHEMS技研の荒木です!
初投稿です
文章がつたない感じになってもご容赦ください!
今回は掃除をしてくださる方のためにトイレをIoT化しました
というのも、立っておし○こをすると便器外にたくさん飛び散るわけなんです
そんな自分のお○っこを掃除するのも嫌なのに他の人に掃除させるなんてありえない!
ということで、便器にセンサーを取り付けて立っておしっ○をする人を特定するシステムをつくりました
後編はこちら
#くわしく
まず今回使用したものは”ESP-WROOM-02”です
ESP-WROOM-02ってなんぞや、という人はこちらをごらんください
簡単に説明するとArduinoをWi-Fiに接続できるように拡張できるパーツです
ということで今回書いたコードはこちらになります
#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_PIN 4
#define LED_PIN 5
#define THRESHOLD 2000
// WiFi Secure Clientを作る
WiFiClientSecure client;
/*
HTTP Requestする関数 http_request
引数:
http_method 呼び出すHTTPメソッド(GET,POST,PUT,DELETE等)
uri リクエストURI(クエリパラメータがある場合はここに含める)
body リクエストボディ(JSONまたは'A=1&B=1'形式のPOSTデータ)
戻り値
なし
*/
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;
}
}
// レスポンスボディを1文字づつバッファへ格納
char c;
while (client.available()) {
c = client.read();
buff += c;
}
Serial.println(buff);
client.stop();
}
// 起動時に一度だけ呼ばれるセットアップ関数
void setup(void) {
// ピンのモードを決定
pinMode(SENSOR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
// シリアル設定
Serial.begin(115200);
// WiFi接続設定を行う
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
// WiFi接続を開始する
Serial.print("WiFi Connection");
while ( WiFi.status() != WL_CONNECTED ) {
delay(500);
Serial.print(".");
}
Serial.println(WiFi.localIP());
// 電源投入時は"ON"を送る
http_request("POST", "URI", "ON");
}
// 変数を定義
int sens;
int sent = 0;
int i = 0;
// メインループ
void loop() {
// センサー読み取り
sens = digitalRead(SENSOR_PIN);
if (sens == LOW) {
// 便座が上がっている
if (sent == 0) {
// まだ未送信ならば・・・
sent = 1; // UP送信済みとする
// LEDが消える
digitalWrite(LED_PIN, LOW);
// 便座が上がって2秒後にAPIにUPを通知する
do {
sens = digitalRead(SENSOR_PIN);
i++;
if (i > THRESHOLD / 200) {
http_request("POST", "URI", "UP");
break;
}
delay(10);
} while (sens == LOW);
}
} else {
// 便座が下がっている
if (sent == 1) {
// UPを送信済ならば
sent = 0; // DOWN送信済みとする
// LEDが光って知らせる
digitalWrite(LED_PIN, HIGH);
// APIにDOWNを通知する
http_request("POST", "URI", "DOWN");
}
}
// ディレイ
delay(100);
}
とコードはこんな感じです
次は基盤の方です
画像では開発ボード用いていますが、開発ボードでなくとも同じ挙動をします
まずおもてです
今回使用したセンサーはリードセンサーです
便座上がる→4ピンで検知する→2秒経つ→POSTする→便座下がる→POSTする
おおよそこんな感じのプロセス踏んでいます
次はうら・・・といきたいところですが、とても見せられるような配線じゃないので図で表します
図ではESP-WROOM-02ではなくArduinoを用いていますが、使っているピンは変わらないので脳内変換して置き換えてください
緑コードがセンサー部分、赤コードはLED部分になります
センサーの抵抗は10kぐらいが望ましいと思います
詳しくは”プルアップ”で検索してください
#さいごに
今回使用した回路はそんなに難しくないのでIoT初心者でもとっつきやすいのかなと思っています
興味を持った方はぜひチャレンジしてみてください