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

от автора

Небольшая заметка о самодельном адаптере на базе 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В.

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


Применяется модули типа 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

ссылка на оригинал статьи https://geektimes.ru/post/274092/


Комментарии

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

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