Программируем Ардуино «по воздуху» через ESP-link

112У меня дома трудится масса устройств умного дома. Большая часть из них использует недорогие платы Arduino Pro Mini или микроконтроллеры Atmega328 с прошитым ардуиновским бутлоадером. Иногда, с приходом новых идей, требуется перепрограммирования всех этих устройств. Монтаж-демонтаж контроллера, встроенного в какую нибудь люстру то еще удовольствие. Скакать под потолком с ноутбуком тоже удовольствие ниже среднего. В последних сборках я устанавливаю микроконтроллеры на съемных панельках, что позволяет вынуть его, запрограммировать и вставить обратно.

Но как хотелось бы вдумчиво поотлаживать свои устройства прямо на месте. Думал для этих целей применить Serial Bluetooth адаптеры. Но недавно один хороший человек на форуме esp8266.ru с ником dao89 надоумил воспользоваться «народным! WiFi модулем ESP8266 и прошивкой ESP-link.

Возможности проекта ESP-link

  • Прозрачный шлюз между Wi-Fi и последовательным портом для отладки и обмена данными
  • Программирования микроконтроллеров AVR/Arduino модулей ESP8266,  LPC800 и других с последовательным интерфейсом по «воздуху» через WiFi.
  • Встроенные протокол STK500V1 для загрузки файла с прошивкой AVR через встроенный WEB-сервер.
  • Отправка HTTP REST запросов через интернет
  • MQTT клиент для связи микроконтроллера с сервисами

Установка ESP-link

По ссылке качаем последнюю версию ESP-link. Я выбрал стабильную версию 2.1.7. Архив прошивки содержит четыре бинарных файла boot_v1.4(b1).bin, blank.bin. user1.bin и user2.bin и два скрипта на языке Shell для прошивки через порт и через WiFi. Я программирую ESP8266 под Windows с использованием утилиты XTCOM (подробнее описано мной в этой статье).

Для модулей с объемом памяти 512Кбайт

  • boot_v1.4\(b1\).bin загружаем по адресу 0x0000
  • user1.bin — 0x1000
  • blank.bin 0x7E000

Для модулей с объемом памяти 4Мбайт

  • boot_v1.4\(b1\).bin загружаем по адресу 0x0000
  • user1.bin — 0x1000
  • blank.bin 0x3FE000

Файл user2.bin служит для прошивки ESP «по воздуху» и в данный момент не используется

Теперь можно перейти к настройке модуля. Подключение к нему стандартное. Пока модуль «не прописан» в WiFi сети он работает как открытая точка доступа с именем типа ESP_012ABC (на некоторых модулях ai-thinker-012ABC) . После подключения нужно зайти через браузер на http://192.168.4.1 на WEB-страницу модуля.

На этой странице можно настроить GPIO модуля для подключения к RESET микроконтроллера, а также подключения дополнительных светодиодов индикации. Есть выбор «предустановленных» конфигураций портов в зависимости от типа модуля и назначения.

ESP-link Home

На странице WiFi можно настроить подключение к беспроводной сети, а также настроить статический IP-шник модуля, что я и делаю, так как постоянно подключаться к ESP как к точке доступа мне не удобно.

ESP-link WiFi

 

Следующая в меню страничка — это консоль микроконтроллера, вернее его последовательного порта. Среди настроек, очистка окна и настройка скорости.  Подключив RX/TX порта микроконтроллера к TX/RX ESP-шки и установив правильную скорость, сразу видим в реальном времени отладочную информацию, выдаваемую контроллером в этот порт. Настройка скорости — это очень важная функция, о которой расскажу позже.

ESP-link mC console

 

Настройку MQTT и REST я пока пропускаю, так как моя цель не сбор информации, а удаленная отладка и прошивка микроконтроллера. Возможно об этом будет одна из моих следующих статей

ESP-link REST&MQTT

Последняя страничка посвящается любителям копаться в системных журналах. Туда выводится отладочная информация по работе ESP-link

