Uncategorized

ESP32 + MQTT: отправляем данные датчиков в облако за 30 минут

Проблема

Вы собрали метеостанцию на ESP32. Температура и влажность отлично выводятся в последовательный монитор. Но вот в чём беда — эти данные заперты на вашем ноутбуке. С телефона их не посмотреть. В журнал не записать. Автоматизации на них не повесить.

MQTT это решает. Это протокол связи, на котором работает большинство IoT-систем в мире — от умных заводов до инсталляций Home Assistant.

Что вы соберёте

Узел датчиков на ESP32, который:

  • Считывает температуру и влажность каждые 30 секунд
  • Публикует данные в бесплатный облачный MQTT-брокер
  • Позволяет следить за всем из любого браузера, откуда угодно

Сложность: для начинающих  |  Время: 30 минут  |  Стоимость: ~$23 за детали

Нужное железо (спецификация)

Деталь Модель Кол-во Цена Купить
Микроконтроллер ESP32 DevKitC V4 1 $13.49 Смотреть товар
Датчик температуры/влажности DHT22 1 $5.24 Смотреть товар
Дисплей (опционально) 0.96″ OLED SSD1306 1 $5.99 Смотреть товар
Макетная плата 830 точек 1 $4.49 Смотреть товар
Провода-перемычки M-M, 40 шт. 1 $2.99 Смотреть товар

Шаг 1: Монтаж

ESP32 ↔ DHT22

Пин DHT22 Пин ESP32 Примечание
VCC 3V3 Питание
GND GND Земля
DATA GPIO 13 Линия данных

ESP32 ↔ OLED (опционально)

Пин OLED Пин ESP32 Примечание
VCC 3V3 Питание
GND GND Земля
SDA GPIO 21 Данные I2C
SCL GPIO 22 Такт I2C

Шаг 2: Установите библиотеки

Откройте Arduino IDE → Sketch → Include Library → Manage Libraries и установите:

  1. PubSubClient от Nick O’Leary (обмен по MQTT)
  2. DHT sensor library от Adafruit (драйвер DHT22)
  3. Adafruit SSD1306 (дисплей OLED, если используете)

Шаг 3: Загрузите код

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

// --- WiFi Settings ---
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";

// --- MQTT Settings ---
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* temp_topic = "sensbench/home/temperature";
const char* hum_topic = "sensbench/home/humidity";

// --- Sensor Settings ---
#define DHTPIN 13
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

// --- Globals ---
WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("nWiFi connected! IP: ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Connecting to MQTT...");
    String clientId = "sensbench-" + String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      Serial.println("connected!");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" retrying in 5s");
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  dht.begin();
  setup_wifi();
  client.setServer(mqtt_server, mqtt_port);
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Sensor read failed!");
    return;
  }

  char tempStr[8], humStr[8];
  dtostrf(t, 4, 2, tempStr);
  dtostrf(h, 4, 2, humStr);

  client.publish(temp_topic, tempStr);
  client.publish(hum_topic, humStr);

  Serial.printf("Temp: %s°C  Humidity: %s%%n", tempStr, humStr);
  delay(30000);
}

Шаг 4: Смотрите данные в облаке

  1. Откройте https://www.hivemq.com/mqtt-web-client/ в браузере
  2. Нажмите Connect
  3. В разделе Subscriptions добавьте тему: sensbench/home/#
  4. Смотрите, как ваш ESP32 шлёт данные в реальном времени каждые 30 секунд

Что дальше?

Теперь, когда данные в облаке, можно:

  • Собрать дашборд на Node-RED или Home Assistant для визуализации
  • Добавить датчики — BME280 для давления, датчик влажности почвы для растений
  • Запускать автоматизации — «если температура > 30°C, включи вентилятор»
  • Перейти на батарейку — добавьте режим глубокого сна, и устройство проживёт месяцы

Leave a Reply

Your email address will not be published. Required fields are marked *