Локальный дисплей (HMI) и Программная Архитектура
Данный документ описывает аппаратное подключение экрана к контроллеру (Raspberry Pi Pico / RP2040), выбор графических библиотек и архитектуру распределения задач по ядрам процессора для обеспечения отказоустойчивости (Real-Time).
1. Аппаратное подключение экрана (Hardware)
Для вывода графической информации выбран протокол SPI (Serial Peripheral Interface), обеспечивающий высокую скорость обновления при минимальном количестве задействованных пинов.
Рекомендуемые дисплеи:
- ST7789 (Размер 1.3" – 2.0"): IPS-матрицы. Обладают отличными углами обзора и глубоким черным цветом. Оптимальны для размещения на лицевой панели, где на экран смотрят под разными углами.
- ILI9341 (Размер 2.4" – 2.8"): Классические TFT/TN матрицы. Углы обзора хуже, чем у IPS, но обеспечивают большую диагональ для вывода графиков.
Схема подключения (Аппаратный SPI0 шины RP2040)
Логика управления дисплеями и RP2040 совпадает (3.3V), что исключает необходимость в конвертерах уровней.
| Пин экрана (ST7789/ILI9341) | Назначение | Пин на RP2040 (Пример) |
|---|---|---|
VCC / 3V3 |
Питание экрана | Пин 36 (3V3 OUT) |
GND |
Земля | Любой GND |
SCL / SCK / CLK |
Тактовый сигнал SPI | GP18 (SPI0 SCK) |
SDA / MOSI / DIN |
Данные (Master Out Slave In) | GP19 (SPI0 TX) |
RES / RST |
Аппаратный сброс | Любой GPIO (например, GP20) |
DC / RS |
Выбор: Данные / Команда | Любой GPIO (например, GP16) |
CS (Chip Select)* |
Выбор устройства на шине | GP17 (SPI0 CSn) |
BLK / LED |
Подсветка экрана | GP21 (Аппаратный ШИМ для яркости) |
* На некоторых компактных модулях 1.3" ST7789 пин CS отсутствует (жестко притянут к GND). В этом случае пин CS на Pico не задействуется.
2. Программная отрисовка (Software)
Для создания сложного, современного интерфейса используются высокопроизводительные графические библиотеки.
Драйвер дисплея: TFT_eSPI
Самая быстрая графическая библиотека для микроконтроллеров.
- Работает напрямую с памятью дисплея через DMA (Direct Memory Access).
- Обеспечивает мгновенную отрисовку без мерцания.
- Выступает базовым низкоуровневым "драйвером" для передачи пикселей на экран.
Графический фреймворк: LVGL (Light and Versatile Graphics Library)
Промышленный стандарт для создания современных HMI (меню, анимации, графики, спидометры).
lv_meter: Используется для создания круглых шкал со стрелками (идеально для RPM помп и скорости потока).lv_chart: Готовые виджеты графиков для отрисовки кривых изменения температуры.lv_tabview: Реализация вкладок/экранов (Дашборд -> Графики -> Ошибки -> Настройки), переключаемых физическими навигационными кнопками.
GUI Builders (Создание интерфейса)
Для ускорения разработки и визуального программирования (WYSIWYG) используются десктопные конструкторы:
- SquareLine Studio или EEZ Studio.
- Позволяют мышкой расположить элементы интерфейса, настроить цвета и шрифты, после чего экспортировать готовый C++ код для интеграции в проект (Arduino IDE / PlatformIO).
3. Архитектура распределения ядер (Multicore Processing)
Отрисовка сложной графики (особенно графиков со сглаживанием в LVGL) может занимать 10-30 мс. В мире микроконтроллеров длительные блокировки недопустимы, так как это может привести к пропуску чтения датчиков Холла, сбою таймингов на шине 1-Wire или задержке в управлении помпами.
Данная проблема элегантно решается за счет двухъядерной архитектуры (Dual-Core) чипа RP2040.
Core 0 (Первое ядро) — Интерфейс и Связь
В среде Arduino IDE (ядро Earle F. Philhower) это функции setup() и loop().
Ядро полностью отдано под некритичные ко времени задачи:
- Отрисовка интерфейса (LVGL + TFT_eSPI).
- Обработка нажатий физических кнопок навигации по меню.
- Общение по стабильному каналу USB (Serial) с демоном Linux на сервере (отправка телеметрии, прием команд).
Core 1 (Второе ядро) — Жесткий Real-Time (Охлаждение)
В среде Arduino IDE это функции setup1() и loop1().
Ядро занимается исключительно критически важной логикой физического управления:
- Опрос датчиков температуры DS18B20 (обработка шины 1-Wire).
- Чтение данных с умных датчиков потока.
- Вычисление ПИД-регулятора на основе собранных температур.
- Генерация ШИМ-сигналов (PWM 25kHz) для помп.
- Обработка логики аварийного отключения фермы (Hardware Cut-off).
Синхронизация: Оба ядра обмениваются данными (например, Core 1 передает свежие температуры в Core 0 для отрисовки на графике) через потокобезопасные очереди (Queues, Mutexes, Spinlocks), предусмотренные Raspberry Pi Pico SDK. Таким образом, даже в случае программного зависания интерфейса на экране (Core 0), контур охлаждения фермы (Core 1) продолжит штатную работу и защиту оборудования.