ESP32 チュートリアル 51/55 - DHT を使用した WiFi 経由の温度と湿度 | SunFounder の ESP32 IoT 学習キット
このチュートリアルでは、SunFounder ESP32を使用してDHT11またはDHT22センサーで温度と湿度を測定する方法を学びます。このプロジェクトでは、Wi-Fiを介してモバイルデバイスやブラウザでセンサーデータを読み取ることができ、ESP32のWebサーバーとしての機能を示します。ESP32のセットアップ、コンポーネントの正しい配線、すべてがスムーズに動作するように必要なコードを書きます(ビデオで00:15)。
ESP32マイクロコントローラーは、内蔵Wi-FiとBluetoothを備えた強力なデバイスです。これにより、インターネットに接続し、センサーのデータをワイヤレスで送信することができます。DHTセンサーは温度と湿度を測定し、これらはESP32のIPアドレスを介してアクセス可能なウェブページに表示されます。このセットアップは、環境条件を遠隔で監視するのに最適です。
ハードウェアの解説
このプロジェクトでは、以下の主要なコンポーネントを使用します:
- ESP32マイクロコントローラー:これはWi-Fi接続を処理し、センサーデータを表示するウェブサーバーとして機能するプロジェクトの核心です。
- DHT11またはDHT22センサー:これらのセンサーは温度と湿度を測定します。DHT11は基本的なアプリケーションに適しており、DHT22はより高い精度と広い範囲を提供します。
DHTセンサーは、ESP32と単一のデータピンを使用して通信します。温度と湿度の測定値をデジタル形式で送信し、ESP32はそれを簡単に解釈できます。ESP32は、これらの測定値をリアルタイムで表示するウェブページをホストします。
データシートの詳細
| メーカー | アダフルート |
|---|---|
| 部品番号 | DHT11/DHT22 |
| ロジック/入出力電圧 | 3.3 V - 5.5 V |
| 供給電圧 | 3.3 V - 5.5 V |
| 出力電流(チャンネルあたり) | 0.5 mA(典型) |
| ピーク電流(チャネルあたり) | 2.5 mA(最大) |
| 応答時間 | 1秒(典型的) |
| 湿度範囲 | 20%から90%の相対湿度 |
| 温度範囲 | -40°Cから80°C |
| パッケージ | DIP-4 |
- DHTセンサーがESP32の正しいGPIOピンに接続されていることを確認してください。
- データラインを安定させるためにプルアップ抵抗を使用してください。
- 電源電圧に注意してください。DHT11とDHT22はどちらも3.3Vで正常に動作します。
- 配線を短く保ち、信号劣化を避けてください。
- Arduino IDEでDHTセンサーの正しいライブラリがインストールされているか確認してください。
配線指示書

