Обновление нескольких Arduino Nano с помощью одного и того же файла INO

Кстати, я безуспешно искал ответ перед публикацией.

У меня есть NodeMCU, подключенный к группе Arduino Nano по шине I2C. NodeMCU с поддержкой Wi-Fi имеет возможность самостоятельно выполнять OTA-обновления, с чем я освоился, но я хочу обновить один и тот же код на всех подчиненных устройствах Nano.

Возможно ли это? Если да, то какой самый простой способ? Устройства будут установлены на стене, поэтому я не хочу, чтобы из нее торчала связка USB-кабелей.

Могу ли я использовать/совместно использовать Wi-Fi-соединение на NodeMCU с Nanos через шину I2C? Или есть лучший способ?

PS. Я читал о компиляции файла .INO в шестнадцатеричный или bin-файл, но до сих пор не совсем понимаю этот процесс.

PPS — обновление файлов .INO OTA на NodeMCU с поддержкой ESP8266/WiFi — это здорово, но они больше (шире), чем Nano, и будут стоить много денег, так как мне понадобится около 30 или около того.

, 👍0


1 ответ


2

Процесс компиляции и компоновки превращает файл .INO в файл .HEX, который по сути представляет собой машинный код, загружаемый в процессор. Получить этот файл в процессе компиляции достаточно легко.

Чтобы обновить прошивку вашего Nanos, вам необходимо заменить существующий загрузчик (который обновляется через последовательный интерфейс) на тот, который обновляется через I2C.

Я вижу, что такой загрузчик существует здесь, на Github.

Возможно ли это?

Похоже.

Если да, то какой самый простой способ?

Зависит от того, что вы подразумеваете под словом «самый простой». Если устройства крепятся на стену, это может быть самый простой способ.

Что вы можете сделать, так это после загрузки каждое устройство запросит у ведущего устройства доступность обновления*. Если бы это было так, они бы по очереди получали обновление через I2C. Если обновление не удалось выполнить на полпути, восстановить его может быть сложно. Возможно, вам понадобится какая-то система, в которой загрузчик проверяет корректность основного кода (например, путем проверки суммы), а если нет, запрашивает другое обновление.

Я думаю, что это можно сделать, механика может стать интересной задачей. Получайте удовольствие!


* Одна из возможностей заключается в том, что ведущее устройство будет транслировать I2C (возможно, каждые 10 минут) о текущей версии программного обеспечения, и если ведомое устройство обнаружит, что у него нет последней версии, запросит обновление. Если ведущее устройство занято (возможно, потому, что оно обновляло другое ведомое устройство), ведомое устройство может подождать 5 минут и повторить попытку.

,