# 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 в коде присутствует, хоть и, вероятно, не всегда применяется на практике.