Вывод данных с датчика BME280 на дисплей EasyHMI через MQTT.

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

Добро пожаловать в мир Интернета вещей (IoT)!

Что нам понадобится:

  1. Плата ESP8266 или ESP32.
  2. Датчик температуры, влажности и давления BME280.
  3. Дисплей, совместимый с EasyHMI (например, AT HMI или дисплей на ESP32 с соответствующей прошивкой).
  4. Среда разработки Arduino IDE.
  5. Программа EasyHMI.
  6. Доступ к MQTT-брокеру, например, через сервис wqtt.ru.

Шаг 1: Подготовка и настройка MQTT-брокера.

Для обмена данными между нашим датчиком и дисплеем нужен посредник — MQTT-брокер.

  1. Регистрация на wqtt.ru: Зарегистрируйтесь на сервисе wqtt.ru, который предоставляет бесплатный тестовый период.
  2. Получение данных для подключения: После регистрации перейдите в раздел «Брокер». Вам понадобятся следующие данные для настройки как микроконтроллера, так и дисплея 1:
    • Адрес сервера (mqtt_server)
    • Порт (mqtt_port)
    • Имя пользователя (mqtt_user)
    • Пароль (mqtt_password)

Заходим в раздел «Брокер»

Держите эти данные под рукой, они скоро понадобятся.


Шаг 2: Настройка и прошивка микроконтроллера (ESP8266/ESP32).

Теперь подготовим устройство, которое будет собирать и отправлять данные.

Схема подключения BME280 к ESP8266.

Схема подключения BME280 к ESP8266.

Сборка схемы: Подключите датчик BME280 к вашей плате ESP по шине I2C.

  • VCC -> 3.3V
  • GND -> GND
  • SCL -> GPIO22 (для ESP32) или D1 (GPIO5) (для ESP8266)
  • SDA -> GPIO21 (для ESP32) или D2 (GPIO4) (для ESP8266)
Схема подключения BME280 к ESP32.

Схема подключения 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-топики.

Функция sendData() - Сбор и отправка.

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 и начало отправлять данные.

Подробный разбор кода.


Шаг 3: Создание интерфейса и настройка дисплея EasyHMI.

  1. Создание интерфейса: В программе EasyHMI создайте новый проект. Добавьте три элемента "Текст" для отображения данных с ID A08, A0D и A12.Создание интерфейса: В программе EasyHMI создайте новый проект.
  2. Настройка дисплея:
    • Подключитесь к дисплею в EasyHMI и перейдите на вкладку «Настройки».
    • Настройте Wi-Fi.
    • В блоке MQTT введите те же данные от wqtt.ru, что и в коде.
    • Укажите ID дисплея 1.
    • Выберите способ отправки данных: "MQTT".
    • Сохраните настройки. Дисплей перезагрузится.
    Далее переходим к настройке подключения к MQTT. Тут копируем данные из сервиса и вставляем в соответствующие поля в программе EasyHMI.


Создание интерфейса дисплея EasyHMI.

Заключение.

Поздравляем! Вы успешно создали полноценное IoT-устройство. Ваш микроконтроллер теперь является автономным источником данных, а HMI-панель — средством их визуализации. Благодаря гибкости протокола MQTT, вы можете легко масштабировать проект: добавить больше датчиков, отправлять данные в базы данных или мобильные приложения, а также управлять устройствами, отправляя команды с дисплея обратно на микроконтроллер.

Поздравляем! Вы успешно создали полноценное IoT-устройство.

Этот урок закладывает фундамент для создания более сложных систем автоматизации и мониторинга. Теперь вы вооружены знаниями для реализации собственных идей в мире умных устройств.

Понравился Урок Вывод данных с датчика BME280 на дисплей EasyHMI через MQTT? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на VK Видео, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Универсальный MQTT-клиент для ESP8266 и ESP32 Универсальный MQTT-клиент для ESP8266 и ESP32.ino11 Kb 56 Скачать
Интерфейс в EasyHMI. Интерфейс в EasyHMI..zip19 Kb 50 Скачать
Adafruit_Unified_Sensor Adafruit_Unified_Sensor.zip7 Kb 51 Скачать
Adafruit_BME280_Library Adafruit_BME280_Library.zip441 Kb 50 Скачать
PubSubClient PubSubClient.zip42 Kb 50 Скачать

Комментарии

Ваше Имя*


Разработка проектов
EasyHMI
Умный Дом