家の外からスマホで遠隔操作、IoT作ります! ESP-WROOM02で遠隔でセンサー取得!
こんばんわ!
今回はなんと、完全にIoTな物を作ってみたいと思います!
・スマートフォンやPCから、遠隔でセンサーの値を取得できるようにしてみたいと思います!
今回はローカル環境ではなくいきなりサーバーを使って作ってみます!
サーバーやらネットワークの知識が絡んできますので、難しくはなってしまいますが、
なるべくわかりやすいように、説明をしていきたいと思いますので、どうぞよろしくお願いします^^
・ 詳細としては、スマホなどから命令をphpで送り、受け取った値をテキストファイル に保存し
ESP-WROOM02 でその命令を受け取ります!
受け取ったらセンサーの値を取得しESP-WROOM02から値をphpに送り、
受け取った値をテキストファイル に保存してブラウザに表示させるという流れになります!
・簡単なイメージ⇩
「スマホ(URLで送ります) → webサーバー(PHPで処理) → ESP-WROOM02 →
webサーバー(PHPで処理) → ブラウザーに表示しスマホなので確認」
作業の大まかな流れ↓
1.回路準備
2.開発環境の準備
3.サーバーの準備
4プログラミング・動作確認
5.まとめ
です!
ちなみに、1,2までは前前回ご紹介した、「センサーの値をFTPサーバーにCSVで送る(ESP-WROOM02)」
と全く同じです!
では、早速解説に入りたいと思いますがまず、いろいろ準備するものがあります(´;ω;`)
①「回路の準備」
・低損失三端子レギュレーター 3.3V1A TA48033S
・電解コンデンサ 47μF35V(秋月電子で購入すると、3端子レギュレータに付属されています。)
・セラミックコンデンサ 0.1μF(秋月電子で購入すると、3端子レギュレータに付属されています。)
・LED(起動などを確認するためのメッセージ用に使う。なので任意)
・タクトスイッチ(2個)(任意ですがあると便利です)
・ミニブレットボード(あると便利)
(ブレットボードで回路を組むとき、見栄え良く綺麗に繫げられますのであると便利)
※任意(楽したい方向け)
ESP-WROOM-02開発ボードを使うとすぐに開発ができるよう回路が組まれているため、上記の「ESP-WROOM02」「超小型USBシリアル変換モジュール」「3端子レギュレータ」「電解コンデンサ 47μF35V」「セラミックコンデンサ 0.1μF」「タクトスイッチ」は不要になります!
・次に回路の組み立てに入ります。
組み立てに関してはESP-WROOM02の回路は再び下記サイトさんの
「6.各部品の接続」を参考にしていただければと思います。(とてもわかりやすいです)
WROOM 単体に Arduino スケッチで Wi-Fi ストリーミング
・ESP‐WROOM02本体の接続箇所
pinナンバー | 状態 |
---|---|
GPIO 15(IO15) | LOW( ー ) |
GPIO 2(IO2) | HIGH( + ) |
GPIO 0(IO0) | LOW |
EN | HIGH |
※GPIO 0(IO0)をLOWの状態で起動させるときのみ書き込みモード、LOWじゃなければ実行モードになります。
なのでGPIO 0とGNDにダクトスイッチをかましとくと後が楽です。
※RST(リセット)もLOWにすることでプログラムのリセットが行えますので
RSTとGNDにダクトスイッチをかましておくと後が楽です。
・完成するとこんな感じになると思います!
※画像をクリックすれば拡大できます。
※ESP-WROOM-02開発ボードをご使用の方はここからスタート。
②「開発環境の準備」
・まずはArduino IEDでESP-WROOM02を使えるようにします↓
Arduinoファイルの中にあります「libraries」の中を開いて頂き、足りないライブラリーを入れていきます!
※もしかしたらデフォルトで入っているかもしれません。
・esp8266FTPServer-master (これはいらないかも)
・WiFi
③「サーバーの準備」
・次はwebサーバーの準備です!
今回使用しているサーバーはAmazonサーバーです^^
しかし、サーバーと聞くだけで私は嫌になってしまうほど苦手分野です(´・ω・`)ショボーン
ここは知識不足の為説明できません(´;ω;`)
お手数ですがググってくださいm(__)m
④「プログラミング」
・サーバーの準備が出来ましたら、命令を出すURLと値を取得するURLを準備します!
そのためには、下記のコードをphp形式でまず保存してください。
※php形式のファイルを作るには特に専用ソフトは必要なく、メモ帳で作れます!
但し、プログラミングの雰囲気を味わうためにはやはり
専用ソフトを使ったほうがいいと思います^^
・次に「get-test」というフォルダーを作ってその中に、
「index.php」ファイル名でプログラムを作ってください。
「index.php」
1 2 3 4 5 6 7 |
<?php $fp = fopen("../test.txt", "r"); while ($line = fgets($fp)) { print($line); } fclose($fp); ?> |
メモ帳でも作れますが、プログラミングの雰囲気は出ません(笑)
・「set-test」というフォルダーを作ってその中に、
「index.php」ファイル名でプログラムを作ってください。
「index.php」
1 2 3 4 5 6 7 8 9 10 |
<?php header("Content-type: text/plain; charset=UTF-8"); if (isset($_GET['set_val'])) { $val = $_GET['set_val'] . ","; $fp = fopen("../test.txt", "w+"); fwrite($fp, $val); fclose($fp); } ?> |
フォルダーを用意し、上記のコードをそれぞれフォルダーの中に入れましょう。
・これらのフォルダーをwebサーバーに保存します。
保存の仕方はいろいろありますが定番のFFFTPというソフトを使うことをお勧めします^^
・FTPサーバーと連携させる手順は、こちらも
他のサイトさんを参考にしていただいたほうが
分かりやすいと思いますのでご参考までに↓
・フォルダーをFFFTPでアップロードするとこんな感じになるかと思います↓
フォルダーの中身⇩
・次にURLの準備です!
・まずは命令や値をを出すURLです!
http:// サーバー(ホスト)名 /set-test/?set_val=1
※set_val=の次に入れた文字が送られるようになります。
ではブラウザーで開いてみましょう!
すると真っ白! こうなれば成功です!
・⇩次は値を取得するURLです。
http:// サーバー(ホスト)名 /get-test
ブラウザーで開いてみると「1,」と表示!
・これであとはESP-WROOM02本体でこのURLを取得し、1だったらセンサーの値を送る、
みたいなプログラムを作れば完成ですね!
・では、ここからはいよいよクライマックス、ESP-WROOM02のコードを書いていきます!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <EEPROM.h> #define SSID "SSID" // 無線LANアクセスポイントのSSID #define PASS "PSS" // パスワード const char* HOST = "サーバー名"; //サーバー名(ホスト名) const int HTTP_PORT = 80; ESP8266WebServer server(80); //サーバーから取得した命令を格納する String line; //メッセージ用LED const int messageLed = 12; /** 初期化 */ void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); // 無線LANをSTAモードに設定 WiFi.begin(SSID, PASS); // 無線LANアクセスポイントへ接続 while (WiFi.status() != WL_CONNECTED) { // 接続に成功するまで待つ Serial.print("."); delay(500); // 待ち時間処理 } server.begin(); // サーバを起動する //メッセージ用LED pinMode(messageLed, OUTPUT); } void loop() { //メッセージ用LED 0.5秒点灯 digitalWrite(messageLed, HIGH); delay(500); digitalWrite(messageLed, LOW); //命令をサーバから取得 phpGet(); //余分な文字(改行や,を除きます)。 String subLine = line.substring(1, 2); //命令が1だったらセンサーの値を送る。 if (subLine.equals("1")) { phpSetSensor(); } //10秒毎に再度取得 delay(10000); } /** サーバーから命令を受け取る */ void phpGet() { WiFiClient client; //サーバーに接続できたか判別 if (!client.connect(HOST, HTTP_PORT)) { //エラー処理 Serial.println("connection failed erra"); } //フォルダーのディレクトリーを指定 String getUrl = "/get-test/"; Serial.print("Requesting get"); client.print(String("GET ") + getUrl + " HTTP/1.1\r\n" + "Host: " + HOST + "\r\n" + "Connection: close\r\n\r\n"); delay(100); while (client.available()) { line = client.readStringUntil('\r'); Serial.println(line); delay(100); } } /** センサーの値をサーバーに送る */ void phpSetSensor() { WiFiClient client; //サーバーに接続できたか判別 if (!client.connect(HOST, HTTP_PORT)) { Serial.println("connection failed erra"); } //ここに取得したセンサーの値を入れる。(今回はセンサーを使っていないのでとりあえずSETと入れておきます。) String sensor = "SET"; //フォルダーのディレクトリーを指定 String setUrl = "/set-test/?set_val=" + sensor; client.print(String("GET ") + setUrl + " HTTP/1.1\r\n" + "Host: " + HOST + "\r\n" + "Connection: close\r\n\r\n"); delay(100); while (client.available()) { line = client.readStringUntil('\r'); Serial.print(line); delay(100); } } |
・ビルドが完了し、起動して上手くいけば先ほどのgetURL( http:// サーバー(ホスト)名 /get-test )
で送られた値が上書きされています!
こんな感じになります⇩
5.「まとめ」
・これで、スマホから遠隔でセンサーの値を取得出来る様になりました!
例えば、温度センサーと組み合わせれば外から部屋の温度を監視出来たりできますね!
但し、セキュリティー面などは考慮していないないのでご注意を!
ご不明点等ございましたらお気軽にコメント下さい^^
以上、ご訪問ありがとうございました^^
はじめまして。
IoTとして遠隔操作する物の作成、興味を大変そそられました。
1点質問なのですが、ESP32-WROOM-32として置き換えをする場合、どのようにプログラムの変更をすればよろしいでしょうか?
ヘッダーファイルを探してみたりと色々試しましたが解決しなかったので、ご教授願いたいです!
よろしくお願いします。
はじめまして、ご質問ありがとうございます。
ESP32で使いたい場合は下記のように書き換えてみてください⇩
———————————–
//#include
//#include
//#include
⇩
#include
—————————-
//ESP8266WebServer server(80);
⇩
WiFiServer server(80);
————————————
とりあえずこれでビルドは通るはずです。
以降、ちゃんと取得とかできるかは試してないのでわかりませんので、一度これで試してみてください(;^ω^)
似たような記事があるのでこちらもご参考にどうぞ⇩
https://toccho.net/2019/12/11/ledcube-remote-esp-local/
早速のご返答、ありがとうございます。
只今試してみましたが、ビルドは可能ですがSETがget-testにアップロードされませんでした。
wifiの接続、LEDの点灯は問題ありませんが、更新されませんでした…
大人しく02を購入してみようと思います…
ありがとうございました!
左様でございましたか(;^ω^)
お役に立てなくて申し訳ないです。
時間ができたらこちらでも試してみますね‼