ESP-WROOM-02による温湿度測定（Wi-Fi機能の使用）

## はじめに
今回は、ESPr® one（Arduino Uno同一形状 ESP-WROOM-02開発ボード、以降ESPと呼ぶ）というマイコンボードでWi-Fi機能を使った温湿度計測を行いました。前回

https://qiita.com/_Moony/items/42d0cd9e1e794de15341

と同様、温湿度センサDHT11を用いて、Wi-Fi機能のSTAおよびAPモードを使った温湿度の測定を行いました。

## ESP02によるWi-Fi機能を使った温湿度計測
温湿度センサ（DHT11）をESPに次のように接続しました。
- センサのVDDをESPの5Vへ接続
- センサのGNDをESPのGNDへ接続
- センサのSIGをESPの14ピンへ接続

センサ接続の様子
![20240121_150313.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729073/a78b8e43-aa77-bad2-0715-f3f194b09386.jpeg)

作成したスケッチです。
### STAモード
```
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>

const char *ssid = "Buffalo-G-1028"; //Wi-FiルータのSSID
const char *password = "*********"; //Wi-FiルータのPASSWORD

const int PIN_DHT = 14;
DHT dht(PIN_DHT,DHT11);
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(100);
  WiFi.mode(WIFI_STA);
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to ");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    if (WiFi.status() == WL_CONNECT_FAILED) {
      Serial.println("Can't connect");
    }
  }
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
  dht.begin();
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    String currentLine = "";
    Serial.println("New Client.");
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html; charset=utf-8;");
            client.println();
            client.println("<!DOCTYPE HTML>");
            client.println("<html>");
            client.println("<head><meta http-equiv=\"refresh\" content=\"5\"></head><body><h1>ESP8266とDHT11による温度・湿度の測定</h1><h2>温度 : ");
            client.println(dht.readTemperature(), 1);
            client.println("℃<br>湿度 : ");
            client.println(dht.readHumidity(), 1);
            client.println("%RH</h2></body></html>");
            client.println();
            Serial.println("温度 湿度");
            Serial.println(dht.readTemperature(), 1);
            Serial.println(dht.readHumidity(), 1);
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }               
    }
    client.stop();
    Serial.println("Client Disconnected.");
  }
}
```
### APモード
```
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>

const char *ssid = "ESP8266ap";  //任意の名前
const char *password = "12345678";  //任意のパスワード
const IPAddress ip(192,168,30,3);
const IPAddress subnet(255,255,255,0);

const int PIN_DHT = 14;
DHT dht(PIN_DHT,DHT11);
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  dht.begin();
  WiFi.softAP(ssid, password);
  delay(100);
  WiFi.softAPConfig(ip,ip,subnet);
  IPAddress myIP = WiFi.softAPIP();
  server.begin();

  Serial.print("SSID: ");
  Serial.println(ssid);
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  Serial.println("Server start!");
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    String currentLine = "";
    Serial.println("New Client.");
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html; charset=utf-8;");
            client.println();
            client.println("<!DOCTYPE HTML>");
            client.println("<html>");
            client.println("<head><meta http-equiv=\"refresh\" content=\"5\"></head><body><h1>ESP8266とDHT11による温度・湿度の測定</h1><h2>温度 : ");
            client.println(dht.readTemperature(), 1);
            client.println("℃<br>湿度 : ");
            client.println(dht.readHumidity(), 1);
            client.println("%RH</h2></body></html>");
            client.println();
            Serial.println("温度 湿度");
            Serial.println(dht.readTemperature(), 1);
            Serial.println(dht.readHumidity(), 1);
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }               
    }
    client.stop();
    Serial.println("Client Disconnected.");
  }
}
```

## 開発環境
- マイコンボード：ESPr® one

https://www.switch-science.com/products/2620?_pos=27&_sid=3f3373f36&_ss=r

- マイコンボードの情報：esp8266 by ESP8266 Community ver. 2.0.0
- 温湿度センサ：DHT11
- Ardiono IDE：ver. 1.8.10　
- OS：Windows11

## 終わりに
ESPr® oneは最新のArduino IDEやボード情報では動作しなかったので、ネット情報から検討して、上記のバージョンを使用しました。
私のパソコンには、バージョンが異なる複数のArduino IDEが入っていますが、これらのインストールにはインストーラは使わずにzipファイルを解凍しております。zipファイルを解凍する方がアンインストールが簡単なので個人的には気に入っています。
なお、上記のスケッチは私の開発環境で動作を確認しております。
何かのご参考になれば幸いです。