Интерактивный HMI-проект на Nextion с Arduino Mega и датчиками
Компоненты и материалы
| Arduino Mega 2560 | 1 шт. |
| Arduino Mega Proto Shield | 1 шт. |
| Nextion HMI-дисплей 2.4" | 1 шт. |
| Слот для SD-карты | 1 шт. |
| Датчик температуры и влажности DHT22 | 1 шт. |
| Атмосферный датчик BME280 (SparkFun) | 1 шт. |
| Модуль RTC DS3231 | 1 шт. |
| Приёмник RXB6 433 МГц (супергетеродин) | 1 шт. |
| Резистор 10 кОм | 1 шт. |
| Резистор 475 Ом | 1 шт. |
| Таймер NE555 | 1 шт. |
| Блок питания AC-DC 5В | 1 шт. |
Необходимые инструменты
- Паяльник
Приложения и онлайн-сервисы
- Arduino IDE
- Nextion Editor
О проекте
Может ли дисплей Nextion экономить память Arduino?
Часто хочется использовать яркую графику для привлекательных проектов. Однако красивые графики требуют много ресурсов: памяти контроллера для графических библиотек и внешнего накопителя (SD-карты) для хранения изображений. У Arduino ресурсы ограничены, поэтому она не совсем подходит для насыщенных графических проектов. Дисплей Nextion решает эту проблему: ему не нужно внешнее хранилище для изображений, а требования к памяти контроллера снижаются значительно.
С точки зрения контроллера Nextion — просто последовательное устройство, не более ресурсоёмкое, чем обычный монохромный LCD. Можно ли построить метеостанцию на Arduino UNO и Nextion? Теоретически — да, но функционал будет крайне ограничен из-за нехватки памяти (нельзя добавить исторические графики и т.д.). Для полнофункциональной станции нужен более мощный микроконтроллер.
В этой статье показано, как построить многофункциональную метеостанцию с привлекательной графикой, логированием данных и приёмом показаний с нескольких беспроводных датчиков. База — дисплей Nextion и Arduino Mega 2560.
Основная идея
Предположим, у нас уже есть внешние датчики (например, Oregon THGN123N). Мы создаём центральный блок, который:
- принимает данные от внешних датчиков по 433 МГц;
- отображает температуру, влажность и атмосферное давление;
- периодически сохраняет данные на SD-карту;
- строит графики истории;
- делает прогноз погоды на основе изменения давления.
Главная особенность — фоновое изображение меняется в зависимости от прогноза (не просто маленькая иконка, а полноэкранная картинка).
Особенности дисплея Nextion
Главный минус Nextion — нет поддержки прозрачных изображений в прошивке. Нельзя сделать круглые элементы. Текстовые виджеты должны иметь «обрезанный» фон под картинку. При смене фона нужно менять фон у всех текстовых виджетов. Поэтому создаются несколько полных экранов для каждого типа прогноза.
Используя изменение давления, делаем три типа прогноза: ясно, облачно, дождь/снег. Плюс два периода суток: день и ночь. Итого 8 экранов:
- Солнечное день
- Лунное ночь (ясно)
- Облачное день
- Облачное ночь
- Дождь день
- Дождь ночь
- Снег день
- Снег ночь
Все экраны создаются в Nextion Editor. Виджеты для температуры, влажности, давления имеют одинаковые имена на всех экранах. Контроллер сначала выбирает нужный экран (фон), затем обновляет данные в виджетах.
Данные на главном экране
Экран разделён на три зоны:
- Верхняя строка — внутренние датчики: температура и влажность в доме, атмосферное давление, текущее время и дата. Давление внутри и снаружи одинаковое, поэтому один датчик давления (BME280) внутри блока.
- Левая половина — данные основного внешнего датчика (температура, влажность). ID основного датчика настраивается в меню настроек. Нужно подождать ~2 мин, пока все датчики передадут сигналы.
- Правая половина — данные всех датчиков (ID, температура, влажность). Информация чередуется автоматически. Поддерживается до 4 внешних датчиков. Если датчик один, внутренние данные дублируются справа.
Встроенный точный RTC DS3231 даёт время и дату для логирования на SD-карту, расчёта суточного/ночного прогноза и управления яркостью дисплея.
Дополнительные экраны
- Экран восхода/заката солнца и возраста луны (тап по дате на главном экране);
- Настройки контроллера (тап по времени);
- Настройка RTC;
- Исторические графики (тап по температуре или давлению).
Экран истории данных
Два режима: 1 день и 8 дней. Переключение — тап по области графика.
Слева — панель инструментов для выбора ID датчика (внутренний = 0). Сверху — выбор типа данных: давление, температура, влажность.
Экран настроек
- Выбор ID основного внешнего датчика;
- Настройка времени утра/вечера (смена яркости дисплея);
- Регулировка яркости дисплея.
Защита от зависаний контроллера
Для повышения стабильности реализована внешняя сторожевая схема (watchdog) на таймере NE555. Она сбрасывает Arduino через ~2–3 минуты, если на пин A2 не приходит сигнал. Схема универсальна и может использоваться в других проектах.
Заключение
Метеостанция с богатой графикой работает стабильно уже более полугода.
Код
Исходный код: GitHub
Схемы
Полная схема: GitHub
Производственный процесс
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- Умная копилка: управление монетоприёмником на Arduino Nano
- Монитор температуры и реальные часы на Arduino Due с TFT-дисплеем 3.2"
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Подключение Arduino Mega к GPS-модулю NEO‑6M: пошаговое руководство
- Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
- Вывод данных BME280 (температура, влажность, давление) на сенсорный экран Nextion
- Учебный стенд Arduino Mega 2560: сенсоры, моторы, дисплеи и собственная PCB
- Создание приложения Fridgeye с дисплеем Nextion: пошаговое руководство
- Измерение солнечной радиации на Arduino UNO с Ethernet Shield