ESP8266:Примеры/Отображение температуры в браузере с помощью чипа ESP8266 и датчика DHT11/DHT22: различия между версиями
Myagkij (обсуждение | вклад) |
Myagkij (обсуждение | вклад) |
||
Строка 216: | Строка 216: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Примечание1|1=В верхней части скетча можно раскомментировать строчку для датчика [[DHT22]] – если вы привыкли работать именно с ним.}} | |||
==Необходимые компоненты== | ==Необходимые компоненты== |
Версия от 18:33, 10 мая 2022
![]() |
Черновик |
Отображение температуры в браузере с помощью чипа ESP8266 и датчика DHT11/DHT22[1]
В этой статье объясняется, как сделать автономный веб-сервер с чипом ESP8266, который получает данные от датчика температуры/влажности DHT11/DHT22 и показывает их в браузере.
Для начала взгляните на видеоруководство:
[Видео]
Установка библиотеки «DHT Sensor»
Библиотека «DHT Sensor» упрощает использование датчика DHT для считывания температуры и влажности при помощи платы ESP8266 или Arduino. Чтобы скачать ее, проделайте следующее:
- Кликните здесь, чтобы скачать библиотеку. В результате в папке «Загрузки» на вашем компьютере должен появиться новый ZIP-файл.
![](/ruwiki/images/d/d7/ESP8266_DHT11DHT22_zip_1.png)
- Распакуйте его. В результате у вас должна появиться папка под названием «DHT-sensor-library-master».
![](/ruwiki/images/9/93/ESP8266_DHT11DHT22_folder_2.png)
- Переименуйте ее на «DHT».
![](/ruwiki/images/6/68/ESP8266_DHT11DHT22_rename_3.png)
- Переместите папку «DHT» в папку «libraries» IDE Arduino.
![](/ruwiki/images/5/53/ESP8266_DHT11DHT22_moving_4.png)
- Перезапустите IDE Arduino.
Загрузка кода на ESP8266
Сначала убедитесь, что в IDE Arduino установлен аддон для чипа ESP8266. О том, как установить его, читайте тут.
Затем кликните в IDE Arduino на Инструменты > Плата > Generic ESP8266 Module (Tools > Board > Generic ESP8266 Module).
![](/ruwiki/images/4/4e/Arduino-IDE-select-esp8266_5.png)
Скопируйте скетч ниже в IDE Arduino. Замените SSID и пароль на те, что соответствуют вашей сети. Отредактировав скетч, загрузите его на ESP8266 (если загрузить его не получается, поищите решение проблемы в этой статье).
/*********
Руи Сантос (Rui Santos)
Более подробно о проекте на: http://randomnerdtutorials.com
*********/
// подключаем библиотеку «ESP8266WiFi»:
#include <ESP8266WiFi.h>
#include "DHT.h"
// оставляем раскомментированной строчку,
// соответствующую модели вашего датчика:
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// вписываем здесь данные для своей WiFi-сети:
const char* ssid = "YOUR_NETWORK_NAME";
const char* password = "YOUR_NETWORK_PASSWORD";
// веб-сервер на порте 80:
WiFiServer server(80);
// датчик DHT:
const int DHTPin = 5;
// инициализируем датчик DHT:
DHT dht(DHTPin, DHTTYPE);
// временные переменные:
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];
// этот блок будет запускаться только при загрузке ESP:
void setup() {
// инициализируем последовательный порт (в отладочных целях):
Serial.begin(115200);
delay(10);
dht.begin();
// подключаемся к WiFi-сети:
Serial.println();
Serial.print("Connecting to "); // "Подключаемся к "
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// "Подключение к WiFi выполнено"
// запускаем веб-сервер:
server.begin();
Serial.println("Web server running. Waiting for the ESP IP...");
// "Веб-сервер запущен. Ждем IP-адрес ESP..."
delay(10000);
// печатаем IP-адрес ESP:
Serial.println(WiFi.localIP());
}
// этот блок будет запускаться снова и снова:
void loop() {
// начинаем прослушку новых клиентов:
WiFiClient client = server.available();
if (client) {
Serial.println("New client"); // "Новый клиент"
// создаем переменную типа «boolean»,
// чтобы определить конец HTTP-запроса:
boolean blank_line = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && blank_line) {
// данные от датчика могут запаздывать на 2 секунды
// (это очень медленный датчик):
float h = dht.readHumidity();
// считываем температуру в Цельсиях (по умолчанию):
float t = dht.readTemperature();
// считываем температуру в Фаренгейтах
// (isFahrenheit = true):
float f = dht.readTemperature(true);
// проверяем, прочитались ли данные от датчика,
// и если нет, то выходим и начинаем заново:
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
// "Не удалось прочитать
// данные от датчика DHT"
strcpy(celsiusTemp,"Failed");
strcpy(fahrenheitTemp, "Failed");
strcpy(humidityTemp, "Failed");
}
else{
// рассчитываем градусы в Цельсиях и Фаренгейтах,
// а также влажность:
float hic = dht.computeHeatIndex(t, h, false);
dtostrf(hic, 6, 2, celsiusTemp);
float hif = dht.computeHeatIndex(f, h);
dtostrf(hif, 6, 2, fahrenheitTemp);
dtostrf(h, 6, 2, humidityTemp);
// все эти Serial.print() ниже можно удалить,
// т.к. они для отладочных целей:
Serial.print("Humidity: "); // "Влажность: "
Serial.print(h);
Serial.print(" %\t Temperature: "); // "Температура: "
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t Heat index: ");
// "Тепловой индекс: "
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.print(" *F");
Serial.print("Humidity: "); // "Влажность: "
Serial.print(h);
Serial.print(" %\t Temperature: "); // "Температура: "
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t Heat index: ");
// "Тепловой индекс: "
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
// веб-страница, отображающая температуру и влажность:
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head></head><body><h1>ESP8266 - Temperature and Humidity</h1><h3>Temperature in Celsius: ");
client.println(celsiusTemp);
client.println("*C</h3><h3>Temperature in Fahrenheit: ");
client.println(fahrenheitTemp);
client.println("*F</h3><h3>Humidity: ");
client.println(humidityTemp);
client.println("%</h3><h3>");
client.println("</body></html>");
break;
}
if (c == '\n') {
// если обнаружен переход на новую строку:
blank_line = true;
}
else if (c != '\r') {
// если в текущей строчке найден символ:
blank_line = false;
}
}
}
// закрываем соединение с клиентом:
delay(1);
client.stop();
Serial.println("Client disconnected.");
// "Клиент отключен."
}
}
Необходимые компоненты
- Один чип ESP8266 12-E
- Один датчик температуры и влажности DHT11
- Один резистор на 4700 Ом
- Одна макетная плата
- Провода перемычки
Схема
![](/ruwiki/images/a/a7/ESP8266_schematics_bb_ESP8266_DHT11DHT22_6.jpg)
Важно: Датчику DHT для корректной работы требуется 5 вольт, поэтому убедитесь, что используете на ESP8266 контакт Vin, который как раз выдает нужные 5 вольт.
IP-адрес ESP8266
Откройте монитор порта IDE Arduino на скорости 115200 бод. Спустя несколько секунд в нем должен появиться IP-адрес ESP8266. В моем случае это «192.168.1.95».
![](/ruwiki/images/8/8d/ESP8266_DHT11DHT22_Arduino-IDE_7.png)
Демонстрация
Чтобы проверить, работает ли проект, откройте любой браузер на устройстве, подключенном к тому же роутеру, что и ESP8266. Затем введите в адресной строке IP-адрес, показанный в мониторе порта IDE Arduino, и кликните ↵ Enter . В результате браузер должен показать примерно следующее:
![](/ruwiki/images/d/d2/ESP8266_DHT11DHT22_web-server8.png)
См.также
Внешние ссылки
ESP8266 AT-команды | |
---|---|
Список AT-команд | |
Базовые команды |
|
Команды для WiFi |
|
Команды для TCP/IP |
|