FOTA (Программирование по воздуху)

FOTA обновление по воздуху, позволяет загружать прошивку (эскиз) по беспроводной сети. Это полезно, если ваши узлы недоступны, и вы хотите обновить прошивку или изменить какую-либо конфигурацию в коде.

FOTA может быть реализован по-разному, если использовать mcu Esp8266, 8bits 328p (например, Arduino Pro mini и т. Д.) или ARM.

Теперь покажем вам, как начать работу с этим.

FOTA Загрузчик

Перед использованием FOTA вам необходимо записать правильный загрузчик.

Замечания для Нубов: коротко, загрузчик — это кусок кода, который выполняется при перезагрузке / запуске и позволяет загружать прошивку с помощью usb или других методов вместо использования AVRSPI.

В Mysensors мы можем использовать два вида FOTA:

  • Первый вариант: MYSBootloader, созданный Tekka из команды Mysensors.
  • Второй вариант: Dualoptiboot, который создан Lowpowerlab и является загрузчиком, используемым в Micro Sensebender.

MYSBootloader не требует внешней флэшки. Обновления FOTA FW передаются в автономном режиме, то есть MYSBootloader взаимодействует с контроллером и получает новый FW, который непосредственно записывается в MCU, после того, как FW передается и CRC проверяется, MYSBootloader передает новый эскиз / FW.

  • Плюсы: можно восстановление FOTA, даже с эскизом с ошибками (если эскиз зависает, он перезагружается по сторожевому таймеру и запустит MYSBootloader), внешняя флешка не требуется
  • Минусы: Специфика радио, т.е. разные загрузчики для RF24 и RFM69 радио (rfm69 работа в процессе), не в сети (без обработки данных датчиков во время fota). Отправитель MySensors не поддерживает загрузку через ftdi / serial (но в бете ведутся работы).

Для Dualoptiboot требуется внешняя флешка: обновления FOTA FW передаются в режиме работы ноды, то есть пока узел активен. После того как все пакеты FW переданы и проверена CRC, узел перезагружается, копирует FW с внешней флешки в MCU. Это означает, что вам нужно вначале  загрузить эскиз  по ftdi, иначе fota не будет работать, поскольку он обрабатывается в эскизе.

  • Плюсы: Не требуется специфика работы радио в загрузчике, поэтому его можно использовать в разных схемах радио, онлайн (пока узел обрабатывает данные датчика)
  • Минусы: При неисправности FW (например, зависание эскиза из-за плохого кода) не может быть восстановлена ​​FOTA => придётся восстанавливать через последовательный порт, требуется внешняя флешка

Что для этого нужно

Почти во всех случаях вам понадобится следующее:

  • USBASP для записи загрузчика (или вы можете использовать ArduinoAsIsp, здесь не рассматривается)
  • Установить AVRDUDESS: http://blog.zakkemble.co.uk/avrdudess-a-gui-for-avrdude/ для конфигурации фьюзов
  • Arduino IDE 1.6.x
  • Mysensors библиотека
  • MYSController

Если вы хотите использовать загрузчик DualOptiboot, вам понадобятся:

  • SPI флешь, jedec совместимая, например AT25DF512C-SSHN-B. Совместимости с другими флеш-микросхемами вы можете проверить здесь https://forum.mysensors.org/topic/3160/ota-flash-types-for-mysensors
  • О некоторых проектах для использование флешки
    • Устройства MSMD уже встроена флешка
    • https://oshpark.com/shared_projects/m5Uugjx5
    • https://www.openhardware.io/view/18/OTA-and-Authentication-Evaluation-Board.
    • Sensebender Micro или Moteino уже встроена флешка

Теперь вы должны увидеть плату Sensebender Micro в Boards \ tools от Arduino Ide.

Запись загрузчика

Для программирования загрузчика мы используем Usbasp. Это простое в использовании и дешевое устройство. Подключите Usbasp к вашему устройству Arduino.

Вывод Arduino Nano/Micro/328p/Sensebender итд
MOSI D11
VTG VCC 3.3V
GND GND
RES RESET
SCK D13
MISO D12

В этом видео, описывается процесс первая запись загрузчика.

После этого нужно установить фьюзы в Avrdudess.

Конфигурация для устройств с кварцем 8MHz:

Конфигурация для устройств с кварцем 16Mhz:

