Небольшая заметка о самодельном адаптере на базе 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 modulo 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 (см. UPD). Для перезагрузки микроконтроллера используются 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



UPD:
sav13 предложил в качестве прошивки для ESP8266 использовать esp-link, она совместима с текущей схемой адаптера. Данная прошивка имеет ряд преимуществ по сравнению с ESP8266-transparent-bridge, в т.ч. WEB интерфейс для конфигурации, нет необходимости использовать AT команды, дополнительный функционал, более подробно тут.

Комментарии (33)


  1. avs24rus
    12.04.2016 10:55
    +1

    Мне больше по душе прошивка через Bluetooth.


    1. Foreglance
      12.04.2016 21:25

      Можете поделиться вариантами прошивка через Bluetooth?

      Автору — спасибо. Мне пришлось вторую ардуину рядом с основной ставить — с модифицированным ArduinoISP (чтобы прозрачный serial и поддержка дисплеев) и блютуз-модуль.


      1. avs24rus
        13.04.2016 05:23
        +1

        1. Foreglance
          15.04.2016 08:53

          Спасибо за ссылку на блютуз-прогамматор. Я видел подобную схему, но иам указывалось на проблемы, не стал использовать. А здесь — хорошая детальеая инструкция.


  1. ersivv
    12.04.2016 17:37

    Если нужно помигать диодом да и не только, то можно обойтись только esp, у которой ресурсов значительно больше.


    1. sixhundredsixtyfive
      12.04.2016 18:10
      +1

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


  1. SL_RU
    12.04.2016 18:31

    Зачем вообще ардуина, если у вас есть есп, возможности и ресурсы которой во МНОГО раз больше, нежели у ардуины?


    1. sixhundredsixtyfive
      12.04.2016 18:47
      +2

      Отличное замечание, я его непременно учту при проектирование новых устройств, и приму меры чтобы в кротчайшие строки заменить ВСЕ чипы AVR на ESP8266 во всех используемых девайсах, начиная от мигалок светодиодами и заканчивая мозгами квадрокоптера и 3D принтера.


      1. SL_RU
        12.04.2016 20:48
        +2

        Ну не это я имел ввиду. Слишком уж вызывающе выразился, извиняйте.


    1. KonstantinSoloviov
      12.04.2016 20:17
      +1

      Энергопотребление, количество выводов и их нагрузочная способность, таймеры, качество АЦП и т.д. и т.п. AVR'кам еще есть чего предложить.


      1. sixhundredsixtyfive
        12.04.2016 20:29

        Согласен, еще хочу добавить огромное комьюнити и множество готовых решений на AVR.


      1. SL_RU
        12.04.2016 21:00

        AVR'ки что-то могли предложить лет шесть назад, а сейчас всё заняли STM32 и другие ARMные МК, которые опережают АВР по всем параметрам, перечисленным вами.
        Опять же, не хочу быть неправильно понятым, но, лично я бросил уже все AVR, открыв для себя STM32, чего и вам советую(когда узнал о них сидел и смотрел с открытым ртом на их параметры). Они не перестают удивлять меня каждый день. Например, недавно выпустили микроконтроллеры с высокой производительностью и мощной периферией и энергопотреблением всего в 89микроампер за МГц в нормальном режиме работы: http://www.compel.ru/lib/ne/2016/2/6-potreblenie-ot-89-mka-mgts-v-aktivnom-rezhime-novyiy-rekord-mikrokontrollerov-stm32f4/

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


        1. KonstantinSoloviov
          12.04.2016 21:27

          Вы в начале опыта, через некоторое время первая влюбленность пройдет и станут обнаруживаться интимные подробности )
          На вскидку:
          — мелкий TQFP достаточно замысловато развести, да и паять тоже не сахар
          — окажется, что VBAT вывод выведен далеко не во всех чипах
          — окажется, что в UART нет аппаратного буфера даже для одного байта
          — HAL не сильно лучше SPL
          — HAL навязывает стиль программирования
          — 5V иногда даже лучше 3.3V и то что раньше просто подключалось теперь придется согласовывать

          Конечно, есть и плюсы и их немало, но далеко не все так однозначно


          1. SL_RU
            12.04.2016 21:45

            Да влюблённость прошла, просто привлекаю новых людей. И проблемы, которые вы назвали — не самые ужасные.

            TQFP разводится совсем просто(посередине у меня получается такая красивая звёздочка) и фоторезистом создаётся печатка за полчаса.
            Ну для некоторых ножка VBAT он не очень нужна — для этого и существует выбор.
            А DMA для кого сделан? Во много раз лучше любых буферов.
            ТТЛ преобразователи стоят копейки

            А вот ХАЛ и программирование — это да. А самая большая проблема — подводные грабли, о которых не написано нигде, даже в даташите. Доходит до того, что нельзя просто управлять ножкой в режиме OUTPUT, а инпут выдаёт какую-то ерунду — выручает лишь логический анализатор.


        1. barmic
          13.04.2016 10:59

          Приведите хоть один пример "… начало использования у них настолько же простое как и у ардуин." По моему залить Blink из Arduino IDE может и школьник, а как такого же примера на STM?


          1. SL_RU
            13.04.2016 11:07

            Пожалуйста, всё предельно просто и ясно: https://www.youtube.com/watch?v=bHgqh-Uhjvc
            Даже проще — конфигурируешь пины не из кода, а из графической утилиты CubeMX.


            1. barmic
              13.04.2016 13:32
              +1

              Да-да Всё предельно просто! Скачайте CubeMX, Keil, настройте, сконфигурируйте, залейте! Ура моргает. Это Вы попробуйте моему 12 летнему сыну объяснить. С Ардуино он по картинкам разобрался, скачал Arduino IDE, выбрал плату, выбрал blink и нажал загрузить… После этого час прыгал от радости. Полностью согласен с Вами что STM имеет огромный потенциал и я лично только за его использование, но на счет простоты использования, здесь уж извините. Вы сами с чего начинали?


              1. SL_RU
                13.04.2016 18:59

                С АВРок, конечно же. И рад, что в то время ещё никаких ардуин и в помине не было — именно это, думаю, сделало программирование и электротехнику моими любимыми занятиями.

                Лично я очень плохо отношусь ко всем этим ардуинам, конструкторам и прочему обучающему хламу — они обманывают начинающего, врут ему. Это просто игрушки, а не учебные пособия. Именно потому что всё можно сделать без усилий — двумя кнопками. Так же эта простота создаёт очень стойкое ощущение того, что всё везде просто и делается в два счёта и так же отбивает у большинства любое желание решать сколь бы то ни было малые проблемы. Именно это произошло с младшим братом.

                Когда я вижу очередной «обучающий» конструктор для детей — мне делается одновременно грустно и смешно.
                У меня в детстве был один лишь металлический конструктор и сломанный телевизор. А, и книжка «Электронника шаг за шагом».
                И я сам во втором классе ( 9 лет) собрал свою первую схему — мультивибратор.
                Если у меня был бы один из тех конструкторов, уверен, я бы прилепил друг к другу куски пластика, нажал бы кнопку и что-нибудь замигало, поигрался бы часика два, убрал бы всё это в глубокий шкаф и пошёл бы с посонами гамать в футбол.

                А про микроконтроллеры я узнал тогда, когда ещё у нас не было интернета — увидел в магазину книжку про них и заинтересовался, купил её, попросил отца заказать где-нибудь, по-моему, какую-то аттини и программатор. Через месяц ониа пришли на почту — тут начались мои приключения. Платки для неё тож сделал самостоятельно, конечно, из-за самих плат было много проблем, но это того стоило.

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

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


                1. barmic
                  14.04.2016 16:02

                  Согласен и не согласен одновременно. Не нужно быть механиком чтобы управлять автомобилем, также не нужно быть электронщиком чтобы программировать. Программист не знает как работает процессор хотя вся документация есть. Вы заглядывали в даташиты на современные Intel'ы наверняка нет, а программы пишите. Так и для Arduino сделали тоже самое, неважно что там происходит важно что по определённым командам появляются сигналы в определённых местах и согласитесь неплохие проекты получаются. Согласен в Вами тем что если хочешь сделать хорошо и понять как это работает, то лучше всего изучить всё до самых «косточек».


          1. python273
            13.04.2016 20:32

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


            1. barmic
              14.04.2016 13:50

              Да! С этим не поспоришь. Проще некуда. STM перевели в разряд «Arduino». Что то я это упустил, точнее и не надо было. Надо ждать повального увлечения конструкторами на чипах от STM. Сейчас еще сделают что нибудь типа «STM IDE» и понесётся.


  1. Oloday
    13.04.2016 09:14

    Загрузите Шаблон односторонней печатной платы (SVG вектор)


  1. ikaktys
    13.04.2016 09:33
    +1

    Классная вещь, можно еще добавить micro SD карточку, с возможностью загрузки прошивок на/с нее, и будет универсальная штука


    1. sixhundredsixtyfive
      13.04.2016 10:40

      Тогда еще дисплей и кнопки чтобы выбирать прошивку которую лить


      1. ikaktys
        13.04.2016 10:41

        в бутлоадер все не влезет?


        1. sixhundredsixtyfive
          13.04.2016 10:57

          Может я не так понял, Вы имеете в виду добавлять SD карту к AVR, если спрашиваете о загрузчике? Я подумал добавить карту к ESP8266, чтобы можно было заливать не только с компьютера по WiFi, но и тиражировать заранее загруженные на SD карту прошивки. Тут даже и SD карта не обязательно, в памяти ESP8266 есть место для некоторого количества образов прошивок для AVR.


          1. ikaktys
            13.04.2016 11:28

            У ESP8266 свой флэш же «всего» 512кб? а у 2560 размер своего 256kb


            1. DarkByte
              13.04.2016 14:46

              У ESP8266 нет своего флеша, доступного для прошивки простым пользователям.


              1. sixhundredsixtyfive
                13.04.2016 18:08

                Я подробно в вопросе не разбирался, но мне казалось что можно писать, есть ведь функции spi_flash_erase_sector/spi_flash_write, проблема будет в том чтобы не затереть при этом исполняемый код.


                1. DarkByte
                  13.04.2016 18:15

                  Флеш память представлена в виде внешней микросхемы, соответственно её размер будет зависит от конкретной платы. С помощью этих функций ESP может перезаписывать содержимое флешки, в том числе возможно реализовать обновление по воздуху самой себя.


  1. sav13
    13.04.2016 16:21
    +1

    Есть отличный проект ESP-link

    Позволят прошивать и отлаживать AVR/ESP8266 и проче и просто пробрасывать по WiFi последовательный порт


    1. sixhundredsixtyfive
      13.04.2016 17:46

      Да, видел этот проект когда подбирал прошивку для ESP8266, но совсем про него забыл и не включил в статью. Сам его не использовал поскольку он мне показался тяжеловатым вместе с WEB интерфейсом, мне достаточно было просто моста Wi-Fi-UART.
      Возможно перешью адаптер на ESP-Link для поддержки виртуального COM или допилю проект ESP8266-transparent-bridge.
      А там можно выбрать GPIO2 как DTR?


    1. sixhundredsixtyfive
      13.04.2016 17:51

      Спасибо. Как проверю работоспособность на моей платке адаптера обновлю статью с этим вариантом прошивки.