docs: import wiki pages into the repo (core/integrations/hardware)

Ported the relevant lazyhome.ru dokuwiki pages to markdown, verified against
the code; each page carries a 'cross-check with code' section where behavior
differs from or extends the wiki.
This commit is contained in:
2026-10-03 00:41:20 +03:00
parent b90325bfef
commit 724224a503
16 changed files with 2548 additions and 0 deletions
+215
View File
@@ -0,0 +1,215 @@
# Заливка прошивки
> Источник: Wiki LightHub (lazyhome.ru), страница «заливка_прошивки». Снапшот от 2026-10-02.
## Заливка уже откомпилированной прошивки
В первую очередь необходимо скачать сам проект.
Это можно сделать либо с использованием утилиты git:
`git clone https://github.com/anklimov/lighthub.git`
Либо, если у вас она не установлена - открываем [https://github.com/anklimov/lighthub](https://github.com/anklimov/lighthub)
Далее, нажимаем зеленую кнопку "Clone or download"
Выбираем пункт "Download ZIP", скачиваем и распаковываем архив
Переходим в директорию lighthub-master/compiled/<требуемая_платформа> (список платформ выше)
Подключаете плату USB кабелем к компьютеру (кроме платформы NRF52 - там программирование только при помощи специального устройства JLink, об этом позже)
В диспетчере устройств находите порт, на который села плата (например, com3)
корректируете номер порта в файле upload.bat, который находится в директории, в которую вы вошли
Запускаете файл на выполнение (если выдается запрос "нажмите любую клавишу" - нажимаете)
Прошивка должна загрузиться в ваш контроллер.
## Компиляция и заливка с использованием platformio + Atom или VSC
Проект создан с использование Platformio , аналога Arduino IDE.
Сперва необходимо скачать Visual Studio Code или Atom, установить Platformio в качестве плагина. В интернете много материалов и видеоуроков на эту тему. Скорее всего потребуется установить клиент Git (Для Windows https://git-scm.com/download/win).
Далее, как и в предыдущем случае, необходимо скачать сам проект.
Проект создан с использование Platformio , аналога Arduino IDE.
Это можно сделать либо с использованием утилиты git:
`git clone https://github.com/anklimov/lighthub.git`
Либо, если у вас она не установлена - открываем [https://github.com/anklimov/lighthub](https://github.com/anklimov/lighthub)
Далее, нажимаем зеленую кнопку "Clone or download"
Выбираем пункт "Download ZIP", скачиваем и распаковываем архив
В Atom или VSC выбираем пункт "Открыть директорию" (Open Folder), и указываем директорию lighthub.master (или в директорию lighthub если использовался git)
Далее, выбираем файл platformio.ini и раскомментариваем в нем нужный вам вариант платформы (платы) в пункте env_default (убираем ; перед строкой, содержащей нужную платформу, добавляем - перед строкой, содержащей ненужные платформы)
NEW - если используете среду VSC (рекомендуется) - то можете ничего не комментировать/раскомментировать а просто выбрать нужную платформу в меню "switch PlatformIO Project environment" (нажмите на Default (lighthub) в самом низу экрана)
**Для платформы DUE:** обязательно придется найти фаил variant.cpp по пути
`.platformio/packages/framework-arduinosam/variants/arduino_due_x`
и вставить в него **последней строкой** следующую строку
`void USART0_Handler(void) __attribute__((weak));`
сохранить.
(К сожалению, внести это простое изменение в штатный репозиторий arduino не удалось никому из тех, кто создавал Pull request)
Нажимаем кнопку "Build"
Platformio скачивает все нужные библиотеки и компилирует код. Возможно придется несколько раз повторить эту операцию, так как по непонятным причинам, platformio может выдавать ошибки, не скачав какую-то библиотеку.
Если компиляция прошла успешно, можно подключить плату USB кабелем и нажать кнопку Upload
## Компиляция и заливка с использованием platformio. Вариант командная строка
Для того что бы прошить плату в первую очередь необходимо скачать сам проект [https://github.com/anklimov/lighthub](https://github.com/anklimov/lighthub) и установить Platformio
* Если Вы считатет себя джедаем и не ищете легких путей то работать с платформио можно через командную строку. Для этого нужно:
- установить Python 2.7,
- установить git.
* Модифицировать PATH. идем: мой компьютер->правой кнопокой мыши вызываем контекстное меню->свойства->в появившемся окне "переменные среды"-> в окне "Системные переменные" выбираем переменную Path ->изменить->добавляем строку
`;C:\Python27;C:\Python27\Scripts`
* Установить Platformio открываем командную строку (поиск в "Пуске" cmd.exe) вводим команду
`pip install -U platformio`
Учтите, что Platformio установится по умолчанию в папку пользователя `С:\Пользователи\Имя пользователя\.platformio` Python 2.7 не поддерживает кириллицу, если имя пользователя написано кириллицей, необходимо скопировать папку Platformio в корень диска C:\ и изменить путь к рабочему каталогу в фале platformio.ini (который находится в ранее скачанной папке lighthub-master), указав после строки [platformio] следующую строку: `home_dir = C:\.platformio`
Сохраняем файл.
Открываем папку lighthub-master, в строке отображающей путь вводим cmd и нажимаем enter или же выбираем папку в командной строке любым другим способом.
**Для платформы DUE:** обязательно придется найти фаил variant.cpp по пути
`.platformio/packages/framework-arduinosam/variants/arduino_due_x`
и вставить в него **последней строкой** следующую строку
`void USART0_Handler(void) __attribute__((weak));`
сохранить.
Далее вводим `pio run -e <платформа>`
Вариант <платформа> выберете в зависимости от используемой аппаратной платформы.
```
; Arduino Mega compact build + Ethernet shield Wiznet 5X00, 1-wire, thermostates.
; mega2560slim
; Another Arduino Mega compact build without 1-wire, DMX, but with OTA
; OPTIBOOT bootloader required! https://github.com/MCUdude/MegaCore
; mega2560-optiboot
; Arduino Mega + Ethernet shield Wiznet 5100
; mega2560-5100
; Arduino Mega (Ethernet shield Wiznet 5X00, DMX, Artnet)
; mega2560
; LightHub controller HW revision 2.1 and above (Wiznet 5500 CS on pin 53)
; Если у вас плата LightHub версии 2.1 или более новая + DUE - используйте эту конфигурацию
; **lighthub21**
; Arduino DUE + Ethernet shield Wiznet 5X00
; Предпочтительный вариант для DUE с Ethernet Shield (не для платы LightHub), базированный на универсальном драйвере
; **due**
; ESP 8266
; **esp8266-wifi**
; ESP-32
; **esp32-wifi**
; ESP-32-C3
; **esp32c3-wifi**
; M5Stack core (ESP32 based)
; m5stack
; Controllino
; controllino
; STM32 board + ENC28j60 network
; stm32-enc2860
; STM32 board (olmexino) with WIZNET 5X00 network
; stm32
; STM32 board, no IP (LightSpot)
; stm32-noip
; NRF52 board + Wiznet 5x00 network
; nrf52840
```
> **Примечание (сверка с кодом, 2026-10-02):** в оригинальном тексте wiki список целей в этом блоке был устаревшим — там фигурировали `mega2560slim-5100`, `mega2560-5500`, `due-5100`, `due-5500` и `nrf52840-5500`, а отсутствовали `nrf52840`, `mega2560`, `mega2560-optiboot`, `esp32c3-wifi`, `stm32`, `stm32-noip`. Список выше восстановлен по фактическим окружениям из `platformio.ini`.
Пример: "due" - это плата Arduino DUE + Ethernet Shield на чипе Wiznet-5X00 (универсальный драйвер)
**В общем случае, используйте варианты без указания 5100 или 5500 - в этом случае будет использован универсальный драйвер Wiznet**
Если плата LightHub версии 2.1 или выше то используйте опцию "lighthub21"
Проект должен скомпилироваться без ошибок.
**ЧАСТО Platformio выдает ошибки на ровном месте (не находит какие-либо файлы). В этом случае, повторный запуск компиляции часто решает эту проблему**
Если ошибок нет вводим `pio run -e <платформа> -t upload`
Программа должна залиться в аппаратную платформу.
Если возникли ошибки:
Попробовать очистить папку с библиотеками .piolibdeps и .pioenv удалив все их содержимое
## Использование Arduino IDE для компиляции и заливки прошивки
Это достаточно трудоемкий процесс, который требует, чтобы вы вручную установили массу библиотек в IDE.
platformio - намного более гибкое и профессиональное средство - лучше и проще использовать его.
Если для кого-то будет важно освоить именно этот метод - пишите, мы пополним инструкцию.
Если возникают проблемы - пишите на форуме или в [группу Телеграмм](https://t.me/lighthub)
(Вы, также, можете улучшать эту инструкцию)
---
## Сверка с кодом (2026-10-02)
**Фактические окружения (env) в `platformio.ini`:**
| env | Платформа / описание | Папка в `compiled/` |
|-----|----------------------|---------------------|
| `due` | Arduino DUE, универсальный Wiznet-драйвер | `due/` |
| `lighthub21` | LightHub HW rev 2.1+ (Wiznet 5500, CS на пине 53), DUE | `lighthub21/` |
| `mega2560` | Arduino Mega + Wiznet 5X00, DMX, Artnet | `mega2560/` |
| `mega2560slim` | Mega компактная сборка + Wiznet, 1-wire, термостаты | `mega2560slim/` |
| `mega2560-optiboot` | Mega компактная + OTA (нужен OPTIBOOT) | `Mega2560-optiboot/` |
| `mega2560-5100` | Mega + Ethernet Wiznet 5100 | `mega2560-5100/` |
| `esp8266-wifi` | ESP8266 (Wi-Fi) | `esp8266-wifi/` |
| `esp32-wifi` | ESP32 (Wi-Fi) | `esp32-wifi/` |
| `esp32c3-wifi` | ESP32-C3 (Wi-Fi) | `esp32c3-wifi/` |
| `m5stack` | M5Stack (ESP32) | `m5stack/` |
| `nrf52840` | NRF52840 + Wiznet 5x00 | `nrf52840/` |
| `controllino` | Controllino (AVR) | `controllino/` |
| `stm32` | STM32 (olmexino) + WIZNET 5X00 | `stm32/` |
| `stm32-enc2860` | STM32 + ENC28J60 | `stm32-enc2860/` |
| `stm32-noip` | STM32, без IP-стека (LightSpot) | — (папки нет) |
(Также в `platformio.ini` есть служебные env `Upload_ISP` и `fuses_bootloader` для прошивки OPTIBOOT — они не являются целевыми сборками.)
**Папки в `compiled/`:** `controllino`, `due`, `DUE_16u2_reflash`, `esp32-wifi`, `esp32c3-wifi`, `esp8266-wifi`, `lighthub21`, `m5stack`, `mega2560`, `mega2560-5100`, `Mega2560-optiboot`, `mega2560slim`, `nrf52840`, `nrf52840-5500`, `stm32`, `stm32-enc2860`, `tools`.
**Расхождения wiki ↔ кода:**
- Список целей в wiki устарел: упоминаются несуществующие env `mega2560slim-5100`, `mega2560-5500`, `due-5100`, `due-5500`. В текущем `platformio.ini` их нет — для DUE и Mega используется универсальный Wiznet-драйвер (`due`, `mega2560`). Список в тексте исправлен по факту (см. примечание выше).
- `nrf52840-5500` в wiki указан как env, в `platformio.ini` такого env нет (есть только `nrf52840`), но в `compiled/` папка `nrf52840-5500/` присутствует — вероятно, это отдельная уже скомпилированная сборка, не являющаяся отдельным env.
- `stm32-noip` — есть в `platformio.ini`, но готовой папки в `compiled/` нет.
- `DUE_16u2_reflash/` в `compiled/` — утилита для перепрошивки USB-чипа 16u2, не целевая сборка.
- Замечание о DUE: инструкция про правку `variant.cpp` (добавление `void USART0_Handler(void) __attribute__((weak));`) актуальна — в репозитории собственного `lighthub/variant.cpp` нет, используется вариант DUE из пакета PlatformIO `framework-arduinosam`.
@@ -0,0 +1,69 @@
# LightHub на разном железе
> Источник: Wiki LightHub (lazyhome.ru), страница «lighthub_на_разном_железе». Снапшот от 2026-10-02.
Прошивка может компилироваться и работать на следующих аппаратных платформах:
1. AVR Arduino MEGA 2560 - первая платформа, на которой была реализована. Прошивка оттестирована на этом железе. Но в настоящее время, уже не рекомендуется по причине ограниченной оперативной памяти. (не получится использовать всю периферию, но для небольших инсталляций подойдет)
2. Arduino DUE - в настоящее время, базовая платформа. Используется в контроллерах LightHub. Прошивка тщательно оттестирована на этом железе. Все новые функции изначально внедряются под эту платформу.
3. ESP8266 - Достаточно полнофункциональная стабильная сборка.
4. ESP32 - Достаточно полнофункциональная стабильная сборка.
5. NRF52840 - пилотная сборка, поддерживающая базовый функционал
6. STM32 - сборка с ограниченной функциональностью, является базовой для устройства LightSpot (минимальное LightHub устройство без IP стека, которое взаимодействует с внешним миром через полноценные устройства LightHub по шинне CAN)
Базовые возможности прошивки LightHUB поддерживаются на любом железе. К ним относится:
* Единообразное конфигурирование с использованием JSON
* Поддержка MQTT и интеграция, фактически, с любой системой Умного Дома, поддерживающей данный протокол, включая, сенсоры, выключатели, термостаты(теплые полы), кондиционеры.
* Поддержка всего расширенного набора команд, группы каналов, сохранение цвета/яркости и пр
* Восстановление состояния контроллера и каналов при перезапуске из MQTT
* Локальное управление каналами (даже при отсутствии сетевого соединения)
* Термостаты (до 20-ти, в пределах кол-ва дискретных выходов)
* Гибкая настройка работы с выключателями/кнопками, включая распознавание одинарного, двойного, тройного нажатия, длительного нажатия, кратковременного выключения
Возможности прошивки, зависящие от железа:
| Возможность | Mega2560 | DUE | ESP8266 | ESP32 | NRF52840 | STM32 | CONTROLLINO |
|---|---|---|---|---|---|---|---|
|DMX512 In|+|+|-|-|-|-|-|
|DMX512 Out|+|+|+|+|-|-|-|
|Artnet|+|+|+|-|?|?|+|
|1-Wire software|+|+|+|+|+|?|+|
|1-Wire DS2482-100|+|+|+|+|+|+|+|
|MCP23017 - I2C расширитель портов|+|+|+|?|?|?|?|
|Wiznet 5100 Ethernet|+|+|+|+|-|+|+|
|Wiznet 5500 Ethernet|+|+|+|+|+|+|-|
|Wi-Fi|-|-|+|+|-|-|-|
|Modbus Master|+|+|+|+|+|+|+|
|DHT-22|+|+|+|+|+|?|+|
|CCS811 & HDC1080 - сенсоры влажности и eCO2|+|+|+|+|+|?|+|
|Управление кондиционерами Haier через UART|+|+|+|+|+|+|+|
|Управление задвижками вентиляции с резистором ОС|+|+|+|+|?|?|+|
|SPI-LED адресные ленты|+|+|+|+|+|+|+|
|Watchdog|+|+|?|?|?|?|+|
|Сохранение конфигурации во FLASH|+|+|+|+|-|?|+|
|CAN|-|+|-|+|-|+|-|
|Дискретных входов||||||||
|Аналоговых входов||||||||
|Дискретных выходов||||||||
|PWM выходов||||||||
|OTA|+-Optiboot bootloader|+|+|+|-|-|-|
|Плавное управление DMX|-|+|-|-|-|-|-|
(Легенда: `+` — поддерживается, `-` — не поддерживается, `?` — не проверено / зависит от конкретной реализации.)
---
## Сверка с кодом (2026-10-02)
- Перечень платформ в тексте (Mega2560, DUE, ESP8266, ESP32, NRF52840, STM32) **совпадает** с окружениями `platformio.ini`: `mega2560`/`mega2560slim`/`mega2560-optiboot`/`mega2560-5100`, `due`/`lighthub21`, `esp8266-wifi`, `esp32-wifi`/`esp32c3-wifi`/`m5stack`, `nrf52840`, `stm32`/`stm32-enc2860`/`stm32-noip`, а также `controllino`.
- Текст не упоминает **ESP32-C3** (env `esp32c3-wifi`) и **M5Stack** (env `m5stack`, ESP32-based) — в таблице возможностей у них стоит колонка ESP32; фактически это отдельные сборки.
- **STM32 / LightSpot**: в `platformio.ini` есть `stm32-noip` — сборка без IP-стека (LightSpot), что соответствует описанию в п. 6.
- **CAN**: в таблице отмечен только для DUE и ESP32/STM32. В `lighthub21`/`due` используется библиотека `collin80/due_can` (см. `platformio.ini`), для ESP32 — `anklimov/arduino-CAN`, для STM32 (stm32-noip) — `pazi88/STM32_CAN`. Совпадает.
- **Wi-Fi** только у ESP8266/ESP32 — подтверждается наличием `WIFI_ENABLE`/`WiFiManager` только в ESP-окружениях.
- **Сохранение конфигурации во FLASH** не поддержано у NRF52840 в таблице — в env `nrf52840` используется `NRFFlashStorage`/`d00616/arduino-NVM`, что требует уточнения (в таблице стоит `-`/`?`).
+51
View File
@@ -0,0 +1,51 @@
# MAC-адрес контроллера
> Источник: Wiki LightHub (lazyhome.ru), страница «mac_адрес». Снапшот от 2026-10-02.
Важно, чтобы у вашего контроллера был уникальный MAC адрес.
Это важно не только потому, что в пределах одной локальной сети два контроллера с одинаковыми MAC не могут работать но еще и потому, что при старте, контроллер загружает с сервера конфигураций или с других контроллеров по шине CAN свою настройку, используя MAC как свой уникальный ключ.
У разных аппаратных платформ ситуация с MAC адресами разная:
* ESP8266 и ESP32 и так имеют уникальные адреса, тут ничего мудрить не надо
* DUE и STM имеют уникальный ID каждого чипа, из которого прошивка генерирует уникальный MAC
* Mega2560 не имеет такого ID, но, зато, имеет честный EEPROM, в который при первом запуске этот адрес можно записать и он сохранится на всю жизнь, даже если контроллеру обновлять прошивку
Кроме этого, при компиляции прошивки, можно задать опцию `CUSTOM_FIRMWARE_MAC` - в этом случае, у прошивки будет такой MAC адрес, как вы задали
Также, MAC адрес можно заменить командой `mac DE:22:33:11:22:33`, подключившись к контроллеру через [CLI-интерфейс](../core/cli_interface.md) (вместо DE:22:33:11:22:33 - ваш адрес)
В случае Mega2560 это будет запомнено навсегда, в случае DUE - до следующей загрузки прошивки.
Замену MAC через опцию либо через команду не тестировал на ESP - там это совсем не нужно.
Для того, чтобы самостоятельно сгенерировать MAC - прочитайте [Википедию](https://ru.wikipedia.org/wiki/MAC-адрес#.D0.A1.D1.82.D1.80.D1.83.D0.BA.D1.82.D1.83.D1.80.D0.B0_MAC-.D0.B0.D0.B4.D1.80.D0.B5.D1.81.D0.B0)
Если коротко, то у самой первой цифры, два младших бита должны быть "10", что соответствует не Multicast адресу, отвязанному от производителя
Если лень считать, возьмите первую цифру Макадреса, например, DE или 02, остальное - придумывайте как хотите
Посмотреть MAC адрес вашего контроллера проще всего, подключившись по USB - он будет выведен при перезагрузке контроллера
См. [как LightHub работает с файлом конфигурации — подключение по USB](../core/config_file_workflow.md)
---
## Сверка с кодом (2026-10-02)
Проверено по `lighthub/main.cpp` (функция `setupMacAddress()`, строка 2817) и `lighthub/options.h`.
Логика генерации MAC в `setupMacAddress()` (при отсутствии MAC в NVRAM) выстроена цепочкой условий, что **полностью подтверждает** описание в wiki:
| Платформа | Механизм в коде | Строки | Соответствие wiki |
|---|---|---|---|
| (все) `CUSTOM_FIRMWARE_MAC` | MAC разбирается из build-flag (`parseBytes(macStr, ':', ...)`), затем принудительно: `mac[0] &= 0xFE; mac[0] \|= 2;` (locally-administered, не multicast) | main.cpp:2823-2828 | ✅ «опция CUSTOM_FIRMWARE_MAC» |
| ESP8266/ESP32 (`WIFI_ENABLE`) | Используется штатный MAC чипа: `WiFi.macAddress(sysConf.mac)` | main.cpp:2830-2833 | ✅ «ESP и так имеют уникальные адреса» |
| DUE (`__SAM3X8E__`) / STM32 (`ARDUINO_ARCH_STM32`) | MAC генерируется из серийного номера чипа: `mac[0]=0xDE;` остальные байты = сумма байтов `UniqueID.UID_Byte[]` | main.cpp:2835-2840 | ✅ «DUE и STM имеют уникальный ID чипа» |
| fallback `DEFAULT_FIRMWARE_MAC` | Хардкод `{0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFF}` | options.h:180 | (доп. fallback, в wiki не описан) |
**Дополнительные подтверждения:**
- **Mega / EEPROM**: MAC хранится в NVRAM и читается в `systemConfig::getMAC()` (`config.cpp:44-47`), область EEPROM описана константой `OFFSET_MAC`/`EEPROM_FIX_PART_LEN` (`options.h:128`). Для Mega запись в EEPROM сохраняется при перепрошивке — согласуется с утверждением «запомнено навсегда».
- **Команда `mac`**: обработчик `cmdFunctionSetMac` (`main.cpp:1820`) парсит адрес формата `de:ad:be:ef:fe:00` и сохраняет его в EEPROM. Команда регистрируется только при `not FLASH_64KB` (`main.cpp:2860`). Подтверждает возможность замены MAC командой.
- **Вывод MAC по USB**: функция `printMACAddress()` (`main.cpp:543`) выводит адрес в `infoSerial` при старте — совпадает с «выведен при перезагрузке контроллера».
**Нюанс (расхождение):** wiki утверждает, что замена MAC командой/опцией «не тестировал на ESP». В коде для ESP32 при старте вызывается `wifi_set_macaddr(STATION_IF, sysConf.mac)` (`main.cpp:1207`) — то есть механизм замены MAC на ESP в коде присутствует, хоть и, вероятно, не всегда применяется на практике.
+240
View File
@@ -0,0 +1,240 @@
# Входы и выходы платы LightHub
> Источник: Wiki LightHub (lazyhome.ru), страница «входы_выходы». Снапшот от 2026-10-02.
## Электропитание
Контроллер имеет на борту DCDC преобразователь, который может обеспечивать питание устройства, а также, воспомогательных приборов от напряжения в диапазоне 12-29В
(Только v2.2) При превышении напряжения 30В, а также, при переполюсовке, сработает защитный TWS диод, замкнув цепь питания, что приведет к отключению самовосстанавливающегося предохранителя контроллера, рассчитанного на ток 1,2А либо к срабатыванию защиты используемого блока питания.
DCDC преобразователь может работать в двух режимах, выбираемых джампером JХ (серый на рисунке ниже)
Если джампер замкнут - выходное напряжение преобразователя составляет 5В, если разомкнут - 7В (на более ранних версиях железа было 9В, но мы уменьшили это значение для меньшего тепловыделения на линейном стабилизаторе устройства)
~~Процессорная плата Ардуино может питаться как с выхода DCDC преобразователя так и непосредственно от входного питания устройства.
Режим питания платы Ардуино выбирается джампером J4 (желто-фиолетовый на рисунке ниже)
В "желтом" режиме, Ардуино питается с выхода DCDC, в фиолетовом - от входного питания.
_Важно: при использовании второго (фиолетового) режима, контроллер следует питать от источника 12В. Использование источника 24В выведет процессорную плату из строя_~~
Внимание: Используйте контроллер версии 2.2 ТОЛЬКО в режиме, когда плата Ардуино питается от DCDC преобразователя. (J4 в Желтом режиме). Испытания показали, что DCDC преобразователь в ином случае работает нестабильно.
Если выбран режим питания Ардуино от DCDC преобразователя, преобразователь должен быть настроен на напряжение 7В (джампер JX разомкнут), так как 5В, в большинстве случаев, недостаточно для стабильной работы Ардуино.
Соответственно, единственное допустимое расположение джамперов: J4 - Желтый режим, JX-разомкнут
В этом режиме напряжение 7В с выхода DCDC преобразователя можно использовать для питания внешних цепей до 2А
~~Режим преобразователя 5В может быть использован для питания внешней нагрузки током до 2,5А подключенной к винтовым клеммам X24 в том случае, если контроллер запитан от внешнего источника 12В~~
В данном режиме, входное напряжение питания контроллера: 12-24В
(рекомендуется 12В для уменьшения нагрузки на линейный стабилизатор опорного напряжения 10В)
~~Возможные конфигурации электропитания
|Входной диапазон |J4 |JX | Макс. ток UEXT 3.3V | Макс. ток UEXT 5V |Примечание|
|---|---|---|---|---|---|
|12-24В| DCDC (желтый)| OPEN (9V)|100mA|600mA|На клеммах X24 напряжение 9В|
|12В| Vin (фиолетовый)| OPEN (9В)|100mA|300mA|На клеммах X24 напряжение 9В|
|12В| Vin (фиолетовый)| CLOSED (5В)|300mA|300mA|На клеммах X24 напряжение 5В|~~
Джампером J2 можно задать напряжение, подаваемое на переферийный разъем стандарта UEXT
Возможны варианты 3,3В (стандартное напряжение UEXT) и 5В (нестандартное, но требуемое для ряда модулей)
См. рисунок ниже.
Контроллер поставляется с перемычками, установленными для работе в диапазоне питающих напряжений 12-24В и UEXT 3,3В
_Внимание: логические уровни сигналов на разъеме UEXT соответствуют применяемой процессорной плате: 5В для MEGA2560 и 3,3В для DUE_
_Подача уровней, превышающие данные значения, могут вывести процессор из строя._
## Версия платы 2.2
### Разьемы и джамперы
(см. иллюстрацию на [wiki-странице](https://www.lazyhome.ru/dokuwiki/doku.php?id=входы_выходы) — `инфографика.pdf`, В PDF)
(см. иллюстрацию на [wiki-странице](https://www.lazyhome.ru/dokuwiki/doku.php?id=входы_выходы) — `lighthub22_pinout.png`)
В этой таблице приведено соответствие физических PIN-ов Arduino Mega/DUE и входов/выходов платы LightHub 2.2
**В конфигурации контроллера пока можно использовать только цифровое значение из столбца MPU PIN**
Выберете по таблице интересующий вход или выход, найдите в таблице номер MPU PIN, его используйте в конфиге
Также, таблица пригодится чтобы преобразовать названия аналоговых каналов в цифровой номер PIN
_Внимание: максимальные уровни сигналов на клеммниках PWM 0-3, PWM 10, и разъеме RJ-45 (UNPROT 0-7) соответствуют применяемой процессорной плате: 5В для MEGA2560 и 3,3В для DUE_
_Подача на данные разъемы напряжений, превышающие данные значения, могут вывести процессор из строя._
_Данные входы не защищены. Подключайте к ним только локальную слаботочную нагрузку_
| Mnemonic | MPU PIN # | Plug | Plug PIN | Gnd | Comment |
|---|---|---|---|---|---|
|A0|54|X36 (IDC)|3|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A1|55|X36 (IDC)|4|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A2|56|X36 (IDC)|5|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A3|57|X36 (IDC)|6|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A4|58|X36 (IDC)|7|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A5|59|X36 (IDC)|8|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A6|60|X36 (IDC)|9|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A7|61|X36 (IDC)|10|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|-|-|X36 (IDC)|17|13,14,15,16|CAN H - (Начиная с V3.0)|
|-|-|X36 (IDC)|18|13,14,15,16|CAN L - (Начиная с V3.0)|
|A8|62|X36 (IDC)|19|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A9|63|X36 (IDC)|20|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A10|64|X36 (IDC)|21|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A11|65|X36 (IDC)|22|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|DA12|66|X36 (IDC)|23|13,14,15,16|Дискретный защищенный вход (слаботочный выход)|
|DA13|67|X36 (IDC)|24|13,14,15,16|Дискретный защищенный вход (слаботочный выход) - не использовать в случае использования CAN (начиная с V3.0)|
|DA14|68|X36 (IDC)|25|13,14,15,16|Дискретный защищенный вход (слаботочный выход) - не использовать в случае использования CAN (начиная с V3.0)|
|DA15|69|X36 (IDC)|26|13,14,15,16|Дискретный защищенный вход (выход)|
|+10V|-|X36 (IDC26)|2|1|Опорное напряжение 10В|
|POUT0|22|X15||X14|Мощный дискретный выход|
|POUT1|23|X16|||Мощный дискретный выход|
|POUT2|24|X17|||Мощный дискретный выход|
|POUT3|25|X18|||Мощный дискретный выход|
|POUT4|9|X19|||Мощный PWM выход. Продублирован слаботочным на X11|
|POUT5|8|X20|||Мощный PWM выход. Продублирован слаботочным на X10|
|POUT6|11|X21|||Мощный PWM выход. Продублирован слаботочным на X12|
|POUT7|12|X22|||Мощный PWM выход. Продублирован слаботочным на X13|
|PWM0|4|X7|||Незащищенный PWM вход/выход |
|PWM1|5|X6|||Незащищенный PWM вход/выход |
|PWM2|6|X8|||Незащищенный PWM вход/выход |
|PWM3|7|X9|||Незащищенный PWM вход/выход |
|PWM10|10|X414|||Незащищенный PWM вход/выход |
|UNPROT0|33|X35 (RJ45)|1|Shield|Незащищенный дискретный вход/выход|
|UNPROT1|32|X35 (RJ45)|2||Незащищенный дискретный вход/выход |
|UNPROT2|31|X35 (RJ45)|3||Незащищенный дискретный вход/выход |
|UNPROT3|30|X35 (RJ45)|4||Незащищенный дискретный вход/выход |
|UNPROT4|29|X35 (RJ45)|5||Незащищенный дискретный вход/выход |
|UNPROT5|28|X35 (RJ45)|6||Незащищенный дискретный вход/выход |
|UNPROT6|27|X35 (RJ45)|7||Незащищенный дискретный вход/выход |
|UNPROT7|26|X35 (RJ45)|8||Незащищенный дискретный вход/выход |
|IN0|42|X27 (IDC26)|14|13|Опторазвязанный вход двухпроводный|
|IN1|44|X27 (IDC26)|12|11|Опторазвязанный вход двухпроводный|
|IN2|46|X27 (IDC26)|10|9|Опторазвязанный вход двухпроводный|
|IN3|48|X27 (IDC26)|8|7|Опторазвязанный вход двухпроводный|
|IN4|43|X27 (IDC26)|6|1|Опторазвязанный вход|
|IN5|45|X27 (IDC26)|5|1|Опторазвязанный вход|
|IN6|47|X27 (IDC26)|4|1|Опторазвязанный вход|
|IN7|49|X27 (IDC26)|3|1|Опторазвязанный вход|
|IN8|34|X27 (IDC26)|22|21|Опторазвязанный вход двухпроводный|
|IN9|36|X27 (IDC26)|20|17|Опторазвязанный вход двухпроводный|
|IN10|38|X27 (IDC26)|18|19|Опторазвязанный вход двухпроводный|
|IN11|40|X27 (IDC26)|16|15|Опторазвязанный вход двухпроводный|
|IN12|35|X27 (IDC26)|26|1|Опторазвязанный вход|
|IN13|37|X27 (IDC26)|25|1|Опторазвязанный вход|
|IN14|39|X27 (IDC26)|24|1|Опторазвязанный вход|
|IN15|41|X27 (IDC26)|23|1|Опторазвязанный вход|
|+10V|-|X27 (IDC26)|2|1|Опорное напряжение 10В|
### Варианты подключения к дискретным входам
Для гальванической развязки дискретных входов, использованы симметричные оптроны. Симметричные - это значит они открываются либо положительным либо отрицательным потенциалом (3-12В).
Это позволяет использовать фактически любые контактные или потенциальные датчики, соединенные как с плюсом питания так и с нулем.
8 из 16-ти оптронов (IN4-IN7, IN12-IN15) соединены одним общим проводом, который выведен на pin1 разьема Х27
Другие 8 оптронов (IN0-IN3, IN8-IN11) выведены обоими контактами на соответствующие выходы разьема X27, согласно таблице выше
Последовательно с входом оптрона установлен токоограничивающий резистор
Опционально, может быть запаян резистор "0 ом" с нижней стороны платы, который соединит Pin1 с общим проводом контроллера, но в стандартной поставке это не делается для сохранения универсальности.
Соответственно:
* Pin1 нужно самостоятельно подключить к общему нулю системы вовне контроллера - тогда входы (IN4-IN7, IN12-IN15) будут активироваться подачей напряжения 3-12В на соответствующие контакты X27 (например, на контакт 6 для активации входа IN4)
* Либо Pin1 можно подключить к источнику опорного напряжения 10В (Pin2) а соответствующий вход активировать соединением его с нулем. (Внимание, сначала при помощи омметра убедитесь что не впаян опциональный резистор, соединяющий Pin0 с нулем контроллера)
Для работы со входами (IN0-IN3, IN8-IN11) обратный контакт этих входов надо, также, подключить либо к нулю либо к опорному напряжению (X27 Pin 13, 11, 9, 7, 21, 17, 19, 15) по аналогии с Pin1
Это можно сделать как при помощи перемычек на клеммнике, так и запаивая специально выведенные джамперы на верхней стороне платы (возле оптронов)
Запаивание джампера подключает обратный вход соответствующего оптрона к Pin1, обьединяя его с общей группой входов
Возможность полностью гальванически изолировать контролируемый сигнал от контура LightHub бывает очень важна для обеспечения безопасности или помехозащищенности. Например, вы контролируете цепи, гальванически связанные с электросетью или удаленные обьекты, обьединение нулевых проводов которых с нулем контроллера крайне нежелательно (концевики ворот, например)
В этом случае, используйте входы (IN0-IN3, IN8-IN11) не подключая обратный контакт входа к цепям контроллера. Используйте два выделенных провода, чтобы подключить вход к контролируемому устройству.
## Версия платы 2.0 (устаревшая)
### Разьемы и джамперы
(см. иллюстрацию на [wiki-странице](https://www.lazyhome.ru/dokuwiki/doku.php?id=входы_выходы) — `lighthub2pinout.jpeg`)
В этой таблице приведено соответствие физических PIN-ов Arduino Mega/DUE и входов/выходов платы LightHub 2.0
**В конфигурации контроллера пока можно использовать только цифровое значение из столбца MPU PIN**
Выберете по таблице интересующий вход или выход, найдите в таблице номер MPU PIN, его используйте в конфиге
Также, таблица пригодится чтобы преобразовать названия аналоговых каналов в цифровой номер PIN
#### Таблица контактов
| Mnemonic | MPU PIN # | Plug | Plug PIN | Gnd | Comment |
|---|---|---|---|---|---|
|A0|54|X36 (IDC)|1|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A1|55|X36 (IDC)|2|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A2|56|X36 (IDC)|3|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A3|57|X36 (IDC)|4|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A4|58|X36 (IDC)|5|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A5|59|X36 (IDC)|6|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A6|60|X36 (IDC)|7|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A7|61|X36 (IDC)|8|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A8|62|X36 (IDC)|19|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A9|63|X36 (IDC)|20|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A10|64|X36 (IDC)|21|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|A11|65|X36 (IDC)|22|13,14,15,16|Аналоговый защищенный вход (слаботочный выход)|
|DA12|66|X36 (IDC)|23|13,14,15,16|Дискретный защищенный вход (слаботочный выход)|
|DA13|67|X36 (IDC)|24|13,14,15,16|Дискретный защищенный вход (слаботочный выход)|
|DA14|68|X36 (IDC)|25|13,14,15,16|Дискретный защищенный вход (слаботочный выход)|
|DA15|69|X36 (IDC)|26|13,14,15,16|Дискретный защищенный вход (выход)|
|POUT0|22|X15||X14|Мощный дискретный выход|
|POUT1|23|X16|||Мощный дискретный выход|
|POUT2|24|X17|||Мощный дискретный выход|
|POUT3|25|X18|||Мощный дискретный выход|
|POUT4|9|X19|||Мощный PWM выход. Продублирован слаботочным на X11|
|POUT5|8|X20|||Мощный PWM выход. Продублирован слаботочным на X10|
|POUT6|11|X21|||Мощный PWM выход. Продублирован слаботочным на X12|
|POUT7|12|X22|||Мощный PWM выход. Продублирован слаботочным на X13|
|PWM0|4|X7|||Незащищенный PWM вход/выход |
|PWM1|5|X6|||Незащищенный PWM вход/выход |
|PWM2|6|X8|||Незащищенный PWM вход/выход |
|PWM3|7|X9|||Незащищенный PWM вход/выход |
|UNPROT0|33|X35 (RJ45)|1|Shield|Незащищенный дискретный вход/выход|
|UNPROT1|31|X35 (RJ45)|2||Незащищенный дискретный вход/выход |
|UNPROT2|32|X35 (RJ45)|3||Незащищенный дискретный вход/выход |
|UNPROT3|30|X35 (RJ45)|4||Незащищенный дискретный вход/выход |
|UNPROT4|29|X35 (RJ45)|5||Незащищенный дискретный вход/выход |
|UNPROT5|28|X35 (RJ45)|6||Незащищенный дискретный вход/выход |
|UNPROT6|27|X35 (RJ45)|7||Незащищенный дискретный вход/выход |
|UNPROT7|26|X35 (RJ45)|8||Незащищенный дискретный вход/выход |
|IN0|42|X27 (IDC26)|12|11|Опторазвязанный вход двухпроводный|
|IN1|44|X27 (IDC26)|10|9|Опторазвязанный вход двухпроводный|
|IN2|46|X27 (IDC26)|8|7|Опторазвязанный вход двухпроводный|
|IN3|49|X27 (IDC26)|6|5|Опторазвязанный вход двухпроводный|
|IN4|43|X27 (IDC26)|4|25,26|Опторазвязанный вход|
|IN5|45|X27 (IDC26)|3|25,26|Опторазвязанный вход|
|IN6|47|X27 (IDC26)|2|25,26|Опторазвязанный вход|
|IN7|48|X27 (IDC26)|1|25,26|Опторазвязанный вход|
|IN8|34|X27 (IDC26)|20|19|Опторазвязанный вход двухпроводный|
|IN9|36|X27 (IDC26)|18|15|Опторазвязанный вход двухпроводный|
|IN10|38|X27 (IDC26)|16|17|Опторазвязанный вход двухпроводный|
|IN11|40|X27 (IDC26)|14|13|Опторазвязанный вход двухпроводный|
|IN12|35|X27 (IDC26)|24|25,26|Опторазвязанный вход|
|IN13|37|X27 (IDC26)|23|25,26|Опторазвязанный вход|
|IN14|39|X27 (IDC26)|22|25,26|Опторазвязанный вход|
|IN15|41|X27 (IDC26)|21|25,26|Опторазвязанный вход|
---
## Сверка с кодом (2026-10-02)
**Поиск variant.cpp / ldscripts (платформа DUE):**
- В репозитории **нет собственного** `lighthub/variant.cpp`. Для DUE используется вариант из пакета PlatformIO `.platformio/packages/framework-arduinosam/variants/arduino_due_x/variant.cpp` (см. [flashing.md](flashing.md) — нужно добавить в него `void USART0_Handler(void) __attribute__((weak));`).
- В каталоге `ldscripts/` есть только лд-скрипты STM32 (`stm32f103rb.ld` и т.п.); **DUE-лд-скриптов в репозитории нет**.
- В исходном коде пины каналов **не заданы фиксированной таблицей** — конфиг ссылается на номера пинов напрямую (цифровое значение столбца «MPU PIN»), поэтому автоматической сверки «wiki ↔ код» по конкретным пинам не проводится. Таблица wiki является эталонной картой пинов платы.
**Соответствие номеров пинов стандартной распиновке DUE:**
- Аналоговые входы `A0`–`A11` → пины **54–65** — **совпадает** со стандартной нумерацией аналоговых пинов Arduino DUE (A0=54 … A15=69). Расхождений нет.
- Остальные пины (POUT 8–25, PWM 4–10, UNPROT 26–33, IN 34–49) — все в диапазоне цифровых пинов DUE (0–53), соответствуют стандартной нумерации.
**Различия между ревизиями платы (2.2 и 2.0):**
- Столбец **MPU PIN # идентичен** в обеих таблицах — номера пинов MCU не менялись между ревизиями.
- Различается столбец **Plug PIN** (физические контакты разъемов X36/X27/X35) — например, в rev 2.2 для `A0`–`A7` это контакты 3–10 X36, а в rev 2.0 — 1–8; раскладка опто-входов IN в X27 тоже отличается. Это изменение именно **реvisions платы**, а не программных пинов — при работе в конфиге всегда используйте столбец **MPU PIN #** (он одинаков).
- В rev 2.2 добавлены контакты CAN H/L (X36 пины 17/18, начиная с V3.0) и вход PWM10 (X414, пин 10), которых нет в rev 2.0.