SmartHome P4
Локальный контроллер умного дома на сенсорной панели 1024×600. До 15 комнат и 64 устройств, реле и дискретные входы по RS-485/Modbus, сцены, расписания и правила автоматики, транспорты MQTT / Home Assistant / ИК — вся конфигурация с экрана, всё хранится в NVS и работает без облака.
Локальный узел управления домом
Прошивка независима от метеостанции и GreenHouse P4. При старте app_main гасит подсветку (чтобы после перезагрузки или OTA не мелькал голубой кадр MIPI-DSI), затем последовательно поднимает хранилище, время, сеть и ядро автоматики, и только потом выводит интерфейс.
Вся логика локально
Реле, входы, сцены, расписания и правила исполняются на самом контроллере. Wi-Fi и MQTT опциональны — дом продолжает работать без интернета.
Конфигурация в NVS
Комнаты, устройства, сцены и правила хранятся одним blob’ом (magic 0x53485034, версия 4). Настройки Wi-Fi и MQTT — в собственных разделах NVS.
Безопасное состояние
Состояние выходов намеренно не пишется в память: после перезагрузки всегда восстанавливается заданное «safe»-положение, а не случайно залипший выход.
Ручной тайм-аут
Включённое вручную устройство может само выключиться через заданный интервал — удобно для света, вентиляции и ворот.
Вычислитель, память и экран
Плата класса JC1060P470C / JC-ESP32P4-M3: ESP32-P4 как основной SoC и ESP32-C6 как радиомодуль Wi-Fi 6, подключённый по ESP-Hosted (SDIO 40 МГц, «одно-портовый» путь Wi-Fi Remote).
| Узел | Значение | Примечание |
|---|---|---|
| SoC | ESP32-P4 rev 1.3 | 2×RISC-V @ 360 МГц, L2-кэш 256 КБ |
| Радио | ESP32-C6 | Wi-Fi 6 / BLE, ESP-Hosted SDIO 40 МГц |
| PSRAM | 32 МБ | HEX-режим, 200 МГц |
| Flash | 16 МБ (Boya) | DIO, 40 МГц |
| Дисплей | 1024×600 | MIPI-DSI, панель JD9165 |
| Тач | Ёмкостный | по шине I²C (GPIO7/8) |
| Консоль | USB Serial/JTAG | лог и прошивка, порт COM10 |
Интерфейсы и шины
Периферия распределена по трём шинам: общая I²C (тач + климатические датчики), изолированный RS-485 для силовой части и служебные интерфейсы платы (аудио, microSD).
I²C GPIO7 / GPIO8
- Тачскрин дисплея
- SHT45 — температура, влажность
- SCD41 — CO₂
- BH1750 — освещённость
- 100 кГц, внутр. подтяжка
RS-485 UART3 · GPIO26/27
- Изолированный разъём
- Modbus-RTU, 9600 8N1
- 2×8-канальные реле (адреса 1/2)
- Чтение дискретных входов
Аудио I²S ES8311 / ES7210
- MCLK 13, SCLK 12
- WS 10, DOUT 9, DIN 48
- Power-amp EN GPIO11
microSD SDIO 4-bit
- CLK 43, CMD 44
- D0–D3 39–42
- FatFS
Полная карта GPIO
Все выводы, задействованные прошивкой и BSP платы.
| Узел | Сигнал | GPIO | Тип | Примечание |
|---|---|---|---|---|
| Дисплей | MIPI-DSI данные/такт | DSI | MIPI-DSI | Панель JD9165, 1024×600 |
| Дисплей | Подсветка (BL) | 23 | LEDC/GPIO | Гасится первой в app_main |
| Дисплей | Reset (RST) | 0 | GPIO | Сброс панели |
| I²C | SDA | 7 | I²C0 | Тач + датчики, 100 кГц |
| I²C | SCL | 8 | I²C0 | SHT45 / SCD41 / BH1750 |
| RS-485 | UART3 TX | 26 | RS-485 | Изолированный, 9600 8N1 |
| RS-485 | UART3 RX | 27 | RS-485 | Реле и входы Modbus-RTU |
| Аудио | I²S MCLK / SCLK | 13/12 | I²S | Кодек ES8311 / ES7210 |
| Аудио | WS / DOUT / DIN | 10/9/48 | I²S | — |
| Аудио | Power-amp EN | 11 | GPIO | Включение УНЧ |
| microSD | CLK / CMD | 43/44 | SDIO | FatFS |
| microSD | D0–D3 | 39-42 | SDIO | 4-битный режим |
| Служебное | GPS UART1 (резерв) | 37/38 | UART | Зарезервировано, в SmartHome не используется |
Силовая периферия по Modbus-RTU
На изолированной шине UART3 (9600 8N1) прошивка ведёт до двух 8-канальных релейных модулей Waveshare с адресами 1 и 2 — суммарно 16 реле — и читает их дискретные входы.
Управление реле · функция 0x05
Запись одного coil: каналы 0–7 → модуль 1, 8–15 → модуль 2, номер coil = channel % 8. Команда подтверждается эхо-ответом модуля. Доступ к шине сериализован мьютексом.
Чтение входов · функция 0x02
Раз в секунду опрашиваются 8 дискретных входов каждого модуля. Устройства с транспортом «RS485 Input» отражают состояние входа — поплавок, протечка, геркон.
| Транспорт | Назначение | Адресация |
|---|---|---|
| RS485 Relay | Выход на реле | канал 0–15 |
| RS485 Input | Дискретный вход | канал 0–15 |
| Modbus | Обобщённое Modbus-устройство | адрес |
| I²C / 1-Wire | Локальные датчики | адрес / канал |
| MQTT | Публикация ON/OFF в command-топик | топик |
| Home Assistant | MQTT + подписка на state-топик | топик |
| ИК | ИК-пульт | канал |
Встроенная шина I²C
Отдельная задача опрашивает три датчика на общей шине GPIO7/8 каждые 5 секунд с проверкой CRC. Наличие каждого датчика определяется автоматически.
SHT45 0x44
- Температура −45…+130 °C
- Влажность относительная
- Команда высокой точности 0xFD
SCD41 0x62
- CO₂, ppm
- Периодическое измерение
- Чтение по data-ready
BH1750 0x23
- Освещённость, люкс
- Непрерывный режим выс. разрешения
- Пересчёт /1.2
Модель данных и правила исполнения
Каждое устройство описывается типом, транспортом и адресом; для него задаются safe-состояние, ручной тайм-аут, автоматика, расписание и MQTT-топики. Двенадцать типов устройств: реле, выключатель, свет, термостат, шторы, вентиляция, ворота, домофон, ИК-пульт, датчик, внешнее.
начало–конец (в минутах, с переходом через полночь). Инертно, пока время не синхронизировано по SNTP.manual_timeout_ms.16 правил.16 сцен.ON/OFF/OPEN/CLOSED/1/0 по state-топику устройства.pool.ntp.org и time.cloudflare.com, обновление раз в час.Интерфейс — 6 страниц
Тёмная тема, акцент #71C9FF, мгновенное переключение RU/EN (кнопкой в правом верхнем углу; с версии 0.22 выбор языка сохраняется в NVS и восстанавливается после перезагрузки), часы по SNTP и экранная клавиатура для переименования. Панель ниже воспроизводит реальную раскладку и цвета прошивки — нажимайте вкладки внизу.
Флеш, OTA и заливка
16 МБ флеша размечены под OTA A/B: два слота приложения по ~6,1 МБ, SPIFFS-хранилище и раздел coredump для диагностики.
| Раздел | Тип | Смещение | Размер |
|---|---|---|---|
| nvs | data / nvs | 0x00C000 | 24 КБ |
| otadata | data / ota | 0x012000 | 8 КБ |
| phy_init | data / phy | 0x014000 | 4 КБ |
| ota_0 | app | 0x020000 | 6,1 МБ |
| ota_1 | app | 0x640000 | 6,1 МБ |
| storage | data / spiffs | 0xC60000 | 3 МБ |
| coredump | data / coredump | 0xF60000 | 640 КБ |
python -m esptool --chip esp32p4 -b 460800 --before default_reset --after hard_reset write_flash 0x0 SmartHome_P4_MERGED_v0.22_20260731.bin
