- PVSM.RU - https://www.pvsm.ru -

Беспроводной адаптер для программирования Arduino или AVR с загрузчиком на базе ESP8266

Беспроводной адаптер для программирования Arduino или AVR с загрузчиком на базе ESP8266 - 1Небольшая заметка о самодельном адаптере на базе ESP8266, позволяющем загрузить прошивку в микроконтроллер с установленным UART загрузчиком или Arduino.
Последнее время при проектировании устройств на микроконтроллерах AVR, для программирования вывожу только один 6-пиновый разъем (не ISP) для FTDI адаптера. Он позволяет и загрузить прошивку, и отладиться по UART после прошивки. Именно так сделано в Arduino, идея позаимствована оттуда. Это удобно.
Тем временем, не раз приходилось сталкиваться с ситуацией, когда нужно загрузить прошивку в микроконтроллер, но он уже в корпусе который не помещается на рабочем месте/лежит на антресоли/в другом городе/замурован в стену. В таких случаях адаптер FTDI не применим из-за короткого USB шнурка и приходилось изворачиваться с ноутбуком. Задумался о беспроводном программаторе. Тут как нельзя лучше подойдет ESP8266, ведь он обладает UART и в любом исполнении имеет хотя бы один GPIO, пригодный для перезагрузки контроллера и входа в режим программирования.

В сети был найден следующий материал по теме:

  1. Programming an Arduino via WiFi with the ESP8266 [1] — модуль типа ESP-01 подключается на проводках к Arduino pro mini, затем для загрузки прошивки используется python скрипт
  2. Programando un Arduino remotamente con el módulo ESP8266 [2] — тут, как я понял, не вдаваясь в подробности, один из GPIO Arduino соединен с RESET. Сначала микроконтроллеру передается команда перезагрузить себя самого, а потом уже начинается загрузка прошивки
  3. ESP8266-transparent-bridge [3] — прошивка для ESP8266 делающая из модуля прозрачный Wi-Fi — UART мост с поддержкой AT команд для управления GPIO2. Автор предлагает нажимать кнопку reset на Arduino, а затем запускать avrdude c параметрами -c avrisp и -P net:x.x.x.x:23, но это позволяют автоматизировать AT. Именно эту прошивку я и взял за основу

Характеристики адаптера следующие:

  • Шести-пиновый разъем c распиновкой как у адаптера FTDI
    Скрытый текст

    image
  • Работа в схемах с напряжением питания микроконтроллера 3.3В или 5В, выбирается джамперами
  • Стабильная работа на скорости до 57600 включительно
  • Перезагрузка микроконтроллера при помощи AT команд для входа в режим программирования

Работоспособность проверялась на китайской Arduino pro mini со стоковым загрузчиком и на ATmega8 c установленным optiboot [4] и скоростях 9600, 19200 и 57600. На скорости по умолчанию (115200) прошиваться контроллер отказался.

Для тех, кто не хочет паять и делать плату

В случае применения в схемах с питанием 3.3В достаточно просто присоединить модуль в исполнение esp-01 к Arduino проводками (VCC-->VCC, GND--->GND, RX--->TX, TX--->RX, GPIO2--->DTR). Плата сделана для удобства подключения и возможности работы в схемах с напряжением питания микроконтроллера 5В.

Принципиальная схема и печатная плата

Беспроводной адаптер для программирования Arduino или AVR с загрузчиком на базе ESP8266 - 3
Применяется модули типа esp-02, но подойдет и распространенный esp-01, только плату перетрассировать нужно будет слегка. Джамперами выбирается режим работы 3.3/5В. U1 — стабилизатор преобразующий 5В в 3.3В в случае необходимости. R2 и R3 — делитель, тоже для 5В режима. После сборки нужно установить джампер RPOG и при помощи того же FTDI или любого другого UART адаптера загрузить ESP8266-transparent-bridge [3].
Шаблон односторонней печатной платы (SVG вектор):
image
Если нужен негатив достаточно открыть текстовым редактором и заменить #000000 на #FFFFFF и наоборот.
В формате KiCad на github [5]

Прошивка микроконтроллера

Обычно, чтобы загрузить прошивку следует перезагрузить микроконтроллер. FTDI адаптер делает это импульсом на ноге DTR (первая в разъеме), она через емкость соединена с ногой RESET микроконтроллера. В нашем случае на место DTR выведена GPIO2. Для перезагрузки микроконтроллера используются AT команды "+++AT GPIO2 1" и затем "+++AT GPIO2 0", которые меняют уровень на GPIO2 ESP8266. Одного перепада достаточно, чтобы перезагрузить контроллер. Сразу после перезагрузки некоторое время работает загрузчик и ждет образ прошивки по UART, его можно передать с помощью утилиты avrdude. Ниже приведен скрипт выполнение которого прошивает контроллер:

#!/bin/bash

HEXILE="firmware.hex"
ADDRESS=x.x.x.x
BAUD=57600

echo "+++AT BAUD $BAUD" | nc $(ADDRESS) 23
echo "+++AT GPIO2 1" | nc $(ADDRESS) 23
echo "+++AT GPIO2 0" | nc $(ADDRESS) 23
avrdude -P net:$(ADDRESS):23 -F -U flash:w:$(HEXILE):i

Данные команды можно включить в Makefile.
Беспроводную прошивку можно провернуть и в Windows, установив утилиты nc и avrdude.

Видео, демонстрирующее работу на примере китайской Arduino pro mini

Автор: sixhundredsixtyfive

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/arduino/117684

Ссылки в тексте:

[1] Programming an Arduino via WiFi with the ESP8266: https://garyservin.wordpress.com/2014/12/16/programming-an-arduino-via-wifi-with-the-esp8266/

[2] Programando un Arduino remotamente con el módulo ESP8266: https://www.sistemasorp.es/2014/11/11/programando-un-arduino-remotamente-con-el-modulo-esp8266/

[3] ESP8266-transparent-bridge: https://github.com/beckdac/ESP8266-transparent-bridge

[4] optiboot: https://github.com/Optiboot/optiboot

[5] В формате KiCad на github: https://github.com/dima-ch/esp-ftdi

[6] Источник: https://geektimes.ru/post/274092/