Программируем Ардуино «по воздуху» через ESP-link
У меня дома трудится масса устройств умного дома. Большая часть из них использует недорогие платы 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 микроконтроллера, а также подключения дополнительных светодиодов индикации. Есть выбор «предустановленных» конфигураций портов в зависимости от типа модуля и назначения.
На странице WiFi можно настроить подключение к беспроводной сети, а также настроить статический IP-шник модуля, что я и делаю, так как постоянно подключаться к ESP как к точке доступа мне не удобно.
Следующая в меню страничка — это консоль микроконтроллера, вернее его последовательного порта. Среди настроек, очистка окна и настройка скорости. Подключив RX/TX порта микроконтроллера к TX/RX ESP-шки и установив правильную скорость, сразу видим в реальном времени отладочную информацию, выдаваемую контроллером в этот порт. Настройка скорости — это очень важная функция, о которой расскажу позже.
Настройку MQTT и REST я пока пропускаю, так как моя цель не сбор информации, а удаленная отладка и прошивка микроконтроллера. Возможно об этом будет одна из моих следующих статей
Последняя страничка посвящается любителям копаться в системных журналах. Туда выводится отладочная информация по работе ESP-link
Ну вот, теперь у меня есть настроенный ESP-link. Я к нему подключил Arduino Pro Mini. Ножку DTR посадил на GPIO13 ESP-шки (настраивается на первом экране)
Настройка виртуального COM-порта в Windows
Теперь можно настраивать виртуальные COM-порт на компьютере. Для начала проверяю, что наш порт доступен по сети. Для этого захожу по TELNET-ом на 23-й или 2323 порт нашего ESP-link. (Так как TELNETа в Windows 7 нет, то использую для этого установленную у меня программу PUTTY. Данные, которые я видел в консоли через WEB-интерфейс вижу и в TELNET-клиенте.
Осталось настроить виртуальный COM-порт на моем компьютере и связать его с ESP-link. Для этого устанавливаю Tibbo Device Server Toolkit под Widows. Запускаю VSP-manager и настраиваю виртуальный порт
Все. Виртуальный COM10 связанный с моим ESP-link по 23 порту настроен.
Теперь, открывая его в среде Arduino IDE я могу работать с удаленным микроконтроллером через ESP-link. Контроль состояния виртуального порта можно посмотреть в мониторе, который TIBBO вывешивает в трее
Нюанс по скорости прошивки
Небольшой нюанс по скорости. Для прошивки нужно выставлять скорость в консоли ESP-link, прописанную в c:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt для конкретного типа контроллера. В моем файле Arduino Pro Mini это 115200, для того же контроллера на Atmega168 — 19200. Мой перешитый на OPTIBOOT контроллер — 57600. Для программирования мне потребовалось установить эту скорость в настройках «по умолчанию» виртуального COM-порта
Эту же скорость нужно установить в консоли микроконтроллера ESP-link
После этих манипуляций удаленный AVR контроллер программируется так же как и подключенный к локальному порту USB-TTL конвертера. Разве что немного медленнее и не каждый раз, если связь WiFi неустойчивая.
При переходе в режим отладки требуется переключить скорость консоли в нужную (какая установлена в Serial.begin()
Подводя итоги
Повозившись с настройками я получил метод удаленной отладки и программирования любых Ардуино-контроллеров и AVR-с загрузчиком по последовательному порту (и наверняка многих других МК). Более того, я получил удаленную консоль для любых последовательных интерфейсов, например, от различных GPS и GSM модулей. Теперь осталось собрать ESP-шку в какой нибудь корпус, запитать от аккумулятора (мало ли у меня где-то под потолком будут проблемы с питанием) и наделать разъемов для быстрого подключения к различным контроллерам.
К недостаткам данного метода можно отнести его достаточно сложную настройку, некоторую тормознутость при прошивке и при работе консоли, а так же необходимость установки скорости прошивки/отладки (что не требуется при работе в том же Arduino IDE по локальным портам).
Sorry, the comment form is closed at this time.