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

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

  1. Programming an Arduino via WiFi with the ESP8266 — модуль типа ESP-01 подключается на проводках к Arduino pro mini, затем для загрузки прошивки используется python скрипт
  2. Programando un Arduino remotamente con el módulo ESP8266 — тут, как я понял, не вдаваясь в подробности, один из GPIO Arduino соединен с RESET. Сначала микроконтроллеру передается команда перезагрузить себя самого, а потом уже начинается загрузка прошивки
  3. ESP8266-transparent-bridge — прошивка для 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 и скоростях 9600, 19200 и 57600. На скорости по умолчанию (115200) прошиваться контроллер отказался.Для тех, кто не хочет паять и делать плату В случае применения в схемах с питанием 3.3В достаточно просто присоединить модуль в исполнение esp-01 к Arduino проводками (VCC-->VCC, GND--->GND, RX--->TX, TX--->RX, GPIO2--->DTR). Плата сделана для удобства подключения и возможности работы в схемах с напряжением питания микроконтроллера 5В.Принципиальная схема и печатная платаb842759fead74aef9184ab4bb19f8dd7.png
Применяется модули типа esp-02, но подойдет и распространенный esp-01, только плату перетрассировать нужно будет слегка. Джамперами выбирается режим работы 3.3/5В. U1 — стабилизатор преобразующий 5В в 3.3В в случае необходимости. R2 и R3 — делитель, тоже для 5В режима. После сборки нужно установить джампер RPOG и при помощи того же FTDI или любого другого UART адаптера загрузить ESP8266-transparent-bridge.
Шаблон односторонней печатной платы (SVG вектор):
image
Если нужен негатив достаточно открыть текстовым редактором и заменить #000000 на #FFFFFF и наоборот.
В формате KiCad на githubПрошивка микроконтроллера Обычно, чтобы загрузить прошивку следует перезагрузить микроконтроллер. 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

© Geektimes