DHTセンサーをESP32に接続するには、以下のピンを接続してください:
- DHTセンサーVCC:ESP32の3.3Vピンに接続します。
- DHTセンサーGND:ESP32のGNDピンに接続します。
- DHTセンサーデータ:ESP32のGPIO 14に接続します(これはコード内で定義されています)。
DHTPIN).
正しい抵抗(通常4.7kΩ)がVCCとデータピンの間に接続されていることを確認して、信号の整合性を保ってください。DHT22を使用する場合は、単に変更してください。DHTTYPEコードにおいてDHT11へDHT22センサー特性の違いに対応するために。
コード例とウォークスルー
コードでは、必要なライブラリをインクルードし、いくつかの重要な識別子を定義することから始めます。例えば、refreshは3秒に設定されており、これにより温度と湿度の読み取り値がどれくらいの頻度で更新されるかが決まります。
const int refresh=3; // read every 3 seconds
boolean showSerial = true; // true or false
ザshowSerial変数は、読み取り値をシリアルモニタに出力するかどうかを制御することを可能にします。次に、センサーのピンとタイプを定義します。
#define DHTPIN 14 // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
ここでは、DHTオブジェクトが作成され、指定されたピンとセンサーの種類にリンクされます。ウェブ上で温度データを送信するための主要な機能が定義されています。sendTemp():
void sendTemp() {
String page = "\n";
page += "\n";
page += "\n";
page += "\n";
page += "\n";
// Additional HTML content...
}
この機能は、温度と湿度の測定値を表示するHTMLページを生成します。ページは、基にして更新されます。refresh前に定義された間隔。完全なコードの詳細については、記事の下に読み込まれた完全なコードを参照してください。
デモンストレーション / 期待すること
ESP32にコードをアップロードした後、シリアルモニターにIPアドレスが表示されるはずです。ウェブブラウザを開いて、IPアドレスを入力すると温度と湿度の読み取り値を表示できます。値は3秒ごとに更新され、リアルタイムのデータを提供します(ビデオの12:30に)。
ESP32とあなたのデバイスが同じWi-Fiネットワークに接続されていることを確認するなど、一般的な落とし穴に注意してください。問題が発生した場合は、配線を確認し、DHTセンサーが正常に機能していることを確かめてください。
動画のタイムスタンプ
- 00:00 開始
- 1:45 DHT Wi-Fiプロジェクトの紹介
- 3:59 ESP32 DHT Wifi用のArduinoコード
- 13:31 Arduino IDEでESP32ボードとCOMポートを選択中
- 15:13 Wifiを介した温度のデモンストレーション
/*
* Display temperature on Browswer screen using DHT11, DHT22 with ESP32
*
* Written by Ahmad Shamshiri on Dec 18, 2023
📚⬇️ Download and resource page https://robojax.com/RJT385
*
* Watch video instruciton for this video: https://youtu.be/drrW1EHqKuM
*
* I have combined DHT library of Adafruit with ESP8266 WebServer both links
* Adafruit DHT library on GitHub: https://github.com/adafruit/DHT-sensor-library
* and
* ESP8266 on GitHub : https://github.com/esp8266/Arduino
*
Copyright (c) 2015, Majenko Technologies
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* * Neither the name of Majenko Technologies nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
const int refresh=3;//read every 3 seconds
boolean showSerial =true;//true or false
unsigned int unit=0;//0=C, 1=F,
char *title[]={"Temperature","Temperature","Humidity"};
char *unitText[]={"°C","°F","%"};\
#include "DHT.h"
#define DHTPIN 14 // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float temperatureValue,temperatureFValue, humidityValue;//
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
const char *ssid = "dars";
const char *password = "5152535455";
WebServer server(80);
void sendTemp() {
//see video
String page = "<!DOCTYPE html>\n";
page +="<html>\n";
page +="<head>\n";
page +="<title>Robojax DHT</title>\n";
page +=" <meta http-equiv='refresh' content='";
page += String(refresh);// how often temperature is read
page +="'/>\n";
page +="<head>\n";
page +="<body>\n";
page +="<h1>Robojax.com DHT Code</h1>\n";
page +="<p style=\"font-size:50px\"> \n";
page +=title[unit];
page +=": ";
if (DHTTYPE ==DHT11){
page += String((int)temperatureValue);
}else{
page += String(temperatureValue, 1);
}
page +=unitText[unit];
page +="<br/>\n";
//humidity starts
page +=title[2];
page +=": \n";
page += String((int)humidityValue);
page +=unitText[2];
//humidity ends
page +="</p>\n";
page +="</body>";
page +="</html>\n";
server.send(200, "text/html", page);
}
void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}
void setup(void) {
dht.begin();
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("Open: http://");
Serial.print(WiFi.localIP());
Serial.println(" to read temperature");
if (MDNS.begin("robojaxDHT")) {
Serial.println("MDNS responder started");
}
server.on("/", sendTemp);
server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void) {
//Robojax.com code for ESP32 DHT11 DHT22
server.handleClient();
temperatureValue = dht.readTemperature();// Read temperature as Celsius (the default)
humidityValue = dht.readHumidity();// Reading humidity
temperatureFValue = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)
if(showSerial){
Serial.print(title[unit]);
Serial.print(": ");
if (DHTTYPE ==DHT11){
Serial.println((int)temperatureValue);
}else{
Serial.print(temperatureValue,1);
}
}
Serial.println();//just adds new line
delay(300);// change this to larger value (1000 or more) if you don't need very often reading
// Robojax.com code for ESP32 and DHT11 DHT22
}
Common Course Links
Common Course Files
必要かもしれないもの
-
アリエクスプレスアリエクスプレスs.click.aliexpress.com
リソースと参考文献
-
外部アリエクスプレスs.click.aliexpress.com
-
内部サンファウンダー ESP32 スターターキット アルティメットエディション サンファウンダーのウェブサイトsunfounder.com
ファイル📁
ファイルは利用できません。