Добро пожаловать в мир Интернета вещей (IoT)! В этом уроке мы создадим полноценный проект, который объединяет физический мир (датчик погоды) и цифровой интерфейс (HMI-дисплей). Мы научимся собирать данные о температуре, влажности и давлении с помощью популярного датчика BME280 и микроконтроллера ESP8266 или ESP32. Затем, используя протокол MQTT, мы передадим эти данные по Wi-Fi на дисплей под управлением EasyHMI, где они будут наглядно отображаться в реальном времени. Этот урок идеально подходит для тех, кто хочет сделать свои первые шаги в создании систем умного дома или промышленных HMI-панелей, так как он демонстрирует ключевой принцип двустороннего обмена данными между устройствами.
Что нам понадобится:
Для обмена данными между нашим датчиком и дисплеем нужен посредник — MQTT-брокер.

Держите эти данные под рукой, они скоро понадобятся.
Теперь подготовим устройство, которое будет собирать и отправлять данные.
Схема подключения BME280 к ESP8266.
Сборка схемы: Подключите датчик BME280 к вашей плате ESP по шине I2C.

Схема подключения BME280 к ESP32.
Разбор кода и настройка: Откройте Arduino IDE и вставьте предоставленный ниже код. Давайте подробно разберем, как он работает и что нужно настроить.
Подробный разбор кода.
Блок 1: Подключение библиотек.
Здесь мы подключаем все необходимые инструменты. С помощью
#ifdef код автоматически определяет, под какую плату вы его компилируете (ESP32 или ESP8266), и подключает правильную библиотеку для работы с Wi-Fi.
// --- Директивы препроцессора для поддержки ESP8266 и ESP32 --- #ifdef ESP32 #include <WiFi.h> // Для ESP32 #else #include <ESP8266WiFi.h> // Для ESP8266 #endif // --- Общие библиотеки --- #include <PubSubClient.h> // Для работы с MQTT #include <Wire.h> // Для I2C интерфейса #include <Adafruit_Sensor.h> // Базовая библиотека для датчиков Adafruit #include <Adafruit_BME280.h> // Библиотека для датчика BME280Блок 2: Глобальные настройки (Ваша зона ответственности!).
Это самый важный блок для вас. Здесь вы должны ввести свои уникальные данные.
// --- Настройки Wi-Fi --- const char* ssid = "ИМЯ_ВАШЕЙ_WIFI_СЕТИ"; const char* password = "ПАРОЛЬ_ОТ_WIFI"; // --- Настройки MQTT-брокера (из личного кабинета wqtt.ru) --- const char* mqtt_server = "xx.wqtt.ru"; const int mqtt_port = 1234; const char* mqtt_user = "****"; const char* mqtt_password = "****"; // --- Настройки топиков для EasyHMI --- // Формат: easyhmi<ID дисплея>/text/<ID элемента> const char* temperature_topic = "easyhmi1/text/A08"; const char* humidity_topic = "easyhmi1/text/A0D"; const char* pressure_topic = "easyhmi1/text/A12";Мы заранее знаем ID
A08, A0D, A12 для наших текстовых полей на дисплее. ID дисплея в топике (easyhmi1) также должен совпадать с настройками в самой HMI-панели.Блок 3: Функция setup() - Инициализация.
Эта функция выполняется один раз при запуске устройства. Она последовательно инициализирует Serial-порт для отладки, датчик BME280, подключается к Wi-Fi и настраивает MQTT-клиент.
void setup() {
Serial.begin(115200); // Запускаем монитор порта
// Инициализация датчика
if (!bme.begin(0x76)) {
Serial.println("Датчик BME280 не найден!");
while (1) delay(10); // Остановка работы, если датчика нет
}
setup_wifi(); // Подключаемся к Wi-Fi
client.setServer(mqtt_server, mqtt_port); // Указываем MQTT-брокера
}
Блок 4: Функция loop() - Основной цикл.Эта функция работает бесконечно. Ее главная задача — поддерживать соединение с MQTT-брокером и по таймеру отправлять данные.
void loop() {
// Если соединение с MQTT потеряно, переподключаемся
if (!client.connected()) {
reconnect();
}
client.loop(); // Важнейшая функция, поддерживает жизнь MQTT-соединения
// Неблокирующий таймер для отправки данных раз в `sending_period` секунд
if (millis() - previousMillis >= (sending_period * 1000UL)) {
previousMillis = millis(); // Сбрасываем таймер
sendData(); // Отправляем данные
}
}
Блок 5: Функция sendData() - Сбор и отправка.Эта функция считывает данные с датчика, приводит их к нужному формату (целые числа), выводит в консоль для отладки и публикует в заранее определенные MQTT-топики.
void sendData() {
float temperature_f = bme.readTemperature();
float humidity_f = bme.readHumidity();
// ... Преобразование данных ...
uint8_t temperature = (uint8_t)temperature_f;
// ... Публикация в топики ...
client.publish(temperature_topic, String(temperature).c_str(), retain_flag);
// ... и так для всех данных ...
}
Прошивка: Выберите в Arduino IDE вашу плату (ESP32 или ESP8266) и COM-порт, после чего загрузите скетч. Откройте Монитор порта, чтобы убедиться, что устройство подключилось к Wi-Fi, MQTT и начало отправлять данные.
A08, A0D и A12.
1.
Последняя версия Easy HMI и Datasheet на дисплеи AT HMI.
Поддержать проект и присоединиться к общению в нашем закрытом сообществе вы можете на Boosty.
Поздравляем! Вы успешно создали полноценное IoT-устройство. Ваш микроконтроллер теперь является автономным источником данных, а HMI-панель — средством их визуализации. Благодаря гибкости протокола MQTT, вы можете легко масштабировать проект: добавить больше датчиков, отправлять данные в базы данных или мобильные приложения, а также управлять устройствами, отправляя команды с дисплея обратно на микроконтроллер.
Этот урок закладывает фундамент для создания более сложных систем автоматизации и мониторинга. Теперь вы вооружены знаниями для реализации собственных идей в мире умных устройств.
Понравился Урок Вывод данных с датчика BME280 на дисплей EasyHMI через MQTT? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на VK Видео, вступить в группу Вконтакте.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
| Универсальный MQTT-клиент для ESP8266 и ESP32.ino | 11 Kb | 56 | Скачать | |
| Интерфейс в EasyHMI..zip | 19 Kb | 50 | Скачать | |
| Adafruit_Unified_Sensor.zip | 7 Kb | 51 | Скачать | |
| Adafruit_BME280_Library.zip | 441 Kb | 50 | Скачать | |
| PubSubClient.zip | 42 Kb | 50 | Скачать |
Код и прошивки для модулей умного дома.
4 сентября , 2025
Комментариев:0
Файлов для скачивания:5
Фото:6
Понравилась статья? Нажми
Читайте также
Мы в соц сетях
Комментарии