2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32+DHT22でWiFi経由の温湿度取得APIを作る(Arduino)

2
Last updated at Posted at 2026-04-12

ESP32+DHT22でWiFi経由の温湿度取得APIを作る(Arduino)

本記事では、ESP32 Devkitを使用して
WiFi経由で温湿度を取得する簡単なIoTシステムを作成する方法を紹介します。
ESP32はWiFiが標準搭載で安く、Arduino環境で簡単に開発でき、使いやすいと思います。
※本記事はローカルネットワーク内での利用を想定しています

1.この記事でできること

ESP32 DevKitと温湿度センサーを使用し、
WiFi経由で温湿度を取得できる簡単なAPIを作成します。

最終的には以下のようにHTTPアクセスすると
温湿度データがJSON形式で取得できます。

image.png

2.使用機材(購入品)

・ESP32
・ブレッドボード
・温湿度センサー(DHT22)

このほかに抵抗やジャンパワイヤを使用しました。

3.開発環境

ESP32にプログラムを書き込むためには
Arduino IDE のインストールと環境構築が必要です。

この部分については既に多くの解説記事があるため,以下の記事を参考にしました。

参考記事
マイコンESP32にArduinoIDEでプログラムを書き込んで実行するまでの手順

上記記事の手順を進めると、ESP32へプログラムを書き込める状態になります。

4.システム構成

DHT22 → ESP32 → WiFi → WebAPI → PC

といった形で,WiFi経由で温湿度の確認ができるようにしていきます。

5.配線

DHT22は以下のように接続します。

  • VCC → 3.3V
  • GND → GND
  • DATA → GPIO4

以下のような感じです
(使用しているPINの番号が違うのは、PIN配置が実物と異なるためです)
image.png

6.プログラム

実際にESP32に書き込むプログラム

#include <WiFi.h>
#include "DHT.h"

#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "○○○";
const char* password = "△△△";

// 固定IP
IPAddress local_IP(192,168,0,50);
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);
IPAddress dns(8,8,8,8);

WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  dht.begin();

  if (!WiFi.config(local_IP, gateway, subnet, dns)) {
    Serial.println("設定失敗");
  }

  WiFi.begin(ssid, password);

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("Connected IP: ");
  Serial.println(WiFi.localIP());

  server.begin();
}

void loop() {

  WiFiClient client = server.available();
  if (!client) return;

  Serial.println("Client connected");

  String request = client.readStringUntil('\r');
  client.flush();

  Serial.println(request);

  if (request.indexOf("GET /sensor") >= 0) {

    float humidity = dht.readHumidity();
    float temperature = dht.readTemperature();

    if (isnan(humidity) || isnan(temperature)) {
      humidity = 0;
      temperature = 0;
    }

    String json = "{";
    json += "\"temperature\":";
    json += String(temperature,1);
    json += ",";
    json += "\"humidity\":";
    json += String(humidity,1);
    json += "}";

    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: application/json");
    client.println("Connection: close");
    client.println();
    client.println(json);
  }
  else {
    client.println("HTTP/1.1 404 Not Found");
    client.println();
  }

  delay(1);
  client.stop();

  Serial.println("Client disconnected");
}

6-1. WiFi接続

WiFi.begin(ssid, password);

ここでWiFiに接続します。
ルーターの名称と,パスワードです。

6-2. Webサーバー起動

WiFiServer server(80);

ポート80でHTTPサーバーを起動しています。

6-3. センサー取得

float humidity = dht.readHumidity();
float temperature = dht.readTemperature();

センサーから温湿度を取得します。

6-4. JSONレスポンス

{
  "temperature": 25.3,
  "humidity": 60.1
}

この形式でクライアントへ返しています。

6-5.使用するピンについて

#define DHTPIN 4

ESP32でデータを取るためにDHT22とつないで使用するピンは,
電源を取るピンと,GNDのピンのある側面のピンから選択するとよい.
(必須ではありません)

7.動作確認

実際にESP32にプログラムを書き込んだ後、ブラウザで以下にアクセスします。

そうすると、以下のように温度と湿度が確認できます。

image.png

8.躓いた点

IPアドレスについて

IPアドレスは、192,168,0,50としていますが、これは通信する際に、通信元が192.168.0.XXのような場合でのみ通信できます。
そのため、動作確認できないときは,ここが違うかもしれません。
(サブネットマスクを変えたらその限りではないですが,今回は割愛します)
IPアドレスはコマンドプロンプトを開いてipconfigで確認できます!
いま,PCのIPアドレスを確認したところ192.168.0.247だったので通信できます。
image.png

やっておくと便利な点

ESP32の使用するピンは可能であれば片側のみで済ませる。
片側で済ませると,ブレッドボードの大きさが小さくても配線できる。
(今回のリンクで紹介しているブレッドボード一ではESP32のピンを両側使えませんでした)

まとめ

ESP32を使用することで、
WiFi経由で温湿度データを取得する簡単なIoTデバイスを作成することができました。

次はC#(Blazor)を使用したWebアプリから
このセンサーを取得する仕組みを作成予定です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?