目次
ESP32 Access Point and Web Server!
前回、ESP32でLチカをやってみましたが
ESP32はそれより、はるかに色々できます!
Wifiのモジュールが搭載していますので
Wifiのクライアントになることがもちろんですが
ESP32自身がWifiのアクセスポイントにもなるのです!
さらに!
さらに、ESP32の中にウェブサーバーを立てることもできます!
今回の記事では、その方法を一挙ご紹介したいと思います!
いきなりソースコード
「Shut up, and show me code」はい、ソースコードはこれです!
これを実行すれば、OKです!笑
#include <WiFi.h> #include <ESPmDNS.h> #include <WiFiClient.h> const char *ssid = "ESP32ap"; const char *password = "12345678"; /* TCP server at port 80 will respond to HTTP requests */ WiFiServer server(80); /////////////////////////// void setup() { Serial.begin(115200); Serial.println(); Serial.print("Configuring access point..."); /* You can remove the password parameter if you want the AP to be open. */ //アクセスポイントを起動する WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); // //サーバーセットアップ // /* Set up mDNS */ if (!MDNS.begin("esp32")) { Serial.println("Error setting up MDNS responder!"); while(1) { delay(1000); } } Serial.println("mDNS responder started"); /* Start Web Server server */ server.begin(); Serial.println("Web server started"); /* Add HTTP service to MDNS-SD */ MDNS.addService("http", "tcp", 80); } void loop() { /* Check if a client has connected */ WiFiClient client = server.available(); if (!client) { return; } Serial.println(""); Serial.println("New client"); if (client) { Serial.println("new client"); /* check client is connected */ while (client.connected()) { /* client send request? */ if (client.available()) { /* request end with '\r' -> this is HTTP protocol format */ String req = client.readStringUntil('\r'); /* First line of HTTP request is "GET / HTTP/1.1" here "GET /" is a request to get the first page at root "/" "HTTP/1.1" is HTTP version 1.1 */ /* now we parse the request to see which page the client want */ int addr_start = req.indexOf(' '); int addr_end = req.indexOf(' ', addr_start + 1); if (addr_start == -1 || addr_end == -1) { Serial.print("Invalid request: "); Serial.println(req); return; } req = req.substring(addr_start + 1, addr_end); Serial.print("Request: "); Serial.println(req); client.flush(); String s; /* if request is "/" then client request the first page at root "/" -> we process this by return "Hello world"*/ if (req == "/") { IPAddress ip = WiFi.localIP(); String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]); s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>Hello from ESP32 at "; s += ipStr; s += "</html>\r\n\r\n"; Serial.println("Sending 200"); } else { /* if we can not find the page that client request then we return 404 File not found */ s = "HTTP/1.1 404 Not Found\r\n\r\n"; Serial.println("Sending 404"); } /* send response back to client and then close connect since HTTP do not keep connection*/ client.print(s); client.stop(); } } } Serial.println("Done with client"); }
手順
①上のソースコードをArduino IDEにコピーしてファイル名をつけて保存しましょう。私はesp32apにしました。皆さんは自分の好きな名前でどうぞ。
②それから、ボードへ書き込んでください。
③パソコンから、Wifiの接続候補リストを出してみてください。 プログラムの中に設定されているSSID:ESP32apが出ているはずです。
④ESP32apを選んで、パスワード「12345678」を入力して、Wifiに接続します!
⑤接続が確立しましたら、ブラウザーで「https://192.168.4.1/」を開いてみてください。
上の画面が出れば成功です!
おめでとうございます!
こな小さいChipにWifiアクセスポイントができて、ウェブサーバーも動いて、原理が分かっていても、ちょっと感動です!
いかがですか?
試してみませんか?
展望
これの発展系としては、次は、ウェブをREST APIを用意できれば
WebページからESP32に接続したサーボを制御したり、指示を送ったり
あるいは、ESP32に接続しているセンサー類からデータを取得して
ウェブに表示したりすることが普通にできるはずですね。
色々、楽しみです。
[amazonjs asin=”B0718T232Z” locale=”JP” title=”HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード”]
質問等があれば、私のTwitterでもDMしていただければ、可能な限りご回答を致します。
よろしくお願いします。
#soracom air #IoT #RaspberryPi #AK-020 #usb #simカード https://t.co/dMaj7bqpkO
— kawashimaken (@kawashimaken1) 2018年3月16日