Прошивка Ардуино по Cети

Добрый день дорогие читатели моего блога. Недавно наткнулся в сети на интересную статью о том, как прошивать платы Ардуино через сеть, но с первого захода ничего не получилось, так как статья была достаточно сырая и не полностью открывала тему. Пришлось пару дней побродить по сети и просидеть на форумах пока не добился успеха в этой полезной фиче. А именно:

Для чего это нужно?

Это незаменимый инструмент для того, что бы обновлять прошивку микропроцессора не подсоединяясь к нему через физически по USB , особенно если такой возможности нет, либо доступ к устройству ограничен. Можно обновлять программное обеспечение удаленно как по локальной сети, так и глобально — через интернет.

Для того, что бы исключить косяков я возьму абсолютно чистые платы и буду проводить все операции на компьютере, который не знает что такое прошивать микроконтроллер через сеть. Что бы вы потом не лазили и не искали косяков в этой статье. Все должно получиться сходу!

И так что для этого нужно:

  • Плата  Ардуино, я использовал Ардуино МЕГА 2560
  • Эзернет шилд на процессоре W5100
  • Еще одна какая нибудь плата Ардуино для прошивки бутлоадера (я использовал еще одну МЕГА) либо программатор ISP.

Микропрограмма — загрузчик, который прошьет в Ардуино маленький вебсервер и будет получать новые прошивки и команды называется Ariadne Bootloader,

  1. последнюю версию скачиваем тут: https://github.com/codebendercc/Ariadne-Bootloader или тут на тот случай, если что то изменится в ней и что то пойдет не так:скачать с нашего сайта: Ariadne-Bootloader-master. Разархивируете его.
  2. Скачать последнюю версию Arduino IDE (1.8.2 на момент написания этой статьи)
  3. Установить Arduino IDE, либо разархивировать его в удобное для вас место на диске (если скачали не инсталляшку, а архив программы) . У меня он на рабочем столе, так как постоянно требуется делать различные манипуляции с его файлами, чисто под рукой постоянно. (пропускаете этот шаг, если он у вас уже установлен)
  4. Из папки с разархивированным Ariadne (шаг 2.) копируете папки hrdware и libraries в папку Arduino с заменой. Теперь Ариадна должна быть установлена.
  5. Проверяем — запускаем arduino.exe из папки Arduino, идем в Tools -> Board и смотрим есть ли в самом низу раздел выбора плат Ariadne Boards? Должно быть вот так:
  6. Теперь подсоединяем нашу чистую Ардуину вот по этой схеме:Слева дуина, которую подсоединяем к компу по USB, справа та, которую будем прошивать. Вообще в сети куча схем соединения Ардуин для прошивки бутлоадера, вот к примеру по этому линку.
  7. Для того, чтобы дуина могла прошивать другую дуину в нее саму нужно загрузить скетч для программаторов ISP. Для этого запускаем arduino.exe, bltv File -> Examples -> ArduinoISP и выбираем скетч ArduinoISP.  Конфигурируем настройки для отправки скетча в дуину, идем в  -> tools ->Board: ->  Arduino/Genuino Mega or Mega 2560. Далее опять tools ->Port -> выбираем порт на котором у нас висит Ардуина. Нажимаем стрелочку и скетч загружается в наш новоиспеченный программатор.
  8. Теперь конфигурируем настройки для прошивки бутлоадера, идем в  -> tools ->Board: ->  Ariadne Bootloader -> Arduino Mega 2560 Далее опять tools -> Programmer -> Arduino as ISP. Далее опять tools ->Port -> выбираем порт на котором у нас висит Ардуина.
  9. Теперь запускаем прошивку загрузчика: tools -> Burn Bootloader и после некоторых подмигиваний Arduino IDE должна сообщить об успешной прошивке бутлоадера:
  10. Убираем наш программатор, отсоединяем его от платы справа и надеваем наш эзернет шилд на Ардуино Мега с загруженным бутлоадером Ariadne. Вот так:
  11. Теперь перед подключением LAN кабеля нам нужно выставить нужный пароль и подправить IP Gateway в нашем небольшом серваке с возможностью обновления микропрограммы по сети. Для этого подсоединяем его к компьютеру, в программе ардуино идем -> tools ->Board: ->  Ariadne Bootloader -> Arduino Mega 2560, далее выбираем нужный порт и закачиваем в него скетч из File -> Examples -> NetEEPROM(Ariadne-Bootloader) -> WriteNetworkSettings, предварительно сконфигурировав его, у меня вот так:

    Как только скетч запишет ваши параметры в флеш память, светодиод начнет моргать два раза в секунду.
  12. Теперь нам нужно записать в устройство программу, которая будет управлять функцией сброса, что бы нам не требовалось нажимать на кнопочку, мы ведь собираемся загружать удаленно не так ли. Выбираем скетч: File ->Examples ->EthernetReset->ResetServer.  Загружаем его в устройство!
  13. Наше устройство готово! Проверяем: Подсоединяем его в домашнюю сеть, лампочки на эзернет шилде должны звгореться и мигать как рождественская елочка :), открываем браузер и вбиваем следующий адрес: http://192.168.1.128:8080/parol/reset Браузер должен отреагировать вот такой страничкой:и светодиод на эзернет шилде должен начать быстро мигать (тот, что на D13). Шилд готов принять новый скетч через сеть. Спустя несколько секунд устройство вернется в режим ожидания запроса на сброс и будет продолжать выполнять программу, которая записана в него прежде. Если там прежде небыло никаких программ, то мигание не прекратится и устройство не выйдет из режима ожидания загрузки скетча!
  14. Перед отправкой скетча в ардуино по сети нам нужно сделать так, что бы новый скетч поддерживал прием команды на сброс и перевод ардуины в режим ожидания нового скетча! Для этого надо интегрировать скетч ResetServer в нашу прошивку. Пример интеграции в стандартную прошивку вебсервера, который считывает аналоговые данные с портов и выводит их на веб страницу смотрите ниже:

     
  15. Очень важно!  отключить все антивирусы и защитники Windows, иначе они блокируют передачу через порты 46969 69 по протоколу TFTP (мучался 3 дня, чуть не бросил все это дело именно изза этого!)
  16. Теперь мы готовы отправить первую прошивку в наше новое сетевое устройство! Для этого нужно сделать кучу манипуляций с конвертированием файла скетча в разные форматы после компиляции и конечный формат bin отправить по сети. Не буду вдаваться в подробности как и что конвертировать, это описано в документации на библиотеку Ariadne вот тут, но один полезный батник (bat файл) сделает все за нас. Вам нужно всего лишь перетащить ваш файл скетча *.ino в него. Вот этот файл:

    или одним файлом: build

    Важно! не забудьте изменить адреса исполнительных файлов в этом батнике на свои, иначе он не найдет их и не скомпилирует/конвертирует/отправит ваш скетч по сети! то есть вот это:

     

     

    должно быть вашим и также все остальные пути к файлам!

    и вуаля:Успешная передача нашего скетча через сеть!

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

да чуть не забыл, библиотека Ariadne жестко привязана на библиотеку NewEEPROM.h и будет ругаться, если вы будете использовать новые выражения стандартной библиотеки EEPROM, такие как EEPROM.put() и EEPROM.get методы, что бы отвязать ее нужно сделать следующее:

  1. В файле NewEEPROM.h в строке 47 надо поменять extern NewEEPROMClass EEPROM; на extern NewEEPROMClass NewEEPROM;
  2. В файле NewEEPROM.cpp в строке 68 надо поменять NewEEPROMClass EEPROM; на eNewEEPROMClass NewEEPROM;

Важно! изменения выше позволят вам пользоваться стандартной библитекой EEPROM, но при этом нельзя использовать адреса памяти 0-26   адресы портов и 27 — 63 пароля они  должны быть зарезервированы  библиотеки Ariadne соответственно.

Благодарю за внимание!

Smith_Tofig

    Прошивка Ардуино по Cети: 2 комментария

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    wp-puzzle.com logo