※ ごめんなさい!なんでもは嘘です。できるものとできないものがあります。
※ 本記事の内容を実践する場合は自己責任でお願いします。当方は責任を負いません。
どうも、mikkameです。
今回のお題は「バケーション」ということで、「夏休みの工作」x「web」をテーマに、お手軽IoT化をやってきます!
今回、IoT化されるのはこちら
どこのご家庭にもあるON AIRサインです。
リモートワークでお家MTGを盛り上げるために買いました。
ただ、これのスイッチを入れるのが面倒だったので、ESP32を使ってIoT化しちゃいます!
700〜1000円ぐらいで手に入る、WiFiに繋がるArduino的なやつです。
ちゃんと技適もついていて、C++でプログラミングができます。
裏側にネジが4つついているので、まずこれを外します。すると、上記画像のような中身が出現します。
回路のことは良く知らないのですが、USBMicroの電源、スイッチ、LEDがくっついた回路のようです。
今回はリレーを使って、既存の基盤を制御したいと思います。
左から、B- + S1 S2 L- L+
と、3組の敗戦が確認できます。
多分、下記の通りの組み合わせです。
B=バッテリ
S=スイッチ
L=LED
電源は、ESP32から取る事にします。(元々4.5〜5Vだから3.3Vだと少し少ない)
こんな感じで配線します。
(スイッチは常にオンで、電源の付け消しで制御します。※逆でもよかった→逆の方がよかった)
そして、下記のようなプログラミングをします。
- WiFiに接続する
- ENDPOINTにHTTPアクセスする。
- レスポンスがONAIRだった場合、15ピンに出力する
- レスポンスがONAIR以外だったら、15ピンの出力をオフにする
- 5秒おきに繰り返す
ざっくり、このような内容を行っています。
#include <WiFi.h>
#include <HTTPClient.h>
const char SSID[] = "hogehoge"; // Your SSID
const char PASSWORD[] = "hogehoge"; // Your WiFi password
const char ENDPOINT[] = "hogehoge";
void setup() {
Serial.begin(115200);
pinMode(15, OUTPUT);
digitalWrite(15, HIGH);
connectWiFi();
}
void loop() {
// Reconnect
if ( WiFi.status() == WL_DISCONNECTED ) {
connectWiFi();
}
HTTPClient http;
http.begin(ENDPOINT);
int httpCode = http.GET();
Serial.print("Get");
if (httpCode == HTTP_CODE_OK) {
String body = http.getString();
Serial.print(body);
if (body == "ONAIR") {
digitalWrite(15, HIGH);
} else {
digitalWrite(15, LOW);
}
} else {
digitalWrite(15, LOW);
}
delay(5000);
}
void connectWiFi()
{
WiFi.begin(SSID, PASSWORD);
Serial.print("network connecting...");
bool odd = false;
while(WiFi.status() != WL_CONNECTED) {
Serial.print(".");
if (odd) {
digitalWrite(15, LOW);
} else {
digitalWrite(15, HIGH);
}
odd = !odd;
delay(500);
}
Serial.print(" connected. ");
Serial.println(WiFi.localIP());
}
あとはお好きな言語で、サーバーサイドのレスポンス内容をONAIRかそうでないかを変更するスクリプトをおけば完成です!
私は超雑にPHPでこのようなスクリプトを適当なレン鯖にぶちこみました。
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$status = $_GET['status'] ?? 'OFFLINE';
file_put_contents('STATUS', $status);
echo 'status updated! '.$status.' NOW <@U0212BP4QP9>';
} else {
echo file_get_contents('STATUS');
}
変更する時はslackのslash command経由でUIを提供しました。
(ご家庭用なので雑です)
USB電源で動く&簡易的なボタンで動くようなものはほとんどのものがリレーを使ってIoT化できますので、自己責任のもと、夏休みの宿題がてらチャレンジしてみてください