ESP-link debug log

Ну вот, теперь у меня есть настроенный ESP-link. Я к нему подключил Arduino Pro Mini. Ножку DTR посадил на GPIO13 ESP-шки (настраивается на первом экране)

Настройка виртуального COM-порта в Windows

Теперь можно настраивать виртуальные COM-порт на компьютере. Для начала проверяю, что наш порт доступен по сети. Для этого захожу по TELNET-ом на 23-й или 2323 порт нашего ESP-link. (Так как TELNETа в Windows 7 нет, то использую для этого установленную у меня программу PUTTY. Данные, которые я видел в консоли через WEB-интерфейс вижу и в TELNET-клиенте.

ESP-link PUTTY

 

Осталось настроить виртуальный COM-порт на моем компьютере и связать его с ESP-link. Для этого устанавливаю Tibbo Device Server Toolkit под Widows. Запускаю VSP-manager и настраиваю виртуальный порт

Настройка виртуального COM порта

Все. Виртуальный COM10 связанный с моим ESP-link по 23 порту настроен.

Настройка виртуального COM-порта

Теперь, открывая его в среде Arduino IDE я могу работать с удаленным микроконтроллером через ESP-link. Контроль состояния виртуального порта можно посмотреть в мониторе, который TIBBO вывешивает в трее

tibbo4

 

Нюанс по скорости прошивки

Небольшой нюанс по скорости. Для прошивки нужно выставлять скорость в консоли ESP-link, прописанную в c:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt для конкретного типа контроллера. В моем файле Arduino Pro Mini это 115200, для того же контроллера на Atmega168 — 19200. Мой перешитый на OPTIBOOT контроллер  — 57600. Для программирования мне потребовалось установить эту скорость в настройках «по умолчанию» виртуального COM-порта

tibbo2

Эту же скорость нужно установить в консоли микроконтроллера ESP-link

esp-link3-2

После этих манипуляций удаленный AVR контроллер программируется так же как и подключенный к локальному порту USB-TTL конвертера. Разве что немного медленнее и не каждый раз, если связь WiFi неустойчивая.

При переходе в режим отладки требуется переключить скорость консоли в нужную (какая установлена в Serial.begin()

Подводя итоги

Повозившись с настройками я получил метод удаленной отладки и программирования любых Ардуино-контроллеров и AVR-с загрузчиком по последовательному порту (и наверняка многих других МК). Более того, я получил удаленную консоль для любых последовательных интерфейсов, например, от различных GPS и GSM модулей. Теперь осталось собрать ESP-шку в какой нибудь корпус, запитать от аккумулятора (мало ли у меня где-то под потолком будут проблемы с питанием) и наделать разъемов для быстрого подключения к различным контроллерам.

К недостаткам данного метода можно отнести его достаточно сложную настройку, некоторую тормознутость при прошивке и при работе консоли, а так же необходимость установки скорости прошивки/отладки (что не требуется при работе в том же Arduino IDE по локальным портам).

В ближайшее время я планирую освоить прошивку ESP8266 через другую ESP8266 (для модулей с 512Кбайт флэша это вполне актуально) и подключение Ардуино к MQTT

DSC06184

 

 

 

Вы можете оставить отзыв или трекбек со своего сайта.

57 комментариев на «Программируем Ардуино «по воздуху» через ESP-link»

  1. Владимир:

    Мощно!

  2. Илья:

    Я вот почему-то думал, что рулить Ардуиной через ESP в качестве моста — наиболее удобный вариант. Потому как просто не знаю, какие варианты еще существуют…

    • Alexey Alexey:

      Последнее время использую ESP без Ардуины. Там где не нужно батареечного питания, ESP вполне хорош сам по себе

      • Илья:

        Увы, но возможностей ESP мне попросту не хватит — в разрабатываемом девайсе участвует пачка датчиков и сенсорная кнопка.

        • Alexey Alexey:

          Да. Портов свободных у ESP маловато
          Тогда Atmega получается как универсальный расширитель портов.

  3. Егор:

    Посматриваю за сайтом, есть интересные решения. Спасибо что делитесь!
    Статья интересная, но почему то только софтовая реализация (или не внимательно смотрел — ткните носом). Интересны схемы подключения как для ESP-01 так и любым другим модулем (хотя с другими наверно проще).

    • Alexey Alexey:

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

      • «Думал схему добавить. Решил, что схема слишком проста, а я сперва соберу законченное устройство и посвящу ему отдельную статью. Там и схемы будут.»

        Когда планируется?Очень бы хотелось почитать и попробовать повторить.

      • Николай:

        а схема бы не помешала, добавьте, хотя бы временно, но только в сочетании с настройками самого линка, чтобы логика той самой настройки была понятна, и кстати, с Ардуино Нано никто есп-линк не пробовал женить? (там вроде как вместо аппаратной ножки встроена программная перезагрузка, вот работает ли линк с таким способом с перепрошивкой ардуины)

  4. Василий:

    Гуд.
    Оставил в закладках.

  5. Максим:

    Спасибо вам большое, на pro mini все отлично работает, а вот arduino mega и due прошиваться не хотят, хотя данные в терминал шлют. В них не разведена ножка dtr, пробовал сделать ее самостоятельно включив кондер на 0,1uf одним концом в reset, а вторым на esp8266, но это не помогло. Arduino ide пишет что не найдено устройство на данном com порту.

  6. Максим:

    Ага, пробовал конечн,

  7. Максим:

    Ага, пробовал конечно, ноль реакции, даже не ребутится дуинка. Но вот если при этом нажать на Reset uC, то она ребутнется. Пробовал при этом быстро запустить заливку прошивки, но безрезультатно. По идее с Uno проблем вообще не должно быть, там же таже AtMega 328p что и в Arduino Pro Mini.

    • Alexey Alexey:

      Попробовал UNO
      Подсоединил DTR к RESET через 0.1мкФ (так же как в мини) — не шьется.
      Но если вовремя нажать RESET (так же как в Pro Mini без DTR), то шьется
      Мне кажется, что проблема в то что RESET уже подключен через конденсатор к USB/TTL установленному на UNO и сигнал проходит не туда.

      • Максим:

        Uno без проблем прошивается на последней прошивке ESP-Link V2.2.beta1, причем без конденсатора, просто сажаем ногу esp-шки на reset arduino uno.

  8. Дмитрий:

    Такие модули щупали?
    http://mysku.ru/blog/aliexpress/38586.html

    • Alexey Alexey:

      Пришел один такой.
      У меня он слегка бракованный. Для прошивки приходится нажимать кнопки. (((

  9. Сергей:

    Спасибо за статью. Пробовал с ESP8266 «Witty Cloud» работает только на ESP-Link V2.2.beta1. Флеша у меня 0.512 мб. Стабильная версия часто шла на перезагрузку.
    Пробовал на ProMini 5v и Nano. Пробовали настроить MQTT брокер?

  10. Aleksey Korolev:

    Ждем mqtt брокера и прочий блекджек )))

  11. Константин:

    подключил,настроил,все заработало,спасибо!только жаль,что это нельзя встроить в свой проект,а вешать отдельную есп только для функции удаленной прошивки МК жирно…пока пользуюсь стандартным примером с IDE Arduino_WiFi_AVRISP,там прошивается по SPI,тоже все работает,только неудобно,что не видно сериал порт ардуины,конечно…

    • Alexey Alexey:

      Я думаю на всех устройствах выводить стандартное гнездо для прошивки — туда подключать через кабель ESP. Подключил, прошил, отладил — отключил. Питать ESP от аккумулятора, либо выводить 5В с устройства (если БП там потянет)

      • Константин:

        я немножко не о том…есп у меня подключена к МК «на постоянке»,это не проблема…я к тому,что там у меня своя прошивка и собственно в нее я не могу вставить функции esp-link…ну либо наоборот,расширить esp-link своими функциями…а вот второй есп с кодом есп-линк для прошивки,вешать уже жирно=)

  12. Константин:

    а вообще я пришел к тому,что буду менять Arduino Mega+Ethernet shield на esp8266 12e+MCP23017 (расширитель портов на 16 пинов)…уже опробовал,все работает…расширителей можно вешать до 8 шт…ethernet периодически виснет,надоело бороться..да и скорость у esp в 7 раз выше,а если выбрать 160mgz то в 15 соответственно..оперативки за глаза…осталось научиться писать логи во внутреннюю флеш,как на sd и буду портировать свой «умный дом» на него…но очень бы хотелось вывод сериал порта в веб морду,как здесь в есп-линке..пока готового решения слету не нашел,еще в поисках тоже…

    • Alexey Alexey:

      Мне кажется пара PCF8516 в SOP корпусе будет дешевле одной MCP23017
      Ну и решение не универсальное. Например PWM не будет (нужно другую микросхему вешать)
      Не подцепить SPI, SoftSerial. Даже DS18B20, через расширитель работать не будет. Те же светодиоды WS2812
      Так что все индивидуально под каждый проект.
      Едет ко мне сейчас ESP14 с STM8 на борту. опробую с ним поизгаляться.

  13. alexvs:

    Приветствую. Прочитав эту статью, прикупил пару ESP8266 12E. Включил, попробовал — все работает. Прошил ESP-link. После этого сеть Wi-Fi, не обнаруживается, хотя в порт лог пишется, т.е. модуль с прошивкой работает. Вернул обычную АТ-прошивку, сразу появилась Wi-Fi сеть. Попробовал загрузить последнюю версию ESP-link, та же беда, лог в порт идет, а сеть не доступна. Не могу понять в чем проблема! Не сталкивались с подобным?
    Так выглядит лог:
    ————————————————-
    157> ** esp-link v2.1.7 — 2015-12-13 08:49:46 — cb75396
    157> Flash config restore *FAILED*
    158> CONN led=0
    160> Wifi init, mode=AP+STA
    163> Wifi uses DHCP, hostname=esp-link
    166> «ip»: «0.0.0.0»
    169> «netmask»: «0.0.0.0»
    171> «gateway»: «0.0.0.0»
    174> «hostname»: «esp-link»
    177> sleep enable,type: 2
    179> Httpd init, conn=0x3fff293c
    182> Serbridge pins: reset=12 isp=13 swap=0
    195> Reset cause: 6=external
    195> exccause=0 epc1=0x0 epc2=0x0 epc3=0x0 excvaddr=0x0 depc=0x0
    196> Flash map 512KB:256/256, manuf 0xE0 chip 0x4016
    200> ** esp-link ready
    203> MQTT_Init
    204> mode : sta(5c:cf:7f:84:56:52) + softAP(5e:cf:7f:84:56:52)
    210> add if0
    212> add if1
    213> dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
    221> bcn 100
    11521> chg_A3:-180
    15179> Wifi check: mode=AP+STA status=0
    15179> Enabling/continuing uart log

    • Николай:

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

  14. Александр:

    Вышла стабильная 2.2.3

  15. Тимур:

    Доброе время суток!
    модуль esp8266-07
    загрузка для 512 кб.
    Такая же загвоздка, вай фай не вещает, в ком порт шлет что-то, не могу скорость подобрать, ничего не понятно. пробовал две версии которые на сайте, результат одинаковый.

  16. Тимур:

    этот модуль оказался бракованным(((. распаял другой, тот во время подачи питания на модуль, на скорости 74880 выдает информацию

    ets Jan 8 2013,rst cause:2, boot mode:(3,7)

    load 0x40100000, len 1856, room 16
    tail 0
    chksum 0x63
    load 0x3ffe8000, len 776, room 8
    tail 0
    chksum 0x02
    load 0x3ffe8310, len 552, room 8
    tail 0
    chksum 0x79
    csum 0x79

    2nd boot version : 1.5
    SPI Speed : 40MHz
    SPI Mode : DIO
    SPI Flash Size & Map: 32Mbit(512KB+512KB)
    jump to run user2 @ 81000

    error magic!
    backup boot failed.

    user code done
    Но так же вай фай точка не появляется((

  17. Александр:

    просьба все таки выложить схему подключения

  18. Вячеслав:

    Кто нибудь победил прошивку Ардуино-мега?

    • Вячеслав:

      Сегодня победил, не работает прошивка в лоб, надо немножко костылей.Я запишу тут, авось кому пригодится.
      Имеется в наличии Arduino MEGA2560 и ESP8266-07, именно как тут http://samopal.pro/esp8266-0/ .Прошивка ESP-link за два дня мне не позволила прошить Мегу вообще никак. Смотреть в порту нет проблем, писать чиать туда-обратно тоже, но залить прошивку — увольте. Посмотрел в сторону https://geektimes.ru/post/274092/ , где тоже запустилось все не с первого раза, сначала не хотела шиться. Вернее шилась, но не пела. Сволочь. Нагуглил что прошивку надо в два этапа делать http://www.rudiswiki.de/wiki9/WiFi2AT-ESP8266 Сначала фирменную, а потом и эту: «So, set first the Station login credentials with the expressif firmware (up to version 1.2 for 4 MBit ESP-01). Then flash the Transparent Bridge software.» Ну, чтож, ура, точка видится — в телнет общается. Но Мега не шьется. Блжд! … Опущу метания-оказалось что STK500v2 в МЕГЕ работает только на 115200 и пока avrdude дергает DTRом загрузчику успевает надоесть ждать команду на шитьё.
      Итак выкладываю костыли 🙂
      — прошивка ESP8266-transparent-bridge, если не стартует точка доступа, то сначала шьем expressif firmware.
      — точка доступа появилась, коннект и запускаем PUTTY
      — пишем строчку для avrdude, я скопировал из Arduino IDE заменив там -PCOM4 на P net:192.168.4.1:23
      — в PUTTY шлем команды на сброс MCU и вход в режим программирования (+++ATGPIO2 0+++ATGPIO2 1P)
      — и сразу запускаем вышеприготовленную строчку avrdude

      • Вячеслав:

        Костыль из PUTTY не обязателен, нашлась реализация netcat windows которая умеет делайть таймауты меньше одной секунды, зовут NCAT живет тут https://nmap.org/ncat/ Теперь все сводится к запуску батника.

        set ADDRESS=192.168.4.1
        SET BAUD=115200
        SET HEXFILE=»C:\Users\1\AppData\Local\Temp\arduino_build_523513/BLINK.ino.hex»
        set prog=»C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude»
        set conf=»C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf»
        :GOTOWAN
        echo +++AT BAUD %BAUD% | NCat -i 0.5 —send-only %ADDRESS% 23
        ECHO +++AT GPIO2 0 | NCat -i 0.5 %ADDRESS% 23
        ECHO +++AT GPIO2 1 | NCat -i 0.05 %ADDRESS% 23
        ECHO P | NCat -i 0.05 %ADDRESS% 23

        %prog% -C%conf% -v -v -p atmega2560 -b %BAUD% -c wiring -P net:%ADDRESS%:23 -D -Uflash:w:%HEXFILE%:i

  19. Светлая:

    esp 01
    прошивка V2.1.7
    плата UNO R3

    Не получается подключиться через VSP, выдаёт ошибку как здесь http://samopal.pro/wp13_samopal/wp-content/uploads/1743/tibbo4.jpg

    согласно настройки в указанном файле c:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt
    скорость 115200. Ставила и 115200 и 56700

    Может кто что подскажет?

    Кстати, при подключении, обвязку делать резисторами надо? Если да, схемку можно?

    Спасибо.

  20. Хорошая статья, нужная…
    Кстати, Telnet в Windows 7 есть, но его надо инициализировать… Примерно так: https://www.youtube.com/watch?v=hRZOsFOAzq8

  21. Николай:

    Все бы хорошо, прошивка нужная, но как всегда не понятное в деталях. Допустим берем esp-07, цепляем к XTCOM, там выбираем ком порт, скорость, жмем коннект, все вроде бы ок, дальше у нас не одна прошивка а 3! а значит модуль прошиваем 3 раза, и под каждый из файлов прошивки меняем адрес по которому будет она прошиваться? так? или после каждой из трех прошивок надо модуль перезагружать и заново подключать к XTCOM ?

    • Alexey Alexey:

      Эти файлы шьются в разные области EEPROM
      Перезагружаться не нужно. По очереди прошивать

      • Николай:

        не дождался ответа, и решил проблему таким образом:
        — взял NODEMCU FIRMWARE programmer
        и на вкладке конфига там есть возможность не одну прошивку указать, а сразу несколько
        т.е. берем каждый файл из трех, и для каждого файла указываем с какого адреса шить

        после чего программатор уже сам их всех прошивает вместе, так же как, если бы была одна прошивка.

        Пишу так подробно только потому, что два дня угробил на то чтобы прошить официальную плату wemos mini с помощью этого XTCOM после того, как не прошился esp-07 через XTCOM (он даже с платой wemos перестает прошивать после прошивки первым файлом)

        • Александр:

          Согласен с Вами на все 100%.
          NODEMCU FIRMWARE programmer — лучший софт для таких случаев.

        • Евгений:

          Согласен, модуль esp-12f завелся именно через прошивку этой прогой, причем без всяких перезагрузок и выдергиваний девайсов от компа

  22. Равшан:

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

  23. Равшан:

    ESP-link что в этой статье описаны? версии 2.2.3 и 2.1.7, я пробовал их прошить но описанию для начальной настройки должен был включится режим точка доступа, но ни одна прощивка не работает и не стартует

    • Alexey Alexey:

      Даже не знаю что вам сказать.
      GPIO0 отпускаете?
      У меня прошилось все с первого раза и точка доступа появилась

  24. Равшан:

    Всё как в документации, я прочитал все необходимые документации по прошивке и спецификации ESP-07 ,без толку. На другой прошивке в статье Wifi-IoT Firmware Builder всё работает чётко и тока доступа включается для первоначальной настройки

  25. mideni:

    как вы собрали проект esp-link и получили те 4 файла?

  26. подскажите как и где поменять канал на прошивке esp-link

  27. Александр:

    Все ок, вот только при попытке загрузки скетча выдает ошибку — TIMEOUT…
    http://pixs.ru/showimage/ESPerrpng_9679479_25511775.png

    Впрочем, как и в Вашей статье. Скорость установил 115200 и на порте и в консоли ESP-link. Как Вы эту проблему решали?

  28. Дмитрий:

    Прошил по инструкции, esp-01 настроил, подключил к ардуино уно. в консоли esp мусор — ��������. Пытался прошить ардуину — висит на загружаем, монитор Tibbo — «On-the-Fly» command for 192.168.2.50 — set baud rate to 52600 bps…timed out
    куда копать подкажите

    • Дмитрий:

      Оказывается что все работает, мусор — изменить в скетче Serial.begin. а прошивает он просто долго, около двух минут

  29. Геннадий:

    Хочу отправлять ответы в телеграм, там нужна поддержка https. Она есть в esp-link?

  30. Леонид:

    Добрый день! Нам требуется небольшой блок, содержащий:
    -световое табло (светодиодное или 7-сегментное) на два разряда для индикации температуры, получаемой по wi-fi от удаленного компьютера;
    -кнопку, дающую сигнал на удаленный компьютер » выполнить команду».
    Желательные размеры блока — как у домашней метеостанции.
    Питание — от сети через адаптер или батарейное
    Количество — пока 1 шт. для пробы, возможен большой заказ.
    Что вы можете предложить?

    Заранее благодарен, Леонид

Ваш отзыв