Примечание: даже если вы используете клон Usbasp, выберите Usbasp в списке.

  1. Нажмите записать в разделе «Fuses&Lock bits». Затем зачитайте, чтобы проверить что фьюзы действительно записались. Не отключайте USBasp.
  2. Перейдите в Arduino Ide, в Board Manager, выберите SensebenderMicro, если вы хотите использовать загрузчик DualOptiboot FOTA. Или выберите Arduino Mini pro MYSBootloader
  3. Затем выберите процессор Atmel328 8Mhz, USBASP As programmer.
  4. Нажмите Tools \ Записать загрузчик. Вы получите несколько предупреждение SCK, но это не проблема, это может быть из за того что вы используете клон USBasp.

Вот теперь, наш FOTA Загрузчик прошился.

Если вы получаете ошибку

В некоторых версиях среды разработки Arduino не отображается USBasp. Если вы получите сообщение об ошибке, похожее на скриншот выше, исправление найдёте здесь: http://forum.arduino.cc/index.php?topic=415210.msg2862244#msg2862244

Заметки:

  • Вы можете использовать Avrdudess для записи загрузчика.
  • DualOptiboot: внутренний 8Mhz + 1.8V BOD.

Включение FOTA в вашем эскизе

Чтобы включить FOTA в эскизе, вам нужно добавить

Работа FOTA полностью скрыта. Все уже включено в Mysensors lib в process() и wait()

Но важно учесть:

  • Не забудьте, что спящий узел не может получить FOTA. Вы можете установить задержку перехода в сон, чтобы увидеть, есть ли у вас что-то для FOTA. Для этого лучше использовать smartsleep(), которые делает wait() после пробуждения.

Это относится к Dualoptiboot (не относится к MYSBootloader, поскольку он выполняет FOTA только во время работы загрузчика, которые не использует сон):

  • Во время загрузки нового эскиз (это делается во время выполнения скетча), вы должны учесть это в эскизе. Хорошим тоном, если вы обнаружите FOTA сообщения и приостановите долгого процесса считывания датчиков, или это повлияет на скорость FOTA. Например: если вы читаете датчики и это занимает долгое время (некоторые libs), все это будет задерживать FOTA или будет прерывать во время основного цикла. Ещё если оптимизации не будет, и если вы используете батарейку, то из-за того что передача будет долгой. Вы потратите ресурс батареи очень быстро
  • FOTA может работать быстро 15-30 секунд, если её ничего не замедляет, и очень долго если не оптимизировано. Поэтому вам нужно решить эту задачу, используя неблокирующий/асинхронный код, чтобы всё работало хорошо. Остальная часть процесса полностью скрыта.

Как загрузить новый эскиз через FOTA

Вам нужно будет использовать .hex файл вместо .ino

Чтобы получить этот файл: в Arduino ide перейдите в File\Preferences\, внизу нажмите на preferences.txt. Он открывает файл preferences.txt.

  1. Запомните где этот файл и закройте Arduino ide (иначе ваши изменения будут утеряны).
  2. В файле preferences.txt в конце добавляем
    или другой предпочтительный путь. Это будет папка компиляции для ваших файлов .hex. Закройте диалоговое окно.
  3. Откройте Arduino ide и скомпилируйте и проверьте проект вашего узла. Теперь вы должны найти свои скомпилированные файлы в папке, которую вы установили ранее.
  4. Скопируйте .hex в парку Firmware для MYSController. Или загрузите .hex в разделе «Прошивки» в модуле MajorDomo MySensors

Запуск обновление FOTA.

  1. Открыть MYSController, перейдите в Config/Serial, проверьте правильный последовательный COM-порт для вашего GW.
  2. Нажмите на кнопку «Обновить FW», для того что вы могли использовать ваш новый файл .hex

Примечание: Если вы не видите свой .hex, вы также можете найти его: В папке Firmware отредактируйте firmware_config.csv и вручную добавьте свой .hex. Вот пример, я добавил файл Humidity .hex для тестов.

  1. Теперь чтобы отправить новый эскиз по воздуху на ваш узел, просто щелкните правой кнопкой мыши на узле, который требуется обновить. Для спящего узла батареи, выберите «с питанием от батареи Спящий». При этом, когда ваш узел проснетесь, MYSController будет отправлять обновление.
  2. Нажмите «Назначить FW»
  3. Выберите эскиз .hex.

Вуаля! FOTA должен прошится, затем ваш узел перезагрузится и запустит новую прошивку.

Share