2021-07-24に投稿

ESP32とリレーでなんでもweb化しちゃおう!

※ ごめんなさい!なんでもはです。できるものとできないものがあります。
※ 本記事の内容を実践する場合は自己責任でお願いします。当方は責任を負いません。

どうも、mikkameです。
今回のお題は「バケーション」ということで、「夏休みの工作」x「web」をテーマに、お手軽IoT化をやってきます!

今回、IoT化されるのはこちら

image.png

どこのご家庭にもあるON AIRサインです。
リモートワークでお家MTGを盛り上げるために買いました。
ただ、これのスイッチを入れるのが面倒だったので、ESP32を使ってIoT化しちゃいます!

ESP32って?


700〜1000円ぐらいで手に入る、WiFiに繋がるArduino的なやつです。
ちゃんと技適もついていて、C++でプログラミングができます。

image.png

裏側にネジが4つついているので、まずこれを外します。すると、上記画像のような中身が出現します。
回路のことは良く知らないのですが、USBMicroの電源、スイッチ、LEDがくっついた回路のようです。

今回はリレーを使って、既存の基盤を制御したいと思います。

image.png

左から、B- + S1 S2 L- L+
と、3組の敗戦が確認できます。

多分、下記の通りの組み合わせです。
B=バッテリ
S=スイッチ
L=LED

電源は、ESP32から取る事にします。(元々4.5〜5Vだから3.3Vだと少し少ない)

image.png

こんな感じで配線します。
(スイッチは常にオンで、電源の付け消しで制御します。※逆でもよかった→逆の方がよかった)
そして、下記のようなプログラミングをします。
- 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化できますので、自己責任のもと、夏休みの宿題がてらチャレンジしてみてください


mikkame
コメント