Wi-Fi метеостанция на ESP8266 (ESP-01) и DHT22: отправка данных в ThingSpeak
Компоненты и материалы
- ESP8266 ESP-01 — 1 шт.
- Датчик температуры и влажности DHT22 — 1 шт.
- Беспаечная макетная плата — 1 шт.
- Провода-перемычки — 1 компл.
- USB-UART преобразователь (например, UDOO Debug Module) — 1 шт. (для прошивки ESP-01)
- Arduino UNO — 1 шт. (опционально, как USB-UART мост)
Идея проекта
Автономная метеостанция для длительного мониторинга уличной погоды. Данные (температура, влажность) отправляются в облачный сервис ThingSpeak каждые 20 секунд. ESP8266 работает самостоятельно, без Arduino — прошивается напрямую из Arduino IDE.
Этапы реализации
1. Подготовка ESP-01
ESP-01 прошивается пользовательским скетчем через UART (GPIO0 → GND при включении для входа в режим загрузки). Оригинальная прошивка AT теряется; для восстановления нужен отдельный процесс.
2. Подключение DHT22
- VCC → 3.3V (или 5V, если модуль с стабилизатором)
- GND → GND
- DATA → GPIO2 (пин 2 на ESP-01)
- Рекомендуется подтягивающий резистор 4.7–10 кОм на DATA
3. Настройка ThingSpeak
- Создать канал (Channel) с двумя полями: Field 1 — влажность, Field 2 — температура.
- Записать
Channel IDиWrite API Key.
4. Код для ESP8266 (Arduino IDE)
#include <ThingSpeak.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
unsigned long myChannelNumber = 167319; // замените на свой
const char * myWriteAPIKey = "XXXP9V86RWR7R9Y"; // замените на свой
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
WiFiClient client;
void setup() {
Serial.begin(115200);
delay(10);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500); Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.println(WiFi.localIP());
ThingSpeak.begin(client);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Humidity: "); Serial.println(h);
Serial.print("Temp: "); Serial.println(t);
delay(2000);
ThingSpeak.writeField(myChannelNumber, 1, h, myWriteAPIKey);
delay(20000); // лимит ThingSpeak: 15 сек на бесплатном тарифе
ThingSpeak.writeField(myChannelNumber, 2, t, myWriteAPIKey);
delay(20000);
}
Важные замечания
- ESP8266 потребляет до 300 мА пиковым током — питание от USB ПК может быть недостаточным. Нужен отдельный 3.3В стабилизатор (например, AMS1117) или качественный USB-UART адаптер с хорошим LDO.
- ThingSpeak бесплатный тариф ограничивает частоту обновления одного канала до 15 секунд. Код использует 20 сек между полями — 40 сек полный цикл.
- GPIO2 на ESP-01 также используется для встроенного синего LED — мигание LED индицирует передачу.
Расширение
#include <ThingSpeak.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
unsigned long myChannelNumber = 167319; // замените на свой
const char * myWriteAPIKey = "XXXP9V86RWR7R9Y"; // замените на свой
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
WiFiClient client;
void setup() {
Serial.begin(115200);
delay(10);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500); Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.println(WiFi.localIP());
ThingSpeak.begin(client);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Humidity: "); Serial.println(h);
Serial.print("Temp: "); Serial.println(t);
delay(2000);
ThingSpeak.writeField(myChannelNumber, 1, h, myWriteAPIKey);
delay(20000); // лимит ThingSpeak: 15 сек на бесплатном тарифе
ThingSpeak.writeField(myChannelNumber, 2, t, myWriteAPIKey);
delay(20000);
}
Канал ThingSpeak поддерживает до 8 полей. Можно добавить: датчик давления (BMP280/BME280), освещённости (BH1750), скорости ветра, уровня осадков, качества воздуха (MQ-135).
Схема подключения
Минимальная схема: ESP-01 + DHT22 на GPIO2 + стабилизатор 3.3В + конденсаторы 100 мкФ и 100 нФ на питании.
Производственный процесс
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Создание метеостанции на Raspberry Pi с ежедневными email-отчётами о погоде
- Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
- Мастерство управления датчиками и исполнительными механизмами на Raspberry Pi: акселерометр, сервопривод и потоко…
- Проверка и калибровка датчика влажности для точных измерений
- Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
- Интеграция термопары с Arduino Portenta H7 через MAX6675
- Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Мониторинг состояния реки: Arduino-система контроля качества воды