![見出し画像](https://assets.st-note.com/production/uploads/images/162745656/rectangle_large_type_2_32ae65090f287bd1b9a4180982f8230d.jpeg?width=1200)
【ESP32プログラム】WiFiに繋げてみよう!①ルータに繋げる方法
ESP32にてWiFiを使う方法は大きく2つあります。
1つはWiFiでルータに接続する方法で、もう1つはESP32自体がアクセスポイントになる方法です。本記事ではESP32のWiFiを使ってルータに接続する方法を紹介します。接続したルータがインターネットに繋がっていれば、そこからESP32をインターネットに参加させ、外部から制御を受けたり、ESP32で取得したセンサデータを外部から参照したり、データベースに保存したりすることができるようになります。
本記事では図1に示すようなシステムを作成します。
パソコンやスマートフォンからルータを介してESP32のLEDをON/OFFできるようにします。
パソコンやスマートフォンから指示はESP32のIPアドレスにブラウザを使ってアクセスすることで、WEBページ上のON/OFFボタンを押すことで切り替えるようにします。
![](https://assets.st-note.com/img/1732619625-jsUgEOftY2o0I6HSMxGW5ZAw.png)
図2にESP32のLED回路を示します。
GPIO23をON/OFFさせることでLEDを点灯させたり、消灯させたりします。
![](https://assets.st-note.com/img/1732201716-dtSkKsu8rvQ5a7jcE2VwYlC6.png)
プログラム
それではプログラムを紹介します。
実際のプログラムを読んでもらえれば理解できると思いますが、ポイントだけ述べておきます。
ESP32でWiFiを使うには「WiFi.h」ライブラリをインクルードします。
そして、ルータに接続するため、ルータのSSIDとパスワードをプログラム上に記載しておきます。
パソコンやスマートフォンからESP32にアクセスするためにESP32のIPアドレスを取得する必要がありますので、シリアルモニタにIPアドレスを表示させるプログラムも作成します。
また、パソコンやスマートフォンからアクセスするWEBページのHTMLもプログラム上に作っておく必要があります。
#include <WiFi.h>
// WiFiの設定
const char* ssid = "WiFiのSSID"; // 各自のルータのSSIDを記入
const char* password = "WiFiのパスワード"; // 各自のルータのパスワードを記入
// サーバーの設定
WiFiServer server(80);
String header; // HTTPリクエストのヘッダー
// LEDピンの設定
const int ledPin = 23;
bool ledState = LOW;
void setup() {
// シリアルモニタの初期化
Serial.begin(115200);
// LEDピンを出力モードに設定
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
// WiFi接続
Serial.println("WiFiに接続中...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nWiFiに接続完了!");
Serial.println("IPアドレス: ");
Serial.println(WiFi.localIP());
// サーバーを開始
server.begin();
}
void loop() {
WiFiClient client = server.available(); // クライアント接続の確認
if (client) { // クライアントが接続した場合
Serial.println("クライアントが接続しました");
String currentLine = ""; // 現在の受信行を保存
while (client.connected()) {
if (client.available()) { // データが利用可能か確認
char c = client.read();
header += c;
Serial.write(c);
// 行が終わった場合
if (c == '\n') {
// HTTPリクエストの終了を確認
if (currentLine.length() == 0) {
// リクエストに応じてLEDを制御
if (header.indexOf("GET /LED_ON") >= 0) {
Serial.println("LED ON");
ledState = HIGH;
digitalWrite(ledPin, ledState);
} else if (header.indexOf("GET /LED_OFF") >= 0) {
Serial.println("LED OFF");
ledState = LOW;
digitalWrite(ledPin, ledState);
}
// HTTPレスポンスを送信
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// HTMLを生成
client.println("<!DOCTYPE html><html>");
client.println("<head><title>ESP32 LED Control</title></head>");
client.println("<body>");
client.println("<h1>ESP32 LED Control</h1>");
client.println("<p>LED is currently " + String(ledState ? "ON" : "OFF") + "</p>");
client.println("<p><a href=\"/LED_ON\">Turn ON</a></p>");
client.println("<p><a href=\"/LED_OFF\">Turn OFF</a></p>");
client.println("</body></html>");
// HTTPリクエストの処理終了
break;
} else {
currentLine = ""; // 次の行に進む
}
} else if (c != '\r') {
currentLine += c; // 受信した行を追加
}
}
}
// クライアントを切断
client.stop();
Serial.println("クライアントを切断しました");
// ヘッダーのリセット
header = "";
}
}
実行してみよう
それではプログラムをコンパイルしてESP32 へ書き込みます。
そして、シリアルモニタを起動するとESP32のIPアドレスが表示されます。
例えば、シリアルモニタには「192.168.0.xxx」というIPアドレスが表示されます。
このIPアドレスをパソコン等に入っているブラウザでアドレスを
「http://192.168.0.xxx/」とすると以下のWEBページが表示されます。
![](https://assets.st-note.com/img/1732620871-vRqmPtJWln19XHZua5DOsCgp.png)
WEBページにはLEDの状態、すなわち点灯もしくは消灯状態が出ています。
その状態表示の下には、「Turn ON」と「Turn OFF」があり、その部分を押すことでLEDを点灯したり、消灯したりすることができます。
購入部品
最新情報は「電子工作お買い物一覧」の記事を参照ください。
リンク切対応や代替部品の紹介もしています。