Прошивка esp8266: Обновление прошивки ESP8266

Содержание

Обновление прошивки ESP8266

Для работы с RemoteXY модуль ESP8266 должен иметь версию прошивки с поддержкой AT команд не ниже v0.40. Для проверки версии модуля, а так же для изменения прошивки в случае необходимости, подключите модуль к компьютеру через последовательный порт. Модуль можно подключить через плату Arduino или через USB-UART адаптер.

Подключение через плату Arduino

При использовании Arduino основной чип ATmega переводится в режим сброса, активным остается только встроенный USB-UART преобразователь. Для этого контакт RESET соединяется с землей. Контакты RX и TX подключаются к ESP8266 напрямую, а не крест накрест, как если бы они подключались для работы с контроллером.


Подключение через USB-UART адаптер

Преобразователь должен иметь выход источника 3.3V для питания ESP8266. Так же этот источник должен обеспечить необходимый ток не менее 200мА.

Контакт CPIO0 определяет режим работы модуля. При не подключенном контакте модуль работает в штатном режиме и выполняет AT команды. При замыкании контакта на землю, модуль переводится в режим обновления встроенной прошивки. Перевод модуля в режим прошивки требует, что бы контакт CPIO0 был подключен к «земле» в момент подачи питания на модуль. Если замыкать контакт при работающем модуле, перевод модуля в режим обновления прошивки не произойдет.

Проверка текущей версии

Для отправки AT команд и просмотра ответов необходимо использовать любую программу монитора последовательного порта. Очень хорошо подходит терминальная программа из Arduino IDE. В программе необходимо установить режим отправки команд с завершающим символом перевода строки и возвратом каретки. Скорость работы модуля по умолчанию 115200 бит/сек. Для работы модуля в штатном режиме контакт CPIO0 должен быть отключен.

Проверить текущую версию прошивки можно выполнив AT команду: AT+GMR. Пример ответа модуля:


AT+GMR 

AT version:0.40.0.0(Aug 8 2015 14:45:58) 
SDK version:1. 3.0 
Ai-Thinker Technology Co.,Ltd. 
Build:1.3.0.2 Sep 11 2015 11:48:04 
OK  

Так же стоит узнать размер флеш памяти вашего модуля, от этого зависят настройки адресов загрузки данных при обновлении прошивки. В данной инструкции описана прошивка модуля с размером флеш памяти 8Mbit(512KB+512KB) или 16Mbit(1024KB+1024KB), как наиболее распространенных. Размер флеш памяти можно узнать, выполнив AT команду сброса модуля: AT+RST.


AT+RST

OK

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

load 0x40100000, len 1396, room 16 
tail 4
chksum 0x89
load 0x3ffe8000, len 776, room 4 
tail 4
chksum 0xe8
load 0x3ffe8308, len 540, room 4 
tail 8
chksum 0xc0
csum 0xc0

2nd boot version : 1.4(b1)
  SPI Speed      : 40MHz
  SPI Mode       : DIO
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

#т#n't use rtc mem data
slЏ‚rlМя
Ai-Thinker Technology Co.

,Ltd.

ready

Программа для прошивки

Для обновлении прошивки необходимо скачать программу для прошивки и саму прошивку. Программа для прошивки ESP8266 будем использовать Flash Download Tools с официального сайта Espressif Systems. Ссылка на страницу загрузки на официальном сайте: http://espressif.com/en/products/hardware/esp8266ex/resources. Необходимо перейти в раздел «Tools».

Прошивка

Прошивку так же можно скачать с официального сайта. Ссылка на страницу загрузки на официальном сайте: http://espressif.com/en/products/hardware/esp8266ex/resources. Необходимо перейти в раздел «SDKs & Demos» и загрузить прошивку ESP8266 NONOS SDK версии не менее v1.3.0. Именно с этой версии прошивки реализована поддержка AT команд v0.40 и более.

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

Настройка

Запускаем программу прошивки Flash Download Tools v2. 4 (одноименный .exe файл). В открывшемся окне необходимо правильно указать загружаемые файлы и настройку соединения.

Загружаемые файлы располагаются в каталоге bin архива с прошивкой. Для каждого файла необходимо указать правильный адрес загрузки. Используйте следующую таблицу для выбора файлов и назначения адресов:

Установите следующие параметры настройки:

  • SPIAutoSet — установлен;
  • CrystalFreq — 26M;
  • FLASH SIZE – 8Mbit или 16Mbit в зависимости от размера флеш-памяти;
  • COM PORT – выберите порт, к которому подключена ESP;
  • BAUDRATE – 115200

Для старта прошивки необходимо нажать кнопку «START».

Последовательность шагов для прошивки ESP8266

1. Подключите модуль к компьютеру согласно схеме подключения в этой статье.

2. Запустите монитор последовательного порта. Выполните AT команды AT+RST и AT+GMR для определения текущей версии прошивки и размера памяти модуля. Этот шаг так же позволяет проверить правильность подключения модуля.

3. Запустите программу прошивки Flash Download Tools, правильно настройте загружаемые файлы, установите настройки.

4. Отключите питание модуля ESP8266.

5. Соедините контакт CPIO0 на землю.

6. Подайте питание на модуль ESP8266.

7. Нажмите в программе прошивки кнопку START

8. Дождитесь окончания прошивки модуля. По окончании прошивки появится надпись FINISH зеленого цвета.

9. Отсоедините питание модуля ESP8266. Отсоедините землю с контакта CPIO0.

10. Включите модуль, запустите монитор последовательного порта. Убедитесь в работоспособности модуля и новой версии прошивки выполнив AT команду AT+GMR.

подключение и обновление прошивки – esp8266

Модуль esp8266 подключен USB-TTL на 3,3 вольта

ESP8266 — быстрый старт для начинающих

Как проверить ESP8266

Как быстро подключить ESP8266

Как правильно подключить ESP8266

Как подключить ESP8266 через Arduino

Как подключить ESP8266 через RaspberryPi

Как настроить ESP8266

Как обновить прошивку ESP8266

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

Как проверить ESP8266

Для проверки ESP8266, который вы только что  приобрели, потребуется источник стабилизированного напряжения на 3,3 вольта.

Внимание! Допустимый диапазон напряжения питания модуля ESP8266 от 3,0 до 3,6 вольт. Подача повышенного напряжения питания на модуль гарантированно приведет к выходу ESP8266 из строя.

Чтобы проверить ESP8266 ESP-01 достаточно подключить три пина: VCC и CH_PD (chip enable) к питанию 3,3 вольт, а GND к земле. Если у вас не ESP-01, а другой модуль и на нем выведен GPIO15, то дополнительно еще потребуется подключить GPIO15 к земле.

При успешном старте заводской прошивки на модуле ESP8266 загорится красный светодиод (индикатор питания, на некоторых версиях модуля, например ESP-12, может отсутствовать) и пару раз мигнет синий (это индикатор передачи данных от модуля к терминалу по линии TX-RX, может иметь другой цвет) и в вашей беспроводной сети должна появится новая точка доступа с именем «ESP_XXXX», которую вы сможете увидеть с любого WiFi устройства. название точки доступа зависит от производителя прошивки и может быть другим, например AI-THINKER_AXXXXC. Если точка доступа появилась, то можно продолжить эксперименты далее, если нет, то еще раз проверьте питание, CH_PD, GND и если все подключено правильно то, скорее всего, у вас неисправный модуль, но есть надежда, что прошивка в модуле с нестандартными настройками и, возможно, вам поможет перепрошивка.

Как быстро подключить ESP8266

В минимальный набор для подключения и прошивки модуля ESP8266 входит:

1. Собственно сам модуль ESP8266

2. Беспаечная макетная плата

3. Набор проводов папа-мама для макетной платы или DUPONT M-F кабель

4. USB-TTL конвертер (ищите с переключателем на 5 и 3,3 вольт, либо версия на 3,3 вольта) на базе FTDI, PL2303 или аналогичном чипе. Идеальным будет вариант, когда на USB-TTL адаптере будут выведены DTR и RTS — это позволит быстро загружать прошивку из Arduino IDE, UDK, Sming без ручного переключения GPIO0 на землю.

В случае если у вас USB-TTL конвертер на 5 вольт, то вам дополнительно потребуется стабилизатор питания на чипе 1117 или аналогичном (ток не менее 300 мА, желательно с конденсаторной обвязкой в виде готового модуля, но сойдет и просто микросхема) и источник питания (для 1117 отлично подойдет пятивольтовая зарядка от смартфона). Вообще, лучше не питать ESP8266 от USB-TTL конвертера или Arduino, а использовать отдельный источник питания — это избавит вас от множества проблем.

В расширенный набор для постоянной и комфортной работы с модулем ESP8266 вам дополнительно потребуются разъемы питания, DIP переключатели, резисторы и светодиоды. Я также использую недорогой USB монитор (Charger Doctor — листайте список  дальше, ищите в белом корпусе), который позволяет видеть потребляемый ток (с китайской точностью) и немного защищает шину USB от короткого замыкания по питанию (при КЗ дисплей монитора начинает мигать)

1. Модулей ESP8266 достаточно много и первое, что вам потребуется, это идентифицировать ваш модуль и определить его распиновку. На нашем сайте есть замечательная таблица с фотографиями модулей и их распиновкой. Далее в этом кратком пособии для начинающих, мы будем подразумевать, что работаем с модулем ESP8266 ESP-01 V090. Если у вас другой модуль (например, ESP-07 или ESP-12) и на нем выведен пин GPIO15 (MTDO, HSPICS), то этот пин необходимо притянуть к земле как для обычного старта модуля, так и для режима прошивки.

2. Убедиться два раза, что питающее напряжение для модуля составляет 3,3 вольта.

Внимание! Допустимый диапазон напряжения питания модуля ESP8266 от 3,0 до 3,6 вольт. Подача повышенного напряжения питания на модуль гарантированно приведет к выходу ESP8266 из строя. Питающее напряжение может быть и существенно ниже 3 вольт, заявленных в документации

3. Если вы счастливый обладатель USB-TTL конвертера на 3,3 вольта то подключите модуль, как на рисунке ниже (левая часть). Если у вас только пятивольтовый USB-TTL, то используйте в качестве инструкции правую часть рисунка.

На первый взгляд схема справа может показаться «лучше» из-за использования отдельного источника питания, но это не совсем так — при использовании USB-TTL конвертера на 5 вольт желательно добавить делитель на резисторах для согласования пятивольтовых и трехвольтовых уровней логики либо модуль преобразования уровней.

Внимание! На правом рисунке подключение UTXD (TX) и URXD (RX) модуля ESP8266 к пятивольтовой TTL логике вы осуществляете на свой страх и риск! Документация на SoC ESP8266 сообщает, что модуль толерантен только к 3. 3 вольтовой логике. В большинстве случаев подключение ESP8266 к пятивольтовой логике НЕ ПРИВОДИТ к выходу из строя ESP8266, однако именно вашему модулю может не повезти. Для исключение риска выхода модуля ESP8266 из строя рекомендуется использовать USB-TTL конвертер на 3,3 вольта, либо TTL 5v-3.3v конвертеры либо делитель на резисторах (на рисунке не показан). Более подробно о согласовании логических уровней можете прочитать здесь. Рисковые гики, вроде меня, подключают ESP8266 к пятивольтовой TTL логике напрямую и не заморачиваются.

Внимание! На правом рисунке показано подключение стабилизатора питания 1117 без дополнительной обвязки.  Это работает, но все же, мы рекомендуем использовать схему подключения 1117 с конденсаторной обвязкой — сверьте схему подключения с даташитом на ваш стабилизатор либо используйте готовый модуль на базе 1117.

ESP8266 — подключение

Красный — питание 3,3в

Черный — GND

Желтый — на стороне ESP8266 — RX, на стороне USB-TTL — TX

Зеленый  — на стороне ESP8266 — TX, на стороне USB-TTL — RX

Оранжевый — CH_PD (CHIP ENABLE) — должен быть всегда подтянут к питанию

Синий — GPIO0 — подключен через выключатель к земле для включения режима перепрошивки модуля. Для обычного старта модуля GPIO0 можно оставить никуда не подключенным.

Розовый на правой схеме — нестабилизированное питание 5-8 вольт

4. Для старта модуля разорвите цепь GPIO0 — GND и можете подавать питание (причем именно в таком порядке: сначала убеждаемся, что GPIO0 «висит в воздухе», затем подаем питание на VCC и CH_PD)

Внимание! В вышеприведенных, реально работающих, примерах подключения ESP8266 используется подключение выводов ESP8266 «напрямую» к земле и питанию, либо «висячее в воздухе», как у нас никуда не подключен RESET, что является абсолютно неправильным и пригодно только для пары первых экспериментов, хотя и вполне работоспособно на подавляющем большинстве модулей. «Напрямую» к питанию подключается только вывод VCC, остальные выводы: CH_PD, RESET, GPIO0, GPIO2, должны быть подтянуты (pullup) к питанию (VCC) через резистор от 4,7 до 50 кОм. «Напрямую», к минусу (общему проводу) питания подключаем только GND, а GPIO0 подтягиваем (pulldown) тоже через резистор до 10k к GND для перевода модуль в режим загрузки прошивки. Если вы планируете и дальше экспериментировать с ESP8266, то сделайте грамотное подключение, впрочем так же как и для любых других микроконтроллеров. Детальное описание pullup и pulldown выходит за рамки данной статьи, но вы сможете легко нагуглить описание правильного подключения портов ввода-вывода. «Правильное» подключение позволит вам избежать множества «чудес» и проблем и будет неизбежно необходимым при возникновении затруднений с запуском или перепрошивкой модуля ESP8266.

Как правильно подключить ESP8266

Если вы планируете заниматься с ESP8266 больше, чем один вечер, то вам потребуется вариант подключения, обеспечивающий более высокую стабильность. Ниже приводятся две схемы подключения: с поддержкой автозагрузки прошивки из Arduino IDE, UDK, Sming и без нее.

Схема подключения ESP8266 (без автозагрузки прошивки, прошиваемся предварительно установив перемычку BURN и перезагрузив модуль)

Схема подключения с поддержкой автозагрузки прошивки из Arduino IDE, UDK, Sming. Для Flash Download Tool и XTCOM_UTIL, возможно, потребуется отключение RTS/DTR. Если RTS и DTR вам отключать неудобно, то можно добавить в схему перемычки

На этих схемах не показано подключение ADC и свободных GPIO — их подключение будет зависеть от того, что вы захотите реализовать, но если хотите стабильности, то не забудьте притянуть все GPIO к питанию (pullup), а ADC к земле (pulldown) через подтягивающие резисторы.

Резисторы на 10k могут заменены на другие от 4,7k до 50k, за исключением GPIO15 — его номинал должен быть до 10k. Номинал конденсатора, который сглаживает высокочастотные пульсации, может быть другим.

Соединение RESET и GPIO16 через резистор deep sleep на 470 Ом вам потребуется, если вы будете использовать режим deep sleep: для выхода из режима глубокого сна модуль перезагружает сам себя, подавая низкий уровень на GPIO16. Без этого соединения глубокий сон будет вечным для вашего модуля.

На первый взгляд на этих схемах кажется, что GPIO0, GPIO2, GPIO15, GPIO1 (TX), GPIO3 (RX) заняты и вы не можете их использовать для своих целей, но это не так. Высокий уровень на GPIO0 и GPIO2, низкий на GPIO15 требуются только для старта модуля, а в последующем вы можете использовать их по своему усмотрению, только не забудьте обеспечить требуемые уровни до перезагрузки модуля.

Можно использовать и TX, RX как GPIO1 и GPIO3 соответственно, не забывая о том, что при старте модуля любая прошивка будет дергать TX, отправляя отладочную информацию в UART0 на скорости 74480, но после успешной загрузки вы можете использовать их не только как UART0 для обмена данными с другим устройством, но и как обычные GPIO.

Для модулей, имеющих меньшее количество разведенных пинов, как например, ESP-01 подключение неразведенных пинов не требуется, т.е. на ESP-01 разведены только: VCC, GND, GPIO0, GPIO2, CH_PD и RESET — вот только их и подтягиваете. Нет никакой необходимости припаиваться прямо к микросхеме ESP8266EX и притягивать неразведенные пины, только если вам это действительно необходимо.

Данные схемы подключения родились после множества экспериментов, проведенных нашими форумчанами и собраны по крупицам из разрозненной и недоступной изначально документации нашим сообществом, я всего лишь постарался объединить эти знания в одном месте. Множество советов по подключению вы найдете на нашем форуме.  Там же вы сможете задать интересующие вас вопросы или найти помощь в решении проблем. Если вы увидели ошибку, неточность в этой статье или вам есть что добавить, то сообщите мне об этом в специальной теме на нашем форуме.

Внимание! Даже эти схемы нельзя назвать «идеальными». Совершенству нет предела: удобно подключить второй USB-TTL к UART1 (c ESP8266 можно взять только GND и UTXD1, т.е. GPIO2) для подключения отладочного терминала (потребуется второй USB-TTL конвертер) — тогда можно будет прошивать модуль ESP8266 через UART0 без отключения терминала отладки на UART1. Неплохо будет подключить резисторы малого номинала к выводам обоих UART, поставить диод в линию RTS, добавить конденсатор в линию питания для гашения низкочастотных импульсов и т.д. Очень удобно, например, сделано в этой отладочной плате: на все GPIO подключены светодиоды, на ADC подключен фоторезистор, но жаль, что нет кнопки RESET и перемычка только одна на GPIO0.

Правильным будет сказать вам, что не существует идеальной и в тоже время универсальной схемы подключения ESP8266. Все дело в том, что очень многое зависит от прошивки, которую вы собираетесь туда залить. Вышеприведенные схемы рассчитаны на новичков, которые только начинают осваивать ESP8266, для экспериментов. Для реальных проектов, возможно, вам придется немного изменить схему. Например, для прошивки TCP2UART нужно подключить RTS к GPIO15, а CTS к GPIO13. Также в реальных проектах рекомендую уделить особое внимание питанию.

Подключение ESP8266 через Arduino

Если у вас под рукой не оказалось USB-TTL конвертера на 3,3в, но есть Arduino со встроенным USB-TTL конвертером, то можно использовать такую схему подключения

ESP8266 подключение через Arduino

На что обратить внимание:

1. Arduino Reset подключен к GND (синий провод) чтобы не запускался микроконтроллер на Arduino, в данном виде мы используем Arduino как прозрачный USB-TTL конвертер

2. RX и TX подключены не «на перекрест», а прямо — RX — RX (зеленый), TX — TX (желтый)

3. Все остальное подключено так же, как и в предыдущих примерах

Внимание! В этой схеме также требуется согласовывать уровни TTL 5 вольт Arduino и 3.3 вольта на ESP8266, однако неплохо работает и так.

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

Существует и другая схема подключения Arduino и ESP8266 с использованием SoftSerial. В виду того, что для библиотеки SoftSerial скорость порта в 115200 является слишком большой и не гарантирует стабильную работу, мы не рекомендуем использовать такой способ подключения, хотя есть люди, у которых все стабильно работает (правда только на скорости 9600). Скетч для такой схемы подключения (спасибо nec3540A)

Подключение ESP8266 через RaspberryPi

Да, можно и «из пушки по воробьям», если под рукой нет вообще никакого USB-TTL конвертера. Подключение через малинку аналогично Arduino, но не такое удобное, т.к. дополнительно потребуется стабилизатор питания на 3,3 вольта. RX, TX, GND малинки подключаем к ESP8266, VCC и GND берем со стабилизированного источника питания на 3,3 вольта. Обратите внимание на то, что необходимо соединить GND всех устройств: малинки, стабилизатора и ESP8266. Брать 3,3 вольта питания с малинки для ESP8266 я лично не пробовал, поэтому вам предлагать такой вариант не буду. Если встроенный в вашу версию малины стабилизатор держит до 300 миллиампер дополнительной нагрузки, то подключение ESP8266 вполне возможно. Если сами захотите рискнуть — пожалуйста.

Настройка ESP8266

Итак, ESP8266 модуль к USB порту мы подключили (через USB-TTL или Arduino) теперь нужно убедится, что драйвера к вашим USB-TTL или Arduino встали корректно и в системе появился новый виртуальный последовательный порт. Вам понадобится программа — терминал последовательного порта. Можете использовать любую на ваш вкус, но она должна удовлетворять следующему требованию: каждая команда, которую вы отправляете с компьютера в последовательный порт должна завершаться символами CR+LF.

Большой популярностью пользуется программа CoolTerm (есть версии для Win/MAC/Linux).

Ваш покорный слуга является автором open-source программы ESPlorer, получившей международное признание. ESPlorer позволит вам не вводить AT команды вручную и легко работать с lua скриптами под NodeMCU (об этом в другой раз) и вы вполне можете использовать ее и как обычный терминал. Обсуждение ESPlorer на нашем форуме и на esp826.com

С подключением к последовательному порту придется немного поколдовать: в связи с разнообразием прошивок для ESP8266, подключение может осуществляться на разных скоростях. Нужную скорость можно определить путем простого перебора трех вариантов: 9600, 57600 и 115200. Как осуществить перебор? Подключаетесь в терминальной программе к вашему виртуальному последовательному порту выставив следующие параметры: 9600 8N1, затем перезагружаете модуль, отключив CH_PD (chip enable) от питания (USB-TTL при этом остается подключенным к USB) и снова включаете (т. е. просто передергиваете CH_PD, почему не передергиваем питание — читаем здесь, также можно кратковременно замкнуть RESET на землю для перезагрузки модуля) и наблюдаете данные в терминале. Во-первых, светодиоды на ESP8266 должны гореть как описано в начале статьи в разделе Проверка ESP8266. Во-вторых, в терминале вы должны увидеть «мусор» из разных символов, оканчивающийся строкой «ready». Если «ready» мы не видим, то переподключаемся терминалом на другой скорости и снова перезагружаем модуль.

На одном из вариантов скорости «ready» вы все-таки увидите — поздравляем, ваш модуль готов к работе.  Если нет, то добро пожаловать к нам на форум — мы постараемся помочь, но предварительно почитайте эту тему.

Немного подробнее о «мусоре». Дело в том, что при старте прошивки, UART модуля ESP8266 переключается на скорость передачи 74 880 (вот такие забавные эти китайцы) выдает в UART отладочную информацию, затем переключает скорость порта на 115200 (ну или на 9600 или 57600 в зависимости от версии прошивки), так вот эта отладочная информация и видится нам как мусор, т. к. мы подключаемся к модулю на другой скорости. Можете подключится к ESP8266 на скорости 74 880 (ESPlorer поддерживает эту скорость) и вы эту отладочную информацию увидите, будет что-то вроде этого:

wdt reset load 0x40100000, len 25052, room 16 tail 12 chksum 0x0b ho 0 tail 12 room 4 load 0x3ffe8000, len 3312, room 12 tail 4 chksum 0x53 load 0x3ffe8cf0, len 6576, room 4 tail 12 chksum 0x0d csum 0x0d

1

2

3

4

5

6

7

8

9

10

11

12

wdt reset

load 0x40100000, len 25052, room 16

tail 12

chksum 0x0b

ho 0 tail 12 room 4

load 0x3ffe8000, len 3312, room 12

tail 4

chksum 0x53

load 0x3ffe8cf0, len 6576, room 4

tail 12

chksum 0x0d

csum 0x0d

НО! не увидите «ready» и не сможете управлять модулем, пока не переподключитесь на ту скорость, на которой работает прошивка.

Что делать дальше

Если у вас новый модуль, то, скорее всего, в нем прошита одна из старых кастомных AT прошивок. Скорее всего это какой-нибудь AI-THINKER AT v0.16 SDK v0.9.2. Проверить версию прошивку вы можете командой «AT+GMR», т.е. прямо в терминальной программе набираете AT+GMR без кавычек и жмете Enter. Модуль должен ответить «OK» и выдать версию прошивки (например, «0016000092» — в разных версиях AT прошивок формат вывода версии отличается). Управление модулем ESP8266 AT командами заслуживает отдельной статьи, однако вы легко сможете разобраться с этим и сами, воспользовавшись одним из наших справочников по AT командам:

На момент написания этой статьи актуальная версия прошивки для ESP8266:

версия AT команд v0.21, версия SDK v0.9.5

Обновление прошивки ESP8266

Модуль ESP8266 замечателен тем, что не требует специального программатора — обновление прошивки производится на том же железе, на котором вы подключаете модуль ESP8266 к компьютеру, т.е. тоже через USB-TTL конвертер (ну или Arduino или RPi). Для обновление прошивки на модуле ESP8266 проделайте следующее:

 1. Скачайте новую версию прошивки с нашего сайта из раздела ESP8266 прошивки (вот ссылка на последнюю версию прошивки AT 0.21 SDK 0.9.5 на момент написания этой статьи)

2. Скачайте одну из утилит для прошивки ESP8266 в зависимости от вашей операционной системы из раздела ESP8266 Утилиты с нашего сайта

для Win систем подойдет XTCOM UTIL (удобно работать, если прошивка состоит из одного файла), мультиплатформенный esptool (требуется python, нужно указывать параметры в командной строке),  FLASH DOWNLOAD TOOL (много настроек, удобно прошивать прошивки, состоящие из нескольких файлов, позволяет «собрать» прошивку в один файл из нескольких). Также вы найдете и другие программы для прошивки ESP8266 — попробуйте разные и пользуйтесь той, которая вам больше понравится.

3. Отключите от последовательного порта вашу терминальную программу

4. Отключите CH_PD от питания, подключите GPIO0 модуля к GND, подключите обратно CH_PD модуля.

5. Запускайте программу для прошивки модуля и загружайте новую прошивку в модуль ESP8266.

Загрузка прошивки в модуль обычно осуществляется на скорости 115200, но режим прошивки модуля поддерживает автоопределение скорости и прошивка может быть осуществлена на скорости от 9600 и выше. Максимальная скорость зависит от многих факторов (вашего USB-TTL конвертера, длины проводов и прочего) и может быть определена экспериментально на конфигурации именно вашего оборудования.

Все последние версии прошивок загружаются с нулевого адреса (0x00000).

Обсуждение этой статьи на нашем форуме

Обсуждение проблем при подключении ESP8266 на нашем форуме

В статье Обновление прошивки ESP8266 подробно описана загрузки прошивки в модуль с помощью программы XTCOM_UTIL.

Использованная литература

ESP8266 Datasheet — Specifications V4.1 — 08.09.2014 English

ESP8266 Datasheet — Beginners Guide V0.4.1 — 17.09.2014 English

ESP8266 AT Instruction Set v0.21 23.01.2015

ESP8266 Datasheet — Module Application Design Guide — 20.08.2014 English

Xtensa Instruction Set Architecture (ISA) Reference Manual

подключение, прошивка и работа с AT-командами

разделы: Интернет вещей , дата: 21 ноября 2018г.


Собственная плата с модулем ESP12E

Появившись четыре года назад, модули на базе чипа ESP8266 наделали много шума, прежде всего своей ценой. Производителем чипов была на тот момент никому неизвестная китайская фирма «Espressif Systems», зарегистрированная в Шанхае. Спустя некоторое время, многие фирмы представили на рынок аналогичные модули собственного изготовления, но по цене они были (и есть) в два — пять раз дороже модулей на ESP8266.

В 2016-ом году, фирма «Espressif Systems» представила на рынок ESP32, который существенно превосходил по своим возможностям ESP8266, и интерес к ESP8266 начал сходить на нет.

ESP32 это двухядерный микроконтроллер, или SoC если угодно, работающий на частоте 240MHz и снабженный радио-интерфейсами: WIFI стандарта 802.11 n (2.4 GHz), с пропускной способностью до 150 Mbps, и Bluetooth Low Energy стандарта 4.2, который был принят четыре года назад. ЦПУ имеет архитектуру Xtensa, есть аппаратная поддержка чисел с плавающей запятой, 7-уровневый конвейер, 520 кБ(!) ОЗУ, и многое другое (см.

документацию: ESP32 Datasheet).

Если конкурентов ESP8266 изготавливают все кому не лень, то у ESP32 конкурентов с сопоставимой ценой фактически нет.

Модули на ESP8266 послужили основой для огромного количества «умных розеток» и им подобных устройств. Если говорить о ESP12 модулях, то здесь имеется около 50 Кбайт ОЗУ, 4 Мбайт флеш-памяти, частота ЦПУ 80МГц, встроенный WiFi контроллер. При этом цена за все это добро — около двух долларов. К сожалению, фирма производитель не предоставляет документацию на чип. Модули поставляются как готовые устройства с AT-интерфейсом и с возможностью программирования через Arduino IDE, используя для этого официальный SDK. Поэтому все изыскания относительно устройства аппаратной части ESP8266 являются результатом исследования энтузиастов.

В статье разбирается подключение, прошивка, и работа с AT командами ESP8266. Изначально статья была целиком посвящена только ESP8266, но впоследствии я решил добавить главу о перепрошивке модуля с ESP32.

AT команды в ESP32 практически все те же, что и в ESP8266, так что, все сказанное относительно работы с AT-командам ESP8266 можно отнести и к ESP32.

Большая часть материала статьи посвящена режиму работы ESP8266, когда он работает в режиме WIFI модема с AT-интерфейсом. Разбираются типовые вопросы: как настроить, что-то скачать, переслать свои данные на сервер, и т.д. Предполагается, что уровень знаний читателя о сетях нулевой. Поэтому я постарался расписать всё максимально доходчиво. Для наглядности, показана работа с программами tcpdump и Wireshark для анализа трафика ESP8266. В качестве вспомогательного оборудования используется WiFi роутер с прошивкой OpenWRT, но вместо него можно использовать любой компьютер с Linux.

    Список используемой документации:
  1. ESP8266 Overview | Espressif Systems Страница продукта на сайте производителя.
  2. ESP8266EX Resources | Espressif Systems Страница с материалами на сайте производителя.
  3. ESP8266 SDK Getting Started Guide
  4. ESP8266 Technical Reference
  5. ESP-01/07/12 Series Modules User’s Manual
  6. ESP8266 AT Instruction Set
  7. ESP8266 AT Command Examples
  8. ESP32 AT Instruction Set and Examples
  9. Netcat Cheat Sheet
  10. Xtensa Instruction Set Architecture (ISA)
  11. Статья: «ESP8266 — подключение и обновление прошивки – esp8266»
  12. Статья на хабре: «Reverse Engineering ESP8266 — часть 1»
  13. Статья на хабре: «Reverse Engineering ESP8266 — часть 2»
  14. ESP8266 быстрый старт
  15. ESP8266 продолжение. Модуль ESP-12
  16. Статья на хабре: «Новые ревизии модулей на базе ESP8266 не умеют писать в SPI Flash»
  17. Книга Дэвида Тейнсли «Linux и UNIX: программирование в shell. Руководство разработчика», глава 29 «Сценарии cgi».

Содержание:

    I. Описание ESP8266
  1. Распиновка и подключение модулей ESP12
  2. Формат загрузочного лога, режимы работы SPI флеш-памяти
  3. Баг в Linux драйвере USB-UART преобразователя CP2102
    II. Прошивка ESP8266
  1. Использование esptool
  2. Первый способ прошивки
  3. Второй способ прошивки
  4. Третий способ прошивки
  5. Прошивка модуля ESP12E AT-интерпретатором версии 1.7.0 (август 2018г)
    III. Использование связки ESP8266 + OpenWRT
  1. Связка OpenWRT + ESP8266, использование сниффера tcpdump и анализатора траффика Wireshark для иследования трафика ESP8266
  2. Получение даты и времени через сеть, используя NTP
    IV. Связь ESP8266 с Web сервером на OpenWRT
  1. Связь ESP8266 с Web сервером на OpenWrt: настройка OpenWRT
  2. АТ-команды для установки TCP/UDP соединения
  3. Получение web-страницы от сервера на OpenWRT
  4. Получение лога погоды от сервера на OpenWRT
    V. Связь ESP8266 с Web сервером на OpenWRT посредством CGI скриптов
  1. Управление OpenWRT через ESP8266 посредством CGI интерфейса
  2. Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос
  3. Отправка данных от ESP8266 на web-сервер OpenWRT через POST запрос
    VI. Прозрачный режим соединения (UART-WiFi passthrough)
  1. Управление Linux/OpenWRT используя режим «UART-WiFi passthrough»
    VI. Плата NodeMCU с модулем ESP-WROOM-32
  1. Прошивка ESP32 в интерпретатор AT-команд

1) Распиновка и подключение модулей ESP12

Распиновка модулей ES8266

Т.к. я счастливый обладатель двух модулей ESP12E и одного NodeMCU v. 3 (он тоже на базе ESP12E), то далее речь пойдёт именно о них.

Распиновка модуля ESP12E:

Перед впаиванием модуля в плату я сделал фото обратной стороны модуля, где были нанесены обозначения выводов, после чего фотографию совместил со схемой распиновки: «вид сверху» :

Замечу, что модуль имеет светодиод подключённый к GPIO_2.

Модули ESP12E/ESP12F были спроектированы компанией Ai-Thinker. У них на сайте имеется хороший мануал по модулям их производства: ESP-01/07/12 Series Modules User’s Manual. Но фактически, модули могут изготавливаются в Китае кем угодно.

Посмотреть модельный ряд модулей Ai-Thinker на базе чипа ESP8266, можно на следующей картинке:

Из всего ряда в ходу сейчас остались: ESP01 который имеет выводы с шагом 2.5 мм, ESP07 который имеет разъём для внешней антенны, и ESP12E/ESP12F. Замечу, что модули ESP01 идут с флешкой на 1 мегабайт, а первые модели шли вообще с 512кБ флеш-памяти.

Распиновка модуля Nodemcu v. 3:

Здесь имеется две кнопки: «RESET», и непонятная кнопка «FLASH». Непонятна она потому, что прошивка у NodeMCU происходит в автоматическом режиме, кнопку «FLASH» для этого зажимать не нужно. Также NodeMCU имеет линейный стабилизатор на 3.3 Вольт и USB-UART преобразователь на чипе CP2102. Данную плату можно использовать с беспаячной макеткой, в то время как вариант платы с чипом ch440g туда уже не влазит. Т.е. влазить то он влазит, но при этом закрывает все контактные ячейки.

К недостаткам платы NodeMCU я отнесу то, что она не умеет работать с режимом глубокого сна ESP8266 (deep sleep). После «засыпания» проснуться ESP8266 уже не может, приходится нажимать Reset.

Фирма «Espressif Systems» выпускает свой модуль на базе ESP8266 под обозначением ESP-WROOM-02. В документации во всех примерах используется именно он. Данный модуль имеет сертификат FCC для продажи на территории США:

Заметьте, что на плате имеется знак чувствительности к электростатике. Зимой при сухом воздухе это особенно актуально.

Подключение модуля

Если плату NodeMCU можно сразу подключать к USB-порту компьютера, то с модулем ESP12 придётся немного повозится.

Нам понадобится USB-UART преобразователь с 3.3 вольтовой логикой, паяльник и несколько проводов. В ESP8266 SDK Getting Started Guide приводится следующая схема подключения:

На фотографии слева видны три провода ведущие к USB-UART преобразователю, «земля» подключена к GPIO_0 и GPIO_15, питание 3.3 Вольт подаётся на EN-пин.

Выглядит это так:

Обратите внимание на жёлтый провод с коннектором. При включении, ESP8266 проверяет состояние GPIO_0. Если он оказывается подключён к «земле», то ESP8266 входит в режим прошивки и какое-то время ждёт, поступление прошивки через UART. Т.о. для прошивки ESP8266 контакт GPIO_0 должен быть подтянут к «земле», для обычной работы он должен быть свободен.

В случае использования модуля ESP12E, подключение будет таким:

Здесь кроме всего прочего, в питанию подтягивается ещё и RESET.

Но всё-таки скрутки проводов — это не дело. Мой взгляд на али привлёк такой адаптер:

Здесь уже есть пара подтягивающих резисторов: GPIO_15 к «земле» и CP_PD/EN к питанию. Отсутствует нижняя группа контактов, но она используется чипом ESP8266 для соединения с флеш-памятью, т.е. для вас она бесполезна. На обратной стороне адаптера имеется опциональная площадка для линейного регулятора на 3.3В в корпусе SOT-89, но вот конденсаторы для него впаивать некуда, так что это площадка бесполезна. В макетку этот адаптер тоже не запихнёшь, габариты не позволят. Но в остальном, на мой взгляд это лучше чем скрутка проводов.

И все-таки я решил делать свою плату. Я уже упоминал, что весной у меня была возможность заказать два комплекта печатных плат в Китае. И если первым комплектом была STM8 Board, то вторым комплектом я заказал платы для ESP8266.

В качестве схемы я выбрал простую схему из статьи «ESP8266 — подключение и обновление прошивки – esp8266»:

Я не пытался предварительно собрать её на макетке, чтобы проверить работоспособность, или найти ошибки. Поэтому косяки я отлавливал уже на «железе» 😉

Что же с этой схемой не так? Во-первых, здесь перепутаны контакты GPIO_4 и GPIO_5. К счастью, в моем случае это оказалось не принципиально. Во-вторых, здесь не хватает кнопки на CH_PD/EN. Этот пин отключает питание esp8266. Когда требуется перепрошить ESP12, то приходится выполнять такую последовательность: «Отключите CH_PD от питания, подключите GPIO0 модуля к GND, подключите обратно CH_PD модуля.» Мне приходилось просто отключать питание ESP12. Повторять это последовательность по двадцать раз кряду — сильно утомляет. Кнопка с фиксацией на CH_PD/EN и светодиод индикации питания решила бы все проблемы. В принципе, можно использовать USB хаб с кнопками вкл/выкл для питания такой платы. Это удобно. В третьих, здесь не помешали бы подтягивающие резисторы на свободных GPIO. В HiZ состоянии они смогут значительно уменьшить энергопотребление. Если даже они не нужны, то их можно и не впаивать.

К преимуществам данной схемы я могу отнести то, что режим энергосбережения deep sleep здесь работает без каких-либо вопросов. Сам бы я не скоро догадался, что для этого надо ставить резистор на GPIO16.

Вариант платы который у меня получился по этой схеме:

Здесь есть линейный стабилизатор на 3.3 В, кнопка Reset, джампер на GPIO_0, и штыревой разъём для USB-UART преобразователя на чипе FT232RL.

Как я уже сказал, не хватает кнопки питания.

Ещё хотелось бы коснуться темы автозагрузки прошивки в ESP8266, т.е. когда не надо вручную соединять GPIO_0 с землёй для перепрошивки. В статье: «ESP8266 — подключение и обновление прошивки – esp8266» предлагается такая схема с автозагрузкой прошивки:

В руководстве Ai-Thinker я нашёл на мой взгляд более грамотную, схему узла автозагрузки:

В любом случае, для дальнейшей работы вполне сгодится недорогая плата NodeMCU, в которой есть эта самая автозагрузка (правда там не работает ражим энергосбережения «deep sleep»).

2) Формат загрузочного лога, режимы работы SPI флеш-памяти

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

Если вы только что приобрели модуль ESP12, то там уже должен быть уже прошит интерпретатор AT-команд, скорее всего какой-нибудь старой версии. В модулях которые я приобрёл, прошивка оказалось годичной давности.

Нам потребуется терминальная программа, и т.к. в дальнейшем все-равно придётся использовать Arduino IDE, то я буду использовать монитор последовательного порта Arduino IDE.

После подключения к ESP12, в мониторе последовательного порта нужно будет выставить окончание строки: «NL & CR» и скорость порта 115200 бод. После нужно подать команду: «AT» и в ответ должно прийти «ОК»:

Если отклик «OK» был получен, то ваш модуль ESP12 в порядке и можно начинать работу с ним. В противном случае попробуйте перезагрузить ESP8266 и попробовать снова.

Предположим, что ваш модуль в порядке. Для начала полезно будет взглянуть на загрузочный лог. Для этого смените скорость порта в терминальной программе на 74880 бод и нажмите Reset для перезагрузки ESP8266. В терминале появится такой лог:

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)
load 0x40100000, len 2408, room 16 
tail 8
chksum 0xe5
load 0x3ffe8000, len 776, room 0 
tail 8
chksum 0x84
load 0x3ffe8310, len 632, room 0 
tail 8
chksum 0xd8
csum 0xd8
2nd boot version : 1.6
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size & Map: 32Mbit(512KB+512KB)
jump to run user1 @ 1000
rf cal sector: 1017
rf[112] : 00
rf[113] : 00
rf[114] : 01
SDK ver: 2.0.0(5a875ba) compiled @ Aug  9 2016 15:12:27
phy ver: 1055, pp ver: 10.2
"�j�� 

На что нужно смотреть в этом логе?

Версия загрузчика:

  2nd boot version : 1.6

Версия загрузчика, версия SDK и версия AT-интерфейса — это разные вещи. За формат загрузочного лога отвечает именно загрузчик. Актуальная на данный момент версия загрузчика — 1.7.

В данном случае загрузчик нам сразу печатает версию SDK:

  SDK ver: 2. 0.0(5a875ba) compiled @ Aug  9 2016 15:12:27

Имеем SDK двухлетней давности, актуальная версия SDK на настоящий момент — 3.0.0.

  SPI Flash Size & Map: 32Mbit(512KB+512KB)

Это формат прошивки: имеется 32-мегабитная флешка, 512кБ отведено под SDK, ещё 512 кБ отведено под пользовательскую прошивку. Заметьте, это не тест. Вместо , 32Mbit может быть запросто и меньший размер при фактически 32Mbit флешке. Это нормально. Идём дальше:

  SPI Speed      : 40MHz
  SPI Mode       : QIO

Согласно документации на чип winbond 25q32 (Datasheet) может работать на максимальной частоте 100MHz. При этом поддерживаются четыре режима работы: Stndard SPI, Dual SPI, Quad SPI и QPI. Dual SPI эквивалентен скорости работы: частота SPI x 2. Режимы Quad и QPI эквивалентны по скорости работы: частота SPI x 4. «Расплатой» за такие фокусы служит использование дополнительных GPIO для обмена. В вики проекта esptool имеется табличка с режимами работы флеш-памяти ESP8266:

Option Mode Name Pins Used Speed (ESP8266 & ESP32)
qio Quad I/O 4 pins used for address & data Fastest
qout Quad Output 4 pins used for data Approx 15% slower than qio
dio Dual I/O 2 pins used for address & data Approx 45% slower than qio
dout Dual Output 2 pins used for data Approx 50% slower than qio

Судя по этой публикации: «Новые ревизии модулей на базе ESP8266 не умеют писать в SPI Flash», сейчас в ESP модулях используется флешка PUYA P25Q80 (Datasheet). С ней могут быть нюансы. Еще одним нюансом является то, что при использовании флешки на 4 мегабайта и больше, следует использовать режим DIO.

В вики сайта esp8266.com имеется карта памяти ESP8266 с определением границ различных регионов, составленная в результате исследования чипа. Я приведу её сокращённую версию взятую из статьи — «Reverse Engineering ESP8266 — часть 1»:

Диапазон Описание
0x3FFE8000

0x3FFFBFFF
оперативная память для пользовательских приложений. При старте модуля может инициализироваться значениями из пользовательской прошивки.
0x3FFFC000

0x3FFFFFFF
системная оперативная память
0x40000000

0x4000FFFF
системный ROM. Отсюда стартует процессор, загружается пользовательская прошивка и здесь находятся основные системные библиотеки.
0x40100000

0x4010FFFF
оперативная память, содержит пользовательскую прошивку
0x40240000

0x40271FFF
вторая часть пользовательской прошивки. Здесь находятся код подключенных библиотек и SDK. Подмаплено к flash по адресу 40000h.

В логе печатается результат проверки контрольных сумм регионов: iram1 и dram0. Контрольной суммой является результат последовательно выполнения операции исключающего ИЛИ (XOR).

load 0x40100000, len 2408, room 16 
tail 8
chksum 0xe5
load 0x3ffe8000, len 776, room 0 
tail 8
chksum 0x84
load 0x3ffe8310, len 632, room 0 
tail 8
chksum 0xd8
csum 0xd8

Теперь обратим внимание на эту строку загрузчика:

jump to run user1 @ 1000

Здесь осуществляется переход на пользовательскую программу, в данном случае это AT-интерпретатор.

"�j�� 

Это выводится слово: «ready».

3) Баг в Linux драйвере USB-UART преобразователя CP2102

Сейчас я хочу рассказать об одной проблеме, которая касается только Linux-пользователей. Linux-драйвер USB-UART преобразователя CP2102, который используется в платах NodeMCU не умеет работать на скорости 74880 бод. Проявляется это в такой ошибке:

Я проверял на трёх чипах CP2102, все они выдавали такую ошибку. Это означает, что скорость 74880 бод на них не работает. И например лог загрузки такой платы выглядит так:

Здесь нечитаемыми символами идёт вывод версии SDK. На первый взгляд проблема может показаться несущественной. Но когда вы прошьёте ESP8266 какой-нибудь глючной прошивкой, то ошибки вам будут сыпаться именно на скорости 74880. И вы их прочитать не сможете. Повторю ещё раз, что эта проблема имеется только в Linux-драйвере. В Windows всё работает как часы. Версия моего ядра: 4.4.12, надеюсь в более свежих версиях этот баг уже исправлен.

4) Использование esptool

Для прошивки ESP8266 будем использовать флешер — esptool. Это программа с открытым кодом компании «Espressif Systems». Домашняя страница проекта: https://github.com/espressif/esptool. Программа устанавливается следующей командой:

$ pip install esptool

Проверяем:

$ esptool. py -h
usage: esptool [-h] [--port PORT] [--baud BAUD]
               {load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash,verify_flash,erase_flash,version}
               ...
esptool.py v1.2 - ESP8266 ROM Bootloader Utility
positional arguments:
  {load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash,verify_flash,erase_flash,version}
                        Run esptool {command} -h for additional help
    load_ram            Download an image to RAM and execute
    dump_mem            Dump arbitrary memory to disk
    read_mem            Read arbitrary memory location
    write_mem           Read-modify-write to arbitrary memory location
    write_flash         Write a binary blob to flash
    run                 Run application code in flash
    image_info          Dump headers from an application image
    make_image          Create an application image from binary files
    elf2image           Create an application image from ELF file
    read_mac            Read MAC address from OTP ROM
    chip_id             Read Chip ID from OTP ROM
    flash_id            Read SPI flash manufacturer and device ID
    read_flash          Read SPI flash content
    verify_flash        Verify a binary blob against flash
    erase_flash         Perform Chip Erase on SPI flash
    version             Print esptool version
optional arguments:
  -h, --help            show this help message and exit
  --port PORT, -p PORT  Serial port device
  --baud BAUD, -b BAUD  Serial port baud rate used when flashing/reading

Подключим ESP8266 к компьютеру и попробуем установить контакт:

$ esptool. py chip_id
esptool.py v1.2
Connecting...
Chip ID: 0x0041280f
$ esptool.py flash_id
esptool.py v1.2
Connecting...
Manufacturer: ef
Device: 4016

Перед вводом команд нужно выполнить процедуру: «а) отключить питание от ESP8266; б) установить перемычку между GPIO_0 и GND; в) включить питание на ESP8266; г) перед вводом команды нажать Reset, подождать одну секунду, и нажать enter для ввода команды». Такую процедуру следует повторять каждый раз при использовании esptool. Для возвращения в нормальный режим работы следует выполнить обратную последовательность: «а) отключить питание от ESP8266; б) убрать перемычку с пинов GPIO_0 и GND; в) включить питание на ESP8266». Если необходимо выполнить несколько команд, то переключаться каждый раз между нормальным и режимом прошивки не нужно. Переключаетесь в режим прошивки, после чего жмёте reset перед каждой командой. Если у вас плата NodeMCU или любая другая плата с возможностью автоматической прошивки, то ничего этого делать не надо, там всё делается автоматически.

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

$ esptool.py --port /dev/ttyUSB0 read_flash 0x00000 0x400000 ./esp8266_firmware.bin

Здесь первое число 0х00000 — это начальный адрес для считывания, второе число 0х400000 — это размер прошивки т.е. 4 мегабайта.

После ввода команды запустится процесс считывания прошивки который займёт примерно минут пять или шесть:

esptool.py v1.2
Connecting...
Running Cesanta flasher stub...
Reading 4194304 @ 0x0... 4194304 (100 %)
Read 4194304 bytes at 0x0 in 391.9 seconds (85.6 kbit/s)..

5) Первый способ прошивки

Теперь мы можем уже что-нибудь прошить. Поначалу, прошивки которые лежат на сайте «Espressif Systems» у меня сыпали логами с ошибками (с последней прошивкой, которая была выложена на сайте Espressif в августе (SDK 3.0.0) в самом деле имеются сложности, но об этом позже), собирать прошивку самому у меня не было желания, поэтому самым простым способом оказалось взять прошивку на сайте ElectroDragon: «ESP8266 AT-Command firmware — ElectroDragon». Там имеется хорошая вики с инструкций по прошивке.

На сайте ElectroDragon: «ESP8266 AT-Command firmware — ElectroDragon» имеется две прошивки, первая подчёркнута красным, вторая обведена синим:

Самый простой способ прошивки — это прошивка одним файлом, как прошиваются микроконтроллеры. С ESP8266 тоже можно так работать. Скачаем и распакуем второй файл, который подчёркнут красным (альтернативная ссылка). Там будут два файла: AiThinker_ESP8266_DIO_32M_32M_20160615_V1.5.4.bin, AiThinker_ESP8266_DIO_8M_8M_20160615_V1.5.4.bin и Readme следующего содержания:

****************************************************************** AiThinker_ESP8266_DIO_8M_8M_20160615_V1.5.4.bin MD5: 8E9E9252317A9BCA67673C17B9E3E075 FirmWare Infomation: SPI MODE: DIO Flash Size: 8Mbit File Size: 8Mbit SPI SPEED: 40MHz SDK Version: V1.5.4 Release Date: 2016.6.15 ****************************************************************** AiThinker_ESP8266_DIO_32M_32M_20160615_V1. 5.4.bin MD5: B561B49242DC88EA5CBFCAB0CF287BF5 FirmWare Infomation: SPI MODE: DIO Flash Size: 32Mbit File Size: 32Mbit SPI SPEED: 40MHz SDK Version: V1.5.4 Release Date: 2016.6.15 ****************************************************************** How to download: 1. Please select the firmware in ESP_DOWNLOAD_TOOL_V2.4; 2. The address should write 0x00000; 3. If you don’t know how to config your download panel, please checked the «DoNotChgBin». That will be download the bin as default setting. More infomation please visit http://www.ai-thinker.com/ If you have any question, please send your mail to [email protected]

Файлы AiThinker_ESP8266_DIO_32M_32M_20160615_V1.5.4.bin, AiThinker_ESP8266_DIO_8M_8M_20160615_V1.5.4.bin это прошивки для плат с флешками на 8Mbit и 32Mbit. В разделе «FirmWare Infomation» указаны режимы флеш-памяти для прошивки. Т.к. на ESP12 установлена флешка на 32Mbit, то нам для прошивки понадобится файл: «AiThinker_ESP8266_DIO_32M_32M_20160615_V1. 5.4.bin».

Проверяем контрольную сумму:

$ md5sum AiThinker_ESP8266_DIO_32M_32M_20160615_V1.5.4.bin
b561b49242dc88ea5cbfcab0cf287bf5  AiThinker_ESP8266_DIO_32M_32M_20160615_V1.5.4.bin

Ок. Контрольная сумма совпадает. Тогда прошиваем следующей командой:

esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash -fm dio -ff 40m -fs 32m 0x00000 ./AiThinker_ESP8266_DIO_32M_32M_20160615_V1.5.4.bin 

Здесь опции: «-fm dio -ff 40m -fs 32m» задают режим работы флеш памяти, которые были указаны в «FirmWare Infomation». Число 0х00000 — это адрес с которого начинается запись. После ввода команды запустится счётчик с процентами выполнения. Процесс прошивки займёт опять же минут пять или шесть:

esptool.py v1.2
Connecting...
Running Cesanta flasher stub...
Flash params set to 0x0240
Writing 4194304 @ 0x0... 4194304 (100 %)
Wrote 4194304 bytes at 0x0 in 362.7 seconds (92.5 kbit/s)...
Leaving...

После завершения прошивки открываем терминал и вводим тестовую команду «AT», если в ответ пришло «OK», значит все в порядке, у нас все получилось.

Далее нам понадобится справочник по AT командам. Они варьируются в зависимости от версии SDK, но мы пока будем использовать только самые базовые. Справочник нужно будет скачать с сайта «Espressif Systems»:

Прямая ссылка на актуальную версию справочника — ESP8266 AT Instruction Set.

Команды АТ-интерфейса можно сравнить с переменными, функциями или может быть с функторами в обычной программе. Соответственно, у этих функций/команд можно запросить текущие параметры (Query Command), тогда после имени команды используется знак вопроса. Можно назначить свои параметры (Set Command), когда после имени команды используется символ «=». Можно запустить команду на выполнение (Execute Command). Также имеется тест команды (Test Command») когда проверяется, поддерживается ли данная команда данным АТ-интерпретатором. Для теста используется комбинация символов: «=?». Не все команды поддерживают все четыре типа обращения к ним, поэтому некоторые из них выглядят как операторы, другие как переменные, третьи как функторы.

Первым делом нам понадобится информация о версиях имеющегося на борту ПО. Она извлекается с помощью команды: AT+GMR

AT+GMR — Вывод информации о версиях ПО

Execute Command: AT+GMR
Отклик: <AT version info>
<SDK version info>
<compile time>
OK
Параметры: • <AT version info>: версия AT-интерпретатора.
• <SDK version info>: версия SDK.
• <compile time>: дата компиляции BIN-файла.
«ESP8266 AT Instruction Set»

Выполняем:

AT+GMR
AT version:1.1.0.0(May 11 2016 18:09:56)
SDK version:1.5.4(baaeaebb)
Ai-Thinker Technology Co. Ltd.
Jun 13 2016 11:29:20
OK

На сайте ElectroDragon: «ESP8266 AT-Command firmware — ElectroDragon» прошивки время от времени обновляются, вот отчёт о версиях ПО прошивки которую я брал там летом:

AT+GMR
AT version:0. 40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04
OK

Вот ещё отчёт прошивки которая была зашита к купленных мною модулях:

AT+GMR
AT version:1.3.0.0(Jul 14 2016 18:54:01)
SDK version:2.0.0(5a875ba)
Farylink Technology Co., Ltd. v1.0.0.2
May 11 2017 22:23:58
OK

Я думаю, что если бы это были оригинальные модули Ai-Thinker, то здесь бы не стояло упоминание какой-то непонятной фирмы: «Farylink Technology Co., Ltd.»

Теперь для обновления прошивки из «облака» нам понадобиться подключиться к интернет. Для этого нам понадобится следующие команды:

AT+CWMODE_CUR — Установка текущего режима Wi-Fi; Конфигурация НЕ СОХРАНЯЕТСЯ во флеш-памяти

Команды: Test Command:
AT+CWMODE_CUR=?
Query Command:
AT+CWMODE_CUR?
Назначение: запрашивает текущий режим работы Wi-Fi ESP8266.
Set Command:
AT+CWMODE_CUR=<режим>
Назначение: устанавливает текущий режим работы Wi-Fi ESP8266.
Отклик: +CWMODE_CUR:<режим>
OK
+CWMODE_CUR:<режим>
OK
OK
Параметры: <режим>:
‣ 1: Station mode
‣ 2: SoftAP mode
‣ 3: SoftAP+Station mode
Замечания: Конфигурация НЕ СОХРАНЯЕТСЯ во флеш-памяти
Примеры: AT+CWMODE_CUR=3
«ESP8266 AT Instruction Set»

AT+CWMODE_DEF — Установка режима Wi-Fi по умолчанию; Конфигурация сохраняется во флеш-памяти

Команды: Test Command:
AT+CWMODE_DEF=?
Query Command:
AT+CWMODE_DEF?
Назначение: запрашивает текущий режим работы Wi-Fi ESP8266.
Set Command:
AT+CWMODE_DEF=<режим>
Назначение: устанавливает режим работы Wi-Fi по умолчанию.
Отклик: +CWMODE_DEF:<режим>
OK
+CWMODE_DEF:<режим>
OK
OK
Параметры: <режим>:
‣ 1: Station mode
‣ 2: SoftAP mode
‣ 3: SoftAP+Station mode
Замечания: Изменённое значение будет сохранено в области параметров
Примеры: AT+CWMODE_DEF=3
«ESP8266 AT Instruction Set»

Устанавливаем режим клиента (Station):

AT+CWMODE_CUR=1 

OK

Поверяем:

AT+CWMODE_CUR? 
+CWMODE_CUR:1

OK

Смотрим какой режим работы Wifi установлен по умолчанию:

AT+CWMODE_DEF? 
+CWMODE_DEF:2

OK

Теперь нам нужно найти точку доступа. Делается это с помощью команды AT+CWLAP:

AT+CWLAP — вывод списка точек доступа WiFi

Команды: Set Command:
AT+CWLAP[=<ssid>,<mac>,<channel>,<scan_type>, <scan_time_min>,<scan_time_max>]
Действие: выполняет поиск точки
доступа с определённым SSID
и/или MAC-адресом, на определённом канале.
Execute Command:
AT+CWLAP
Действие: выводит список всех доступных точек доступа WiFi.
Отклик: +CWLAP:<ecn>,<ssid>,<rssi>,<mac>,<channel>,
<freq offset>,<freq cali>,
<pairwise_cipher>,<group_cipher>,<bgn>,<wps>

OK

+CWLAP:<ecn>,<ssid>,<rssi>,<mac>,<channel>,
<freq offset>,<freq cali>,
<pairwise_cipher>,<group_cipher>,<bgn>,<wps>

OK

Параметры:
  • [<scan_type>]: не обязательный параметр ‣ 0: активное сканирование ‣ 1: пассивное сканирование
  • [<scan_time_min>] : не обязательный параметр, задаётся в мс, диапазон: [0,1500] ‣ При активном сканировании, <scan_time_min> задаёт минимальное время сканирования каждого канала, по умолчанию равно 0 ‣ При пассивном сканировании, значение параметра <scan_time_min> не имеет значения и оно может быть пропущено.
  • [<scan_time_max>] : не обязательный параметр, задаётся в мс, диапазон: [0,1500] ‣ При активном сканировании, <scan_time_max> задаёт максимальное время сканирования для каждого канала; если значение сброшено в ноль, то будет использоваться значение по умолчанию 120 мс. ‣ При пассивном сканировании, <scan_time_max> задаёт время сканирования каждого канала, по умолчанию используется значение в 360 мс
  • <ecn>: метод шифрования: ‣ 0: OPEN ‣ 1: WEP ‣ 2: WPA_PSK ‣ 3: WPA2_PSK ‣ 4: WPA_WPA2_PSK ‣ 5: WPA2_Enterprise (AT can NOT connect to WPA2_Enterprise AP for now.)
  • <ssid>: строковый параметр, задаёт SSID точки доступа.
  • <rssi>: уровень сигнала.
  • <mac>: строковый параметр, задаёт MAC адрес точки доступа.
  • <channel>: номер канала.
  • <freq offset>: frequency offset of AP; unit: KHz. The value of ppm is <freq offset>/2.4.
  • <freq calibration>: calibration for frequency offset.
  • <pairwise_cipher>: ‣ 0:CIPHER_NONE ‣ 1:CIPHER_WEP40 ‣ 2:CIPHER_WEP104 ‣ 3:CIPHER_TKIP ‣ 4:CIPHER_CCMP ‣ 5:CIPHER_TKIP_CCMP ‣ 6:CIPHER_UNKNOWN
  • <group_cipher>:задаёт тип шифра, значения такие же как и для <pairwise_cipher>
  • <bgn>: ‣ bit0 управляет 802.11b режимом; bit1 управляет 802.11g режимом; bit2 управляет 802.11n режимом; ‣ Если значение bit установлено в 1, то соответствующий 802.11 режим будет включён; Если бит будет сброшен в ноль, соответствующий 802.11 режим будет отключён.
  • <wps>:0 — WPS будет отключено; 1 — WPS будет включено.
Примеры: поиск определённой точки доступа: AT+CWLAP=»Wi-Fi»,»ca:d7:19:d8:a6:44″,6
или поиск точки доступа по SSID:
AT+CWLAP=»Wi-Fi»
или включение режима пассивного сканирования:
AT+CWLAP=,,,1,,
«ESP8266 AT Instruction Set»

Сканируем воздух:

AT+CWLAP
+CWLAP:(4,"ROSTELECOM_F0DB",-89,"2c:e4:12:3d:f0:dc",1,-24,0)
+CWLAP:(4,"TP-LINK_A469B8",-92,"b0:48:7a:a4:69:b8",1,11,0)
+CWLAP:(4,"WiFi-DOM. ru-5723",-89,"cc:7b:36:b3:1f:79",1,-9,0)
+CWLAP:(4,"Russkikh",-93,"f0:b4:29:d6:8d:f2",1,-4,0)
+CWLAP:(4,"WiFi-DOM.ru-1784",-84,"ac:64:62:83:19:08",2,13,0)
+CWLAP:(3,"Keenetic-7788",-91,"04:bf:6d:97:08:e4",4,21,0)
+CWLAP:(3,"servant",-75,"14:cc:20:33:44:4e",6,11,0)
+CWLAP:(4,"WiFi-DOM.ru-5838",-92,"d4:76:ea:20:02:38",6,-19,0)
+CWLAP:(4,"ASUS",-90,"00:1a:2b:3c:ff:02",7,6,0)
+CWLAP:(4,"elektrik018",-87,"f0:7d:68:95:b8:e2",9,-7,0)
+CWLAP:(4,"DOM.RU",-89,"c0:4a:00:4d:3f:7c",10,20,0)
+CWLAP:(3,"NETGEAR_146",-76,"c4:3d:c7:8f:44:74",11,-2,0)
+CWLAP:(3,"Alien",-22,"00:90:4c:c1:00:00",11,10,0)
+CWLAP:(4,"WiFi-DOM.ru-1587",-85,"a0:ec:81:23:5a:b1",11,1,0)
+CWLAP:(4,"Brute",-59,"40:f2:01:c1:25:2b",11,10,0)
+CWLAP:(4,"WiFi-DOM.ru-8332",-79,"20:89:87:94:d6:ed",11,-12,0)
+CWLAP:(3,"MTSRouter-9B1812",-90,"1c:5f:2b:9b:18:12",13,6,0)
OK

AT+CWJAP_CUR — подключение к точке доступа, конфигурация НЕ сохраняется во флеш-памяти

Команды: Query Command:
AT+CWJAP_CUR?
Действие: печатает точку доступа к которой в данный момент подключён ESP8266.
Set Command:
AT+CWJAP_CUR=<ssid>,<pwd>,[<bssid>][,<pci_en>]
Действие: подключается к указанной точке доступа.
Отклик: +CWJAP_CUR:<ssid>,<bssid>,<channel>,<rssi>

OK

OK

или

+CWJAP_CUR:<error code>

FAIL

Параметры: <ssid>: строковый параметр показывающий SSID целевой точки доступа.
  • <ssid>: SSID целевой точки доступа.
  • <pwd>: пароль, максимум 64 символа ASCII.
  • [<bssid>]: опциональный параметр к качестве которого используется MAC-адрес целевой точки доступа. Используется когда несколько точек доступа имеют одинаковый SSID.
  • [<pci_en>]: опциональный параметр который отключает подключение по WEP и к открытым точкам доступа. Может использоваться для PCI аутентификация.
  • <error code>: (for reference only)
    ‣ 1: истечение таймаута.
    ‣ 2: неверный пароль.
    ‣ 3: не получается найти точку доступа.
    ‣ 4: ошибка соединения.

Эта команда требует чтобы ESP8266 находился в режиме клиента (Station). Эскейп-последовательности используются, когда SSID или пароль содержат в себе специальные символы, такие как: , или ” или \.
Замечания: Изменения конфигурации НЕ сохраняются во флеш-памяти.
Примеры: AT+CWJAP_CUR=»abc»,»0123456789″

К примеру, для подключения к точке доступа: «ab\,c» с паролем: «0123456789»\», следует выполнить следующую команду:

AT+CWJAP_CUR=»ab\\\,c»,»0123456789\»\\»

Если несколько точект доступа имеют одинаковый SSID: «abc», то подключиться можно через BSSID:

AT+CWJAP_CUR=»abc»,»0123456789″,»ca:d7:19:d8:a6:44″

«ESP8266 AT Instruction Set»

AT+CWJAP_DEF — подключение к точке доступа, конфигурация сохраняется во флеш-памяти

Команды: Query Command:
AT+CWJAP_DEF?
Действие: печатает точку доступа к которой в данный момент подключён ESP8266.
Set Command:
AT+CWJAP_DEF=<ssid>,<pwd>,[<bssid>][,<pci_en>]
Действие: подключается к указанной точке доступа.
Отклик: +CWJAP_DEF:<ssid>,<bssid>,<channel>,<rssi>

OK

OK

или

+CWJAP_DEF:<error code>

FAIL

Параметры: <ssid>: строковый параметр показывающий SSID целевой точки доступа.
  • <ssid>: SSID целевой точки доступа.
  • <pwd>: пароль, максимум 64 символа ASCII.
  • [<bssid>]: опциональный параметр к качестве которого используется MAC-адрес целевой точки доступа. Используется когда несколько точек доступа имеют одинаковый SSID.
  • [<pci_en>]: опциональный параметр который отключает подключение по WEP и к открытым точкам доступа. Может использоваться для PCI аутентификация.
  • <error code>: (for reference only)
    ‣ 1: истечение таймаута.
    ‣ 2: неверный пароль.
    ‣ 3: не получается найти точку доступа.
    ‣ 4: ошибка соединения.

Эта команда требует чтобы ESP8266 находился в режиме клиента (Station). Эскейп-последовательности используются, когда SSID или пароль содержат в себе специальные символы, такие как: , или ” или \.
Замечания: Изменения конфигурации сохранются во флеш-памяти.
Примеры: AT+CWJAP_DEF=»abc»,»0123456789″

К примеру, для подключения к точке доступа: «ab\,c» с паролем: «0123456789»\», следует выполнить следующую команду:

AT+CWJAP_DEF=»ab\\\,c»,»0123456789\»\\»

Если несколько точек доступа имеют одинаковый SSID: «abc», то подключиться можно через BSSID:

AT+CWJAP_DEF=»abc»,»0123456789″,»ca:d7:19:d8:a6:44″

«ESP8266 AT Instruction Set»

Подключаемся к точке доступа:

AT+CWJAP_CUR="Alien","password"
WIFI CONNECTED
WIFI GOT IP

OK

Далее смотрим IP адрес который получил ESP8266:

AT+CIFSR — показать локальный IP адрес

Execute Command: AT+CIFSR
Отклик: +CIFSR:APIP,<SoftAP IP address>
+CIFSR:APMAC,<SoftAP MAC address>
+CIFSR:STAIP,<Station IP address>
+CIFSR:STAMAC,<Station MAC address>
OK
Параметры: <IP address>:
IP адрес ESP8266 в режиме SoftAP;
IP адрес ESP8266 в режиме клиента (Station)
<MAC address>:
MAC адрес ESP8266 в режиме SoftAP;
MAC адрес ESP8266 в режиме клиента (Station).
Замечания: Station IP можно получить только когда ESP8266 находится в режиме клиента и при этом подключён к точке доступа
«ESP8266 AT Instruction Set»
AT+CIFSR 
+CIFSR:STAIP,"192.168.1.125"
+CIFSR:STAMAC,"60:01:94:41:28:0f"

OK

Пробуем достучаться до интернета :

AT+PING — посылка Ping пакета

Set Command: AT+PING=<IP>
Действие: посылка ping пакета.
Отклик: +<time>

OK

или

+timeout

ERROR

Параметры:
  • <IP>: IP хоста или имя домена
  • <time>: время отклика на ping
Примеры: AT+PING=»192.168.1.1″

AT+PING=»www.baidu.com»

«ESP8266 AT Instruction Set»
AT+PING="ya.ru" 
+32

OK

Обновление прошивки из «облака» осуществляется с помощью команды CIUPDATE:

AT+CIUPDATE — Обновление прошивки через Wi-Fi

Execute Command: AT+CIUPDATE

Действие: обновление ПО

Отклик: +CIPUPDATE:<n>

OK

Параметры отклика:
  • <n>: ‣ 1: поиск сервера. ‣ 2: подключение к серверу. ‣ 3: запрос версии ПО. ‣ 4: запуск обновления.
Замечания:
  • Скорость обновления зависит от скорости интернет-соединения.
  • ERROR будет возвращён, если обновление прервётся из-за неудовлетворительного интернет-соединения. Подождите некоторое время, прежде чем повторять попытку.
Замечания:
  • При использовании Espressif’s AT BIN (/ESP8266_NONOS_SDK/bin/at), команда AT+CIUPDATE загрузит новый AT BIN из облака Espressif.
  • Если используется скомпилированная самостоятельно прошивка AT BIN, то самостоятельно нужно скомпилировать и обновление для AT+CIUPDATE. Espressif предоставляет в SDK пример локального обновления в (/ESP8266_NONOS_SDK/example/at).
  • После обновления рекомендуется выполнить AT+RESTORE для восстановления установок по умолчанию.
«ESP8266 AT Instruction Set»

Обновляем:

AT+CIUPDATE 
+CIPUPDATE:1
+CIPUPDATE:2
+CIPUPDATE:3
+CIPUPDATE:4
OK

Обновление занимает где-то одну минуту. После обновления выполняем сброс настроек:

AT+RESTORE — Сброс к заводским настройкам

Execute Command: AT+RESTORE
Отклик: OK
Параметры: Выполнение этой команды сбросит все настройки сохранённые на флешке, что вернёт прошивку к заводским настройкам. После выполнения команды чип будет перезагружен.
«ESP8266 AT Instruction Set»

В случае, если использовались команды с суффиксом CUR, то для сброса будет достаточно обычного Reset:

AT+RST — Перезагрузка модуля

Execute Command: AT+RST
Отклик: OK
Параметры: отсутствуют
«ESP8266 AT Instruction Set»

Выполняем сброс:

Обратите внимание, что вектор старта программы изменился с 0х01000 на 0х81000. Если теперь перешить загрузчик который вернёт вектор старта на 0х01000, то будет запускаться старая прошивка. Т.е. она никуда не делась.

Проверяем версии ПО:

AT+GMR
AT version:1.2.0.0(Jul  1 2016 20:04:45)
SDK version:1.5.4.1(39cb9a32)
Ai-Thinker Technology Co. Ltd.
v1.5.4.1-a Nov 30 2017 15:54:51
OK

Обновился AT-интерпретатор с версии «AT version:1.1.0.0(May 11 2016 18:09:56)» до «AT version:1.2.0.0(Jul 1 2016 20:04:45)». Негусто.

6) Второй способ прошивки

На самом деле ESP8266 почти никогда не прошивается одним файлом. Во-первых это долго, во-вторых неудобно. ESP8266 прошивается по регионам. Загрузчик в один регион, SDK в другой, AT-bin в третий. Это быстрее и удобнее, хотя поначалу может сбить с толку. Исключением является создание и восстановление backup прошивки.

Скачаем теперь с сайта «ESP8266 AT-Command firmware — ElectroDragon» прошивку обведённую синим (альтернативная ссылка):

После распаковки архива у нас будет следующая структура файлов и каталогов:

$ tree . 
.
└── AT_bin
    ├── 1024+1024
    │   ├── user1.2048.new.5.bin
    │   └── user2.2048.new.5.bin
    ├── 512+512
    │   ├── user1.1024.new.2.bin
    │   └── user2.1024.new.2.bin
    ├── README.md
    ├── blank.bin
    ├── boot_v1.5.bin
    ├── esp_init_data_default.bin
    └── noboot
        ├── eagle.flash.bin
        └── eagle.irom0text.bin
4 directories, 11 files

Подозреваю, что предполётный инструктаж будет находится в файле README.md:

# BOOT MODE ## download ### Flash size 8Mbit: 512KB+512KB boot_v1.2+.bin 0x00000 user1.1024.new.2.bin 0x01000 esp_init_data_default.bin 0xfc000 (optional) blank.bin 0x7e000 & 0xfe000 ### Flash size 16Mbit: 512KB+512KB boot_v1.2+.bin 0x00000 user1.1024.new.2.bin 0x01000 esp_init_data_default.bin 0x1fc000 (optional) blank.bin 0x7e000 & 0x1fe000 ### Flash size 16Mbit-C1: 1024KB+1024KB boot_v1.2+.bin 0x00000 user1. 2048.new.5.bin 0x01000 esp_init_data_default.bin 0x1fc000 (optional) blank.bin 0xfe000 & 0x1fe000 ### Flash size 32Mbit: 512KB+512KB boot_v1.2+.bin 0x00000 user1.1024.new.2.bin 0x01000 esp_init_data_default.bin 0x3fc000 (optional) blank.bin 0x7e000 & 0x3fe000 ### Flash size 32Mbit-C1: 1024KB+1024KB boot_v1.2+.bin 0x00000 user1.2048.new.5.bin 0x01000 esp_init_data_default.bin 0x3fc000 (optional) blank.bin 0xfe000 & 0x3fe000 # NON-BOOT MODE ## download eagle.flash.bin 0x00000 eagle.irom0text.bin 0x10000 blank.bin Flash size 8Mbit: 0x7e000 & 0xfe000 Flash size 16Mbit: 0x7e000 & 0x1fe000 Flash size 16Mbit-C1: 0xfe000 & 0x1fe000 Flash size 32Mbit: 0x7e000 & 0x3fe000 Flash size 32Mbit-C1: 0xfe000 & 0x3fe000 esp_init_data_default. bin (optional) Flash size 8Mbit: 0xfc000 Flash size 16Mbit: 0x1fc000 Flash size 16Mbit-C1: 0x1fc000 Flash size 32Mbit: 0x3fc000 Flash size 32Mbit-C1: 0x3fc000 ## compile modify eagle.app.v6.ld, as irom0_0_seg : org = 0x40210000, len = 0x6C000 > NOTICE: UPDATE is not supported in non-boot mode; 4Mbit Flash is not supported in non-boot mode; # Update steps 1.Make sure TE(terminal equipment) is in sta or sta+ap mode AT+CWMODE=3 OK 2.Make sure TE got ip address AT+CWJAP=»ssid»,»12345678″ OK AT+CIFSR 192.168.1.134 3.Let’s update AT+CIUPDATE +CIPUPDATE:1 found server +CIPUPDATE:2 connect server +CIPUPDATE:3 got edition +CIPUPDATE:4 start start OK > NOTICE: If there are mistakes in the updating, then break update and print ERROR.

Т.к. у нас флешка на 32Mbit, нас будет интересовать фрагмент выделенный красным.

Очищаем флешку:

$ esptool. py -p /dev/ttyUSB0 erase_flash
esptool.py v1.2
Connecting...
Running Cesanta flasher stub...
Erasing flash (this may take a while)...
Erase took 6.8 seconds

После чего, руководствуясь адресами в выделенном красным фрагменте, составляем следующую команду:

$ esptool.py -p /dev/ttyUSB0 write_flash -fm dio -ff 40m -fs 32m 0x00000 ./AT_bin/boot_v1.5.bin 0x01000 ./AT_bin/512+512/user1.1024.new.2.bin  0x3fc000 ./AT_bin/esp_init_data_default.bin 0x7e000 ./AT_bin/blank.bin 0x3fe000 ./AT_bin/blank.bin

Прошиваем:

$ esptool.py -p /dev/ttyUSB0 write_flash -fm dio -ff 40m -fs 32m 0x00000 ./AT_bin/boot_v1.5.bin 0x01000 ./AT_bin/512+512/user1.1024.new.2.bin  0x3fc000 ./AT_bin/esp_init_data_default.bin 0x7e000 ./AT_bin/blank.bin 0x3fe000 ./AT_bin/blank.bin 
esptool.py v1.2
Connecting...
Running Cesanta flasher stub...
Flash params set to 0x0240
Writing 4096 @ 0x0... 4096 (100 %)
Wrote 4096 bytes at 0x0 in 0.4 seconds (90.5 kbit/s)...
Writing 401408 @ 0x1000... 401408 (100 %)
Wrote 401408 bytes at 0x1000 in 34. 7 seconds (92.6 kbit/s)...
Writing 4096 @ 0x3fc000... 4096 (100 %)
Wrote 4096 bytes at 0x3fc000 in 0.4 seconds (90.4 kbit/s)...
Writing 4096 @ 0x7e000... 4096 (100 %)
Wrote 4096 bytes at 0x7e000 in 0.4 seconds (90.3 kbit/s)...
Writing 4096 @ 0x3fe000... 4096 (100 %)
Wrote 4096 bytes at 0x3fe000 in 0.4 seconds (90.5 kbit/s)...
Leaving...

Проверяем:

AT
OK
AT+GMR
AT version:1.1.0.0(May 11 2016 18:09:56)
SDK version:1.5.4(baaeaebb)
compile time:May 20 2016 15:06:44
OK

Далее, так же как предыдущем случае обновляем прошивку:

AT+CWMODE_CUR=1
OK
AT+CWLAP
+CWLAP:(4,"WiFi-DOM.ru-5723",-90,"cc:7b:36:b3:1f:79",1,-9,0)
+CWLAP:(3,"DIR-48",-91,"28:10:7b:f2:65:ea",1,13,0)
+CWLAP:(4,"WiFi-DOM.ru-1784",-87,"ac:64:62:83:19:08",2,21,0)
+CWLAP:(3,"Keenetic-4263",-91,"10:7b:ef:5d:17:64",3,3,0)
+CWLAP:(3,"Keenetic-7788",-90,"04:bf:6d:97:08:e4",4,20,0)
+CWLAP:(3,"servant",-79,"14:cc:20:33:44:4e",6,11,0)
+CWLAP:(4,"Super S",-83,"f8:1a:67:50:32:ee",6,10,0)
+CWLAP:(4,"WiFi-DOM. ru-5838",-92,"d4:76:ea:20:02:38",6,-17,0)
+CWLAP:(4,"WiFi-DOM.ru-8332",-81,"20:89:87:94:d6:ed",11,-12,0)
+CWLAP:(4,"Brute",-67,"40:f2:01:c1:25:2b",11,10,0)
+CWLAP:(4,"ROSTELECOM_F0DB",-87,"2c:e4:12:3d:f0:dc",11,-24,0)
+CWLAP:(3,"Alien",-33,"00:90:4c:c1:00:00",11,10,0)
+CWLAP:(3,"Дмитрий",-87,"d4:6e:0e:64:e5:86",12,3,0)
OK
AT+CWJAP_CUR="Alien","password"
WIFI CONNECTED
WIFI GOT IP
OK
AT+CIFSR
+CIFSR:STAIP,"192.168.1.125"
+CIFSR:STAMAC,"60:01:94:41:28:0f"
OK
AT+PING="ya.ru"
+34
OK
AT+CIUPDATE
+CIPUPDATE:1
+CIPUPDATE:2
+CIPUPDATE:3
+CIPUPDATE:4
ERROR
AT+PING="ya.ru"
+33
OK
AT+CIUPDATE
+CIPUPDATE:1
+CIPUPDATE:2
+CIPUPDATE:3
+CIPUPDATE:3
+CIPUPDATE:4
OK

По логу видно что в даннном случае не обошлось без ошибки при обновлении. Процедуру пришлось повторять. И несмотря на то, что я использовал команды с суффиксом CUR, после перезагрузки ESP8266 вновь подключается в точке доступа.

Делаем RESTORE, затем смотрим на версии того что прилетело по воздуху:

AT+GMR
AT version:1. 6.2.0(Apr 13 2018 11:10:59)
SDK version:2.2.1(6ab97e9)
compile time:Jun  7 2018 19:34:27
Bin version(Wroom 02):1.6.2
OK

Вот это уже лучше, прошивка этого года. Пробуем дать команду из свежего SDK:

AT+SYSRAM — Проверка оставшейся свободной памяти в ОЗУ

Query Command: AT+SYSRAM?
Отклик: +SYSRAM:<remaining RAM size>

OK

Параметры отклика: <remaining RAM size>: оставшаяся свободная память в байтах.
«ESP8266 AT Instruction Set»

Выполняем:

AT+SYSRAM? 
+SYSRAM:33432

OK

Имеем свободные 32 кбайта ОЗУ. Это уже что-то.

7) Третий способ прошивки

На самом деле, совсем не обязательно так все усложнять, мне просто хотелось показать процесс обновления прошивки «по воздуху». Прошивки с такой возможностью таки и называются: «over the air» или «OTA».

Для загрузки нужной прошивки мы можем зайти на сайт ESP8266EX Resources | Espressif Systems и скачать прошивку нужной версии. В этом случае ничего обновлять уже не придётся.

Как я уже говорил, с прошивкой AT-интерпретатора последней версии 1.7 имеются проблемы, она не поддерживает флешки 32Mbit, но мы можем загрузить прошивку версии 1.6. Это та же версия, что мы получили через обновление, но стартовать она будет с адреса 0x01000, а не 0х81000.

Скачиваем прошивку версии 1.6.2:

$ esptool.py -p /dev/ttyUSB0 write_flash -fm dio -ff 40m -fs 32m 0x00000 ./boot_v1.7.bin  0x01000 ./at/512+512/user1.1024.new.2.bin   0x3fc000 ./esp_init_data_default_v05.bin 0x7e000 ./blank.bin 0x3fe000 ./blank.bin

После распаковки архива видим следующую структуру файлов и каталогов:

$ tree .
.
├── at
│   ├── 1024+1024
│   │   ├── user1.2048.new.5.bin
│   │   └── user2.2048.new.5.bin
│   ├── 512+512
│   │   ├── user1.1024.new.2.bin
│   │   └── user2. 1024.new.2.bin
│   └── README.md
├── at_sdio
│   ├── 1024+1024
│   │   ├── user1.2048.new.5.bin
│   │   └── user2.2048.new.5.bin
│   ├── 512+512
│   │   ├── user1.1024.new.2.bin
│   │   └── user2.1024.new.2.bin
│   └── README.md
├── blank.bin
├── boot_v1.2.bin
├── boot_v1.6.bin
├── boot_v1.7.bin
├── esp_init_data_default_v05.bin
└── esp_init_data_default_v08.bin
6 directories, 16 files

В README.md имеются следующие указания для нашей флешки:

### Flash size 32Mbit: 512KB+512KB boot_v1.2+.bin 0x00000 user1.1024.new.2.bin 0x01000 esp_init_data_default.bin 0x3fc000 (optional) blank.bin 0x7e000 & 0x3fe000

В соответствии с этими указаниями, составляем команду для прошивки ESP8266:

$ esptool.py -p /dev/ttyUSB0 write_flash -fm dio -ff 40m -fs 32m 0x00000 ./boot_v1.7.bin  0x01000 ./at/512+512/user1.1024.new.2.bin   0x3fc000 ./esp_init_data_default_v05.bin 0x7e000 ./blank.bin 0x3fe000 . /blank.bin

Прошивка занимает примерно секунд сорок. После перезагрузки сразу будет доступен AT-интерпретатор версии 1.6.2.

8) Прошивка модуля ESP12E AT-интерпретатором версии 1.7.0

Если верить примечанию к выпуску, АT-интерпретатор на SDK версии 3.0.0 примечателен оптимизацией работы с ОЗУ в результате чего экономится около 17 кБайт(!) ОЗУ. Кроме того, имеются какие-то сложности с форматом прошивки из-за чего рекомендуется использовать формат 16Mbit или 32Mbit-C1.

К сожалению, формат 32MBit-C1 использовать не получилось. Здесь: Flashing AT 1.7.0 binary firmware in 32m-c1 mode not working было подсказано временное решение — использовать формат 16Mbit-C1.

После распаковки архива с прошивкой получаем следующую структуру каталогов:

$ tree .
.
├── at
│   ├── 1024+1024
│   │   ├── user1.2048.new.5.bin
│   │   └── user2.2048.new.5.bin
│   └── README.md
├── at_sdio
│   ├── 1024+1024
│   │   ├── user1.2048.new.5.bin
│   │   └── user2. 2048.new.5.bin
│   └── README.md
├── blank.bin
├── boot_v1.2.bin
├── boot_v1.6.bin
├── boot_v1.7.bin
├── esp_init_data_default_v05.bin
└── esp_init_data_default_v08.bin
4 directories, 12 files

В README.md для формата 16Mbit-C1 указаны следующие границы регионов:

### Flash size 16Mbit-C1: 1024KB+1024KB boot_v1.2+.bin 0x00000 user1.2048.new.5.bin 0x01000 esp_init_data_default.bin 0x1fc000 blank.bin 0xfe000 & 0x1fe000

Прошиваем ESP8266 следующей командой:

$ esptool.py -p /dev/ttyUSB0 write_flash -fm qio -ff 40m -fs 16m-c1  0x00000 ./boot_v1.7.bin  0x01000 ./at/1024+1024/user1.2048.new.5.bin  0x1fc000 ./esp_init_data_default_v05.bin 0xfe000 ./blank.bin 0x1fe000 ./blank.bin

После прошивки получаем следующий лог загрузки:

Проверяем версии SDK и AT-интерпретатора:

AT+GMR
AT version:1.7.0.0(Aug 16 2018 00:57:04)
SDK version:3.0.0(d49923c)
compile time:Aug 23 2018 16:58:12
Bin version(Wroom 02):v1. 7.0
OK

Смотрим на размер свободной ОЗУ:

AT+SYSRAM?
+SYSRAM:68304
OK

Как видно, «лёгким движением руки», свободная память увеличилась до 65 кБайт.

Настройка OpenWRT

# ifconfig
br-lan    Link encap:Ethernet  HWaddr 00:90:4C:C0:00:00  
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:586247 errors:0 dropped:172 overruns:0 frame:0
          TX packets:765349 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:80654767 (76.9 MiB)  TX bytes:927523774 (884.5 MiB)
eth0      Link encap:Ethernet  HWaddr 00:90:4C:C0:00:00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1211990 errors:0 dropped:5813 overruns:0 frame:0
          TX packets:989428 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1049054139 (1000. 4 MiB)  TX bytes:570831642 (544.3 MiB)
          Interrupt:4 
eth0.1    Link encap:Ethernet  HWaddr 00:90:4C:C0:00:00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:336656 errors:0 dropped:0 overruns:0 frame:0
          TX packets:409897 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:64973771 (61.9 MiB)  TX bytes:475515814 (453.4 MiB)
eth0.2    Link encap:Ethernet  HWaddr 00:90:4C:C0:00:00  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:870395 errors:0 dropped:414 overruns:0 frame:0
          TX packets:580252 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:953212514 (909.0 MiB)  TX bytes:87848472 (83.7 MiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1478 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1478 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:138346 (135. 1 KiB)  TX bytes:138346 (135.1 KiB)
wlan0     Link encap:Ethernet  HWaddr 00:90:4C:C1:00:00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:262475 errors:0 dropped:0 overruns:0 frame:0
          TX packets:371714 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32 
          RX bytes:29702085 (28.3 MiB)  TX bytes:467137364 (445.4 MiB)
# df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                    2.0G     80.4M      1.8G   4% /
/dev/root                 2.0M      2.0M         0 100% /rom
tmpfs                    14.3M    592.0K     13.7M   4% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/sda2                 2.0G     80.4M      1.8G   4% /
/dev/sda3                 1.6G     37.2M      1.5G   2% /home
# cat /etc/config/network 
config switch 'eth0'
        option name 'eth0'
        option reset '1'
        option enable_vlan '1'
config switch_vlan
        option device 'eth0'
        option vlan '1'
        option ports '1 2 3 4 5t'
config switch_vlan
        option device 'eth0'
        option vlan '2'
        option ports '0 5t'
config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127. 0.0.1'
        option netmask '255.0.0.0'
config globals 'globals'
        option ula_prefix 'fdf3:a699:4f2f::/48'
config interface 'lan'
        option ifname 'eth0.1'
        option force_link '1'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.1.10'
        option netmask '255.255.255.0'
        option dns '78.85.0.1'
        option ip6assign '60'
config interface 'wan'
        option ifname 'eth0.2'
        option proto 'dhcp'
# cat /etc/config/fstab 
global automount
        option from_fstab 1
        option anon_mount 0
        
config global autoswap
        option from_fstab 1
        option anon_swap 0
                
config mount
        option target   /
        option device   /dev/sda2
        option fstype   ext3
        option options  rw,sync
        option enabled  1
        option enabled_fsck 0
                                                
config mount
        option target   /home
        option device   /dev/sda3
        option fstype   ext3
        option options  rw,sync
        option enabled  1
        option enabled_fsck 0
                                        
config swap
        option device   /dev/sda1
        option enabled  1
# free
             total         used         free       shared      buffers
Mem:         29268        23160         6108            0         3572
-/+ buffers:              19588         9680
Swap:       102396            0       102396
# netstat -l 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0. 0.0.0:www             0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:domain          0.0.0.0:*               LISTEN      
tcp        0      0 OpenWrt.lan:ssh         0.0.0.0:*               LISTEN      
netstat: /proc/net/tcp6: No such file or directory
udp        0      0 0.0.0.0:domain          0.0.0.0:*                           
udp        0      0 0.0.0.0:bootps          0.0.0.0:*                           
udp        0      0 0.0.0.0:ntp             0.0.0.0:*                           
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING        652 /var/run/ubus.sock
# cat /etc/config/wireless 
config wifi-device 'radio0'
        option type 'mac80211'
        option macaddr '00:90:4c:c1:00:00'
        option channel '11'
config wifi-iface
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'Alien'
        option encryption 'psk2'
        option key 'password'
config system
        option hostname 'OpenWrt'
        option zonename 'Europe/Samara'
        option timezone 'SAMT-4'
        option conloglevel '8'
        option cronloglevel '8'
config timeserver 'ntp'
        list server '0. openwrt.pool.ntp.org'
        list server '1.openwrt.pool.ntp.org'
        list server '2.openwrt.pool.ntp.org'
        list server '3.openwrt.pool.ntp.org'
        option enabled '1'
        option enable_server '1'
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 
ACCEPT     all  --  anywhere             anywhere            
syn_flood  tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN 
input_rule  all  --  anywhere             anywhere            
input      all  --  anywhere             anywhere            
Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 
forwarding_rule  all  --  anywhere             anywhere            
forward    all  --  anywhere             anywhere            
reject     all  --  anywhere             anywhere            
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 
ACCEPT     all  --  anywhere             anywhere            
output_rule  all  --  anywhere             anywhere            
output     all  --  anywhere             anywhere            
Chain forward (1 references)
target     prot opt source               destination         
zone_lan_forward  all  --  anywhere             anywhere            
zone_wan_forward  all  --  anywhere             anywhere            
Chain forwarding_lan (1 references)
target     prot opt source               destination         
Chain forwarding_rule (1 references)
target     prot opt source               destination         
Chain forwarding_wan (1 references)
target     prot opt source               destination         
Chain input (1 references)
target     prot opt source               destination         
zone_lan   all  --  anywhere             anywhere            
zone_wan   all  --  anywhere             anywhere            
Chain input_lan (1 references)
target     prot opt source               destination         
Chain input_rule (1 references)
target     prot opt source               destination         
Chain input_wan (1 references)
target     prot opt source               destination         
Chain output (1 references)
target     prot opt source               destination         
zone_lan_ACCEPT  all  --  anywhere             anywhere            
zone_wan_ACCEPT  all  --  anywhere             anywhere            
Chain output_rule (1 references)
target     prot opt source               destination         
Chain reject (5 references)
target     prot opt source               destination         
REJECT     tcp  --  anywhere             anywhere            reject-with tcp-reset 
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 
Chain syn_flood (1 references)
target     prot opt source               destination         
RETURN     tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 25/sec burst 50 
DROP       all  --  anywhere             anywhere            
Chain zone_lan (1 references)
target     prot opt source               destination         
input_lan  all  --  anywhere             anywhere            
zone_lan_ACCEPT  all  --  anywhere             anywhere            
Chain zone_lan_ACCEPT (5 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
Chain zone_lan_DROP (0 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
DROP       all  --  anywhere             anywhere            
Chain zone_lan_REJECT (0 references)
target     prot opt source               destination         
reject     all  --  anywhere             anywhere            
reject     all  --  anywhere             anywhere            
Chain zone_lan_forward (1 references)
target     prot opt source               destination         
zone_wan_ACCEPT  all  --  anywhere             anywhere            
forwarding_lan  all  --  anywhere             anywhere            
zone_lan_ACCEPT  all  --  anywhere             anywhere            
Chain zone_wan (1 references)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere            udp dpt:bootpc 
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request 
ACCEPT     igmp --  anywhere             anywhere            
input_wan  all  --  anywhere             anywhere            
zone_wan_REJECT  all  --  anywhere             anywhere            
Chain zone_wan_ACCEPT (2 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
Chain zone_wan_DROP (0 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
DROP       all  --  anywhere             anywhere            
Chain zone_wan_REJECT (2 references)
target     prot opt source               destination         
reject     all  --  anywhere             anywhere            
reject     all  --  anywhere             anywhere            
Chain zone_wan_forward (1 references)
target     prot opt source               destination         
zone_lan_ACCEPT  esp  --  anywhere             anywhere            
zone_lan_ACCEPT  udp  --  anywhere             anywhere            udp dpt:isakmp 
forwarding_wan  all  --  anywhere             anywhere            
zone_wan_REJECT  all  --  anywhere             anywhere 
# cat  /etc/config/firewall 
config defaults
        option syn_flood        1
        option input            ACCEPT
        option output           ACCEPT
        option forward          REJECT
# Uncomment this line to disable ipv6 rules
#       option disable_ipv6     1
config zone
        option name             lan
        list   network          'lan'
        option input            ACCEPT
        option output           ACCEPT
        option forward          ACCEPT
config zone
        option name             wan
        list   network          'wan'
        list   network          'wan6'
        option input            REJECT
        option output           ACCEPT
        option forward          REJECT
        option masq             1
        option mtu_fix          1
config forwarding
        option src              lan
        option dest             wan
# We need to accept udp packets on port 68,
# see https://dev. openwrt.org/ticket/4108
config rule
        option name             Allow-DHCP-Renew
        option src              wan
        option proto            udp
        option dest_port        68
        option target           ACCEPT
        option family           ipv4
# Allow IPv4 ping
config rule
        option name             Allow-Ping
        option src              wan
        option proto            icmp
        option icmp_type        echo-request
        option family           ipv4
        option target           ACCEPT
config rule
        option name             Allow-IGMP
        option src              wan
        option proto            igmp
        option family           ipv4
        option target           ACCEPT
# Allow DHCPv6 replies
# see https://dev.openwrt.org/ticket/10381
config rule
        option name             Allow-DHCPv6
        option src              wan
        option proto            udp
        option src_ip           fe80::/10
        option src_port         547
        option dest_ip          fe80::/10
        option dest_port        546
        option family           ipv6
        option target           ACCEPT
config rule
        option name             Allow-MLD
        option src              wan
        option proto            icmp
        option src_ip           fe80::/10
        list icmp_type          '130/0'
        list icmp_type          '131/0'
        list icmp_type          '132/0'
        list icmp_type          '143/0'
        option family           ipv6
        option target           ACCEPT
# Allow essential incoming IPv6 ICMP traffic
config rule
        option name             Allow-ICMPv6-Input
        option src              wan
        option proto    icmp
        list icmp_type          echo-request
        list icmp_type          echo-reply
        list icmp_type          destination-unreachable
        list icmp_type          packet-too-big
        list icmp_type          time-exceeded
        list icmp_type          bad-header
        list icmp_type          unknown-header-type
        list icmp_type          router-solicitation
        list icmp_type          neighbour-solicitation
        list icmp_type          router-advertisement
        list icmp_type          neighbour-advertisement
        option limit            1000/sec
        option family           ipv6
        option target           ACCEPT
# Allow essential forwarded IPv6 ICMP traffic
config rule
        option name             Allow-ICMPv6-Forward
        option src              wan
        option dest             *
        option proto            icmp
        list icmp_type          echo-request
        list icmp_type          echo-reply
        list icmp_type          destination-unreachable
        list icmp_type          packet-too-big
        list icmp_type          time-exceeded
        list icmp_type          bad-header
        list icmp_type          unknown-header-type
        option limit            1000/sec
        option family           ipv6
        option target           ACCEPT
# include a file with users custom iptables rules
config include
        option path /etc/firewall. user
### EXAMPLE CONFIG SECTIONS
# do not allow a specific ip to access wan
#config rule
#       option src              lan
#       option src_ip   192.168.45.2
#       option dest             wan
#       option proto    tcp
#       option target   REJECT
# block a specific mac on wan
#config rule
#       option dest             wan
#       option src_mac  00:11:22:33:44:66
#       option target   REJECT
# block incoming ICMP traffic on a zone
#config rule
#       option src              lan
#       option proto    ICMP
#       option target   DROP
# port redirect port coming in on wan to lan
#config redirect
#       option src                      wan
#       option src_dport        80
#       option dest                     lan
#       option dest_ip          192.168.16.235
#       option dest_port        80
#       option proto            tcp
# port redirect of remapped ssh port (22001) on wan
#config redirect
#       option src              wan
#       option src_dport        22001
#       option dest             lan
#       option dest_port        22
#       option proto            tcp
# allow IPsec/ESP and ISAKMP passthrough
config rule
        option src              wan
        option dest             lan
        option proto            esp
        option target           ACCEPT
config rule
        option src              wan
        option dest             lan
        option dest_port        500
        option proto            udp
        option target           ACCEPT
### FULL CONFIG SECTIONS
#config rule
#       option src              lan
#       option src_ip   192. 168.45.2
#       option src_mac  00:11:22:33:44:55
#       option src_port 80
#       option dest             wan
#       option dest_ip  194.25.2.129
#       option dest_port        120
#       option proto    tcp
#       option target   REJECT
#config redirect
#       option src              lan
#       option src_ip   192.168.45.2
#       option src_mac  00:11:22:33:44:55
#       option src_port         1024
#       option src_dport        80
#       option dest_ip  194.25.2.129
#       option dest_port        120
#       option proto    tcp

9) Связка OpenWRT + ESP8266, использование сниффера tcpdump и анализатора Wireshark для исследования трафика ESP8266

У меня имеется точка доступа с установленной OpenWRT. Это позволяет мне полностью контролировать трафик идущий с ESP8266. OpenWRT, кстати, в наши времена можно установить почти на любую «кофеварку». Народ изгаляется и ставит OpenWRT на всякое барахло: Руководство по доведению «до кондиции» клона популярного китайского мини-роутера Hame A15, он же «unbranded A5-V11», я же пользуюсь классикой — DIR-320 rev. A2. DIR-320 имеет репутацию «неубиваемого роутера». Даже после прошивки его в OpenWRT, все-равно можно вызвать родной загрузчик для восстановления прошивки. Это часто выручало меня на первых порах, когда в результате неудачной настройки, до OpenWRT становилось невозможно достучаться из сети.

Установка OpenWRT на роутер позволяет, по сути, превратить его в одноплатный компьютер. У меня установлена версия «Attitude Adjustment 12.09», в качестве корневого раздела используется флешка на 4 GB. Это позволяет устанавливать приложения без оглядки на занимаемое ими пространство, кроме того, на роутере можно размещать простенькие сайты, для которых не планируется высокая загруженность. OpenWRT может работать в паре с ESP8266, беря на работу по парсингу страниц, работу с защищенными соединениями и разграничении подсетей.

Итак, сбрасываем ESP8266 командой: «AT+RESTORE», на OpenWRT запускаем tcpdump командой: «tcpdump -i wlan0 -n», после чего ESP8266 подключаем точке доступа с OpenWRT:

AT+CWMODE_CUR=1
OK
AT+CWJAP="Alien","password"
WIFI CONNECTED
WIFI GOT IP
OK

Syslog в OpenWRT выводится по команде: «logread», и в данном случае, при подключении ESP8266 можно будет увидеть следующую картинку:

Nov 10 08:30:20 OpenWrt daemon. info hostapd: wlan0: STA 60:01:94:41:28:0f IEEE 802.11: authenticated
Nov 10 08:30:20 OpenWrt daemon.info hostapd: wlan0: STA 60:01:94:41:28:0f IEEE 802.11: associated (aid 1)
Nov 10 08:30:20 OpenWrt daemon.info hostapd: wlan0: STA 60:01:94:41:28:0f WPA: pairwise key handshake completed (RSN)
Nov 10 08:30:20 OpenWrt daemon.info dnsmasq-dhcp[2108]: DHCPDISCOVER(br-lan) 60:01:94:41:28:0f 
Nov 10 08:30:20 OpenWrt daemon.info dnsmasq-dhcp[2108]: DHCPOFFER(br-lan) 192.168.1.11 60:01:94:41:28:0f 
Nov 10 08:30:20 OpenWrt daemon.info dnsmasq-dhcp[2108]: DHCPREQUEST(br-lan) 192.168.1.11 60:01:94:41:28:0f 
Nov 10 08:30:20 OpenWrt daemon.info dnsmasq-dhcp[2108]: DHCPACK(br-lan) 192.168.1.11 60:01:94:41:28:0f ESP12_A

Здесь, сначала через демон hostapd устанавливается беспроводное соединение. MAC адрес «60:01:94:41:28:0f» в данном случае — это мой ESP8266. После чего, DHCP в соответствии с моей настройкой, выдает клиенту с данным MAC адресом локальный IP «192.168.1.11» и обозначает его хост как «ESP12_A». За этот процесс отвечает следующее правило в /etc/config/dhcp:

config host
        option name 'ESP12_A'
        option mac '60:01:94:41:28:0f'
        option ip '192.168.1.11'

Замечу, что для поддержки WiFi у меня в OpenWRT установлен пакет wpad-mini, который обеспечивает минимальный функционал и не занимает много места.

tcpdump при этом выдаёт нам следующий лог:

08:30:20.171350 60:01:94:41:28:0f > ff:ff:ff:ff:ff:ff Null Unnumbered, xid, Flags [Response], length 6: 01 00
08:30:20.183276 EAPOL key (3) v2, len 95
08:30:20.188693 EAPOL key (3) v1, len 117
08:30:20.194392 EAPOL key (3) v2, len 151
08:30:20.200214 EAPOL key (3) v1, len 95
08:30:20.257746 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 60:01:94:41:28:0f, length 308
08:30:20.258239 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 60:01:94:41:28:0f, length 308
08:30:20.261535 IP 192.168.1.10.67 > 192.168.1.11.68: BOOTP/DHCP, Reply, length 300
08:30:20.273383 IP 0. 0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 60:01:94:41:28:0f, length 308
08:30:20.273797 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 60:01:94:41:28:0f, length 308
08:30:20.280894 IP 192.168.1.10.67 > 192.168.1.11.68: BOOTP/DHCP, Reply, length 300
08:30:20.286433 ARP, Request who-has 192.168.1.11 tell 0.0.0.0, length 28
08:30:20.286763 ARP, Request who-has 192.168.1.11 tell 0.0.0.0, length 28
08:30:20.473236 ARP, Request who-has 192.168.1.11 tell 0.0.0.0, length 28
08:30:20.473464 ARP, Request who-has 192.168.1.11 tell 0.0.0.0, length 28
08:30:20.973475 ARP, Request who-has 192.168.1.11 tell 192.168.1.11, length 28
08:30:20.973769 ARP, Request who-has 192.168.1.11 tell 192.168.1.11, length 28

Пока клиент не авторизируется, то он может общатся только на протоколе EAPOL, через который в данном случае происходит авторизация. После авторизации идет получение параметров сети через BOOTP-протокол.

С помощью tcpdump можно записать сессию в отдельный файл, что бы потом его можно было внимательно исследовать в программе-анализаторе трафика Wireshark. Выполняем в OpenWRT команду:

# tcpdump -i wlan0 -n -w alien.cap

После завершения сессии, копируем файл alien.cap на локальную машину:

$ scp root@alien:/root/alien.cap ./

Затем открываем файл alien.cap в Wireshark.

Wireshark это ещё один «швейцарский нож» который умеет декодировать множество сетевых протоколов. Для примера, посмотрим на запрос к DHCP и увидим в теле сообщения запрашиваемые параметры:

В ответе DHCP сервера видим какие параметры ему предложили для работы в сети:

Ок, идём дальше. Посмотрим какие DNS использует ESP8266:

AT+CIPDNS_CUR — Задание пользовательских DNS серверов, настройки НЕ сохраняются во флеш-памяти

Команды: Query Command:
AT+CIPDNS_CUR?
Действие: показать текущие DNS сервера
Set Command:
AT+CIPDNS_CUR=<enable>[,<DNS server0>,<DNS server1>]
Действие: задать пользовательские DNS сервера
Отклик: [+CIPDNS_CUR:<DNS server0>]

[+CIPDNS_CUR:<DNS server1>]

OK

OK
Параметры:
  • <enable>: ‣ 0: отключает заданные пользователем DNS сервера; ‣ 1: включает заданные пользователем DNS сервера.
  • <DNS server0>: необязательный параметр, задание первого DNS сервера;
  • <DNS server1>: необязательный параметр, задание второго DNS сервера.
Примеры AT+CIPDNS_CUR=1,»208.67.220.220″
Замечания:
  • При команде: AT+CIPDNS_CUR=0 (отключает заданные пользователем DNS сервера), будет использован DNS сервер по умолчанию: «208.67.222.222». Так же DNS сервер может быть задан роутером при конфигурации через DHCP.
  • При команде: AT+CIPDNS_CUR=1 (включает заданные пользователем DNS сервера, но параметр <DNS server> не задан), будет использоваться сервер: «208.67.222.222» как DNS сервер по умолчанию.
«ESP8266 AT Instruction Set»

AT+CIPDNS_DEF — Задание пользовательских DNS серверов, настройки сохраняются во флеш-памяти

Команды: Query Command:
AT+CIPDNS_DEF?
Действие: показать текущие DNS сервера
Set Command:
AT+CIPDNS_DEF=<enable>[,<DNS server0>,<DNS server1>]
Действие: задать пользовательские DNS сервера
Отклик: [+CIPDNS_DEF:]

[+CIPDNS_DEF:<DNS server1>]

OK

OK
Параметры:
  • <enable>: ‣ 0: отключает заданные пользователем DNS сервера; ‣ 1: включает заданные пользователем DNS сервера.
  • <DNS server0>: необязательный параметр, задание первого DNS сервера;
  • <DNS server1>: необязательный параметр, задание второго DNS сервера.
Примеры AT+CIPDNS_DEF=1,»208.67.220.220″
Замечания:
  • Конфигурация будет сохранена во флеш-памяти.
  • При команде: AT+CIPDNS_CUR=0 (отключает заданные пользователем DNS сервера), будет использован DNS сервер по умолчанию: «208.67.222.222». Так же DNS сервер может быть задан роутером при конфигурации через DHCP.
  • При команде: AT+CIPDNS_CUR=1 (включает заданные пользователем DNS сервера, но параметр <DNS server> не задан), будет использоваться сервер: «208.67.222.222» как DNS сервер по умолчанию.
«ESP8266 AT Instruction Set»

Смотрим какие DNS используются по умолчанию:

AT+CIPDNS_CUR?
+CIPDNS_CUR:192.168.1.10
+CIPDNS_CUR:208. 67.222.222
OK

Первый сервер — это шлюз, второй — это сервер проекта OpenDNS.

Задаем DNS яндекса:

AT+CIPDNS_CUR=1,"77.88.8.8","77.88.8.1"
OK
AT+CIPDNS_CUR?
+CIPDNS_CUR:77.88.8.8
+CIPDNS_CUR:77.88.8.1
OK

Проверяем:

AT+PING="ya.ru"
+35
OK

В tcpdump при этом появляются следующие строки:

07:34:35.982725 IP 192.168.1.11.4096 > 77.88.8.8.53: 43482+ A? ya.ru. (23)
07:34:36.014821 IP 77.88.8.8.53 > 192.168.1.11.4096: 43482 1/0/0 A 87.250.250.242 (39)
07:34:36.018460 IP 192.168.1.11 > 87.250.250.242: ICMP echo request, id 44975, seq 1, length 40
07:34:36.050192 IP 87.250.250.242 > 192.168.1.11: ICMP echo reply, id 44975, seq 1, length 40

Здесь, в первой строке идёт запрос к нашему DNS-серверу, чтобы тот предоставил IP адрес сервера «ya.ru». Во второй строке DNS сервер возвращает IP адрес: «87.250.250.242» . В третей строке идет сам ICMP запрос, а в четвёртой — ответ. Всё работает.

10) Получение даты и времени через сеть, используя NTP

Одним из наиболее очевидным способов применения ESP8266 в электронике, на мой взгляд, является синхронизация RTC по сетевому протоколу NTP. Даже если вы используете RTC повышенной точности, например: DS3231, это не избавляет вас от нудной процедуры подводки часов, которая зачастую упирается в удобство интерфейса. Не во всех устройствах рационально прикручивать кейпад, для коррекции даты и времени.

Для работы с NTP серверами имеются следующие AT-команды:

AT+CIPSNTPCFG — настройка SNTP

Команды: Query Command:
AT+CIPSNTPCFG?
Set Command:
AT+CIPSNTPCFG=<enable>[,<timezone>][,<SNTP server0>,<SNTP server1>,<SNTP server2>]
Отклик: +CIPSNTPCFG:<enable>,<timezone>,<SNTP server1>[,<SNTP server2>,<SNTP server3>]

OK

OK
Параметры:
  • <enable>: ‣ 0: SNTP отключён; ‣ 1: SNTP включён.
  • <timezone>: часовой пояс; допустимые значения: [-11,13]; Если SNTP отключено, то <timezone> не используется
  • <SNTP server0>: необязательный параметр, задаёт первый SNTP сервер;
  • <SNTP server1>: необязательный параметр, задаёт второй SNTP сервер;
  • <SNTP server2>: необязательный параметр, задаёт третий SNTP сервер.
Примеры AT+CIPSNTPCFG=1,8,»cn.ntp.org.cn»,»ntp.sjtu.edu.cn»,»us.pool.ntp.org»
Замечания: Если параметры <SNTP server> не заданы, то по умолчанию будут использоваться следующие сервера: будут использоваться по: «cn.ntp.org.cn»,»ntp.sjtu.edu.cn», и «us.pool.ntp.org».
«ESP8266 AT Instruction Set»

AT+CIPSNTPTIME — получение текущей даты и времени по SNTP

Query Command: AT+CIPSNTPTIME?
Отклик: +CIPSNTPTIME:<time>

OK

Параметры отклика: <time>: SNTP time

Например:

+CIPSNTPTIME: Thu Aug 04 14:48:05 2016

OK

Примеры использования: AT+CWMODE=1 //установить WiFi режим клиента AT+CWJAP=»DemoAP»,»password» //подключиться к роутеру AT+CIPSNTPCFG=1,8 //задать часовой пояс AT+CIPSNTPTIME? //получить текущее время
«ESP8266 AT Instruction Set»

OpenWRT может выступать в качестве SNTP сервера поэтому я указываю его адрес в качестве сервера, после чего запрашиваю текущее время:

OK
AT+CIPSNTPCFG=1,4,"192. 168.1.10"
OK
AT+CIPSNTPTIME?
+CIPSNTPTIME:Sun Nov 11 21:59:56 2018
OK

В tcpdump при этом появляются следующие строки:

21:59:09.411350 IP 192.168.1.11.4097 > 192.168.1.10.123: NTPv4, Client, length 48
21:59:09.434194 IP 192.168.1.10.123 > 192.168.1.11.4097: NTPv4, Server, length 48

Здесь первая срока — это запрос к серверу, а вторая — ответ сервера.

11) Связь ESP8266 с Web сервером на OpenWrt: настройка OpenWRT

Теперь рассмотрим вопрос организации связи ESP8266 с точкой доступа на OpenWRT. Допустим, программа или скрипт на OpenWRT ищет какую-либо информацию в интернет, и через ESP8266 её нужно вывести на дисплей. В составе OpenWRT имеется Web сервер uhttpd на котором крутится веб интерфейс LUCI, его и будем использовать. Север настраивается через конфиг /etc/config/uhttpd. LUCI мы трогать не будем, вместо этого создадим конфиг для нового сайта. Для этого, в конфиг: /etc/config/uhttpd добавим следующий раздел:

config uhttpd 'site'
        list listen_http '0. 0.0.0:8010'
        list listen_http '[::]:8010'
        option home '/site'
        option rfc1918_filter '1'
        option max_requests '3'
        option max_connections '25'
        option cgi_prefix '/cgi-bin'
        option script_timeout '60'
        option network_timeout '30'
        option http_keepalive '20'
        option tcp_keepalive '1'
        option ubus_prefix '/ubus

Как не трудно догадаться, директорией для сайта будет папка: «/site», директорией CGI будет папка: «/site/cgi-bin», а рабочим портом: «8010». Структура папки «site» пусть пока будет такой:

$ tree site 
site
├── cgi-bin
├── index.html
└── pub
    └── weather.txt
2 directories, 2 files

Где index.html — обычная «заглушка»:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<h4>Hello World!</h4>
</body>
</html>

После редактирования конфига и добавления директории «/site», перезапускаем web-сервер:

# /etc/init. d/uhttpd restart

Проверяем:

# netstat -l 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:8010            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:www             0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:domain          0.0.0.0:*               LISTEN      
tcp        0      0 OpenWrt.lan:ssh         0.0.0.0:*               LISTEN      
netstat: /proc/net/tcp6: No such file or directory
udp        0      0 0.0.0.0:domain          0.0.0.0:*                           
udp        0      0 0.0.0.0:bootps          0.0.0.0:*                           
udp        0      0 0.0.0.0:ntp             0.0.0.0:*                           
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING        650 /var/run/ubus. sock

Видим, что открыт наш порт 8010. Теперь с локальной машины пробуем с помощью curl подать на Web-сервер GET-запрос:

$ curl alien:8010
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<h4>Hello World!</h4>
</body>
</html>

В ответ мы получили свою html страницу, и значит, здесь все ОК. Ради любопытства посмотрим, что нам скажет nmap:

$ nmap -sV alien
Starting Nmap 7.12 ( https://nmap.org ) at 2018-11-12 13:10 +04
Nmap scan report for alien (192.168.1.10)
Host is up (0.00067s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     Dropbear sshd 2011.54 (protocol 2.0)
53/tcp   open  domain  dnsmasq 2.62
80/tcp   open  http    LuCI Lua http config
8010/tcp open  http    BusyBox http 1.19.4
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed.  Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 46.36 seconds

Здесь на 80-м порту висит LUCI, а на 8010 наш сайт. Теперь можно подключиться к нему через ESP8266. Но для этого нам нужно будет ознакомится с набором AT-команд для установления TCP/UDP соединения.

АТ-команды для установки TCP/UDP соединения

Прежде всего хочу коснуться терминологии. В ESP8266 имеется два режима TCP/UDP соединения: обычный нормальный режим, и режим «UART-Wi-Fi passthrough», который также называется прозрачным (transparent mode). Режим «UART-Wi-Fi passthrough» это мостовое соединение вида: «UART over WIFI», этакий UART по воздуху. Фактически это выглядит как чат на две персоны. Включается он командой: «AT+CIPMODE=1», а выключается последовательностью: «+++». Сейчас мы режима «UART-Wi-Fi passthrough» касаться не будем, но он часто упоминается в описании команд, поэтому я предварительно решил рассказать о нем.

AT+CIPMUX — включение или отключение режима нескольких подключений

Команды: Query Command:

AT+CIPMUX?

Set Command:

AT+CIPMUX=<mode>

Действие: установить тип соединения

Отклик: +CIPMUX:<mode>

OK

OK
Параметры: <mode>:

‣ 0: режим одиночного подключения
‣ 1: режим нескольких подключений

Замечения:
  • По умолчанию используется режим одиночного соединения
  • Режим нескольких подключений может быть включен только тогда, когда отключен прозрачный режим (AT+CIPMODE=0).
  • Этот режим может быть изменен только после отключения отключения всех активных соединений.
  • Если включен TCP сервер, то его следует отключить (AT+CIPSERVER=0) перед тем, как устанавливать режим одиночного соединения.
Пример: AT+CIPMUX=1

AT+CIPMODE — установить режим соединения

Команды: Query Command:

AT+CIPMODE?

Действие: возвращает текущий режим соединения.

Set Command:

AT+CIPMODE=<mode>

Действие: устанавливает режим соединения.

Отклик: +CIPMODE:<mode>

OK

OK
Параметры: <mode>:

‣ 0: нормальный режим соединения.
‣ 1: UART-Wi-Fi passthrough mode (прозрачный режим соединения), может быть установлен при использовании режима одиночного соединения или в UDP режиме, когда удалённые IP-адрес и порт не могут быть изменены.

Замечения:
  • Конфигурация не сохраняется во флеш-памяти.
  • Если в при режиме «UART-Wi-Fi passthrough» рвётся связь, то ESP8266 пытается восстановить ее переподключением, до тех пор пока, не получит символы +++ которые означают завершение режима «UART-Wi-Fi passthrough» и возврат к нормальному режиму. При дисконнекте в нормальном режиме, ESP8266 не будет пытаться переподключиться заново.
Пример: AT+CIPMODE=1

AT+CIPSTART — установка TCP соединения, UDP передачи или SSL соединения

Установка TCP соединения

Set Command: Одиночное соединение (когда +CIPMUX=0):

AT+CIPSTART=<type>,<remote IP>,<remote port>[,<TCP keep alive>]

Множественное соединение: (когда +CIPMUX=1):

AT+CIPSTART=<link ID>,<type>,<remote IP>,<remote port>[,<TCP keep alive>]

Отклик: OK

или

ERROR

Если соединение уже было установлено, то вернет: ALREADY CONNECTED

Параметры:
Примеры: AT+CIPSTART=»TCP»,»iot. espressif.cn»,8000
AT+CIPSTART=»TCP»,»192.168.101.110″,1000

Для большей информации смотрите документ: ESP8266 AT Command Examples

Установка UDP соединения

Set Command: Одиночное соединение (когда +CIPMUX=0):

AT+CIPSTART=<type>,<remote IP>,<remote port>[,(<UDP local port>),(<UDP mode>)]

Множественное соединение: (когда +CIPMUX=1):

AT+CIPSTART=<link ID>,<type>,<remote IP>,<remote port>[,(<UDP local port>),(<UDP mode>)]

Отклик: OK

или

ERROR

Если соединение уже было установлено, то вернет: ALREADY CONNECTED

Параметры:
  • <link ID>: ID соединения: от 0 до 4. Применимо только для множественного режима соединения.
  • <type>: строковый параметр указывающий тип соединения: «TCP», «UDP» или «SSL».
  • <remote IP>: строковый параметр содержащий удалённый IP адрес.
  • <remote port>: удаленный порт.
  • [<UDP local port>]: необязательный параметр, указывает UDP порт ESP8266.
  • [<UDP mode>]: необязательный параметр, для прозрачной UDP передачи должен быть сброшен в ноль. ‣ 0: целевой объект UDP передачи не может быть изменен; это значение используется по умолчанию. ‣ 1: целевой объект UDP передачи может быть изменен один раз. ‣ 2: целевой объект UDP передачи возможно менять.

Замечание: <UDP local port> должен быть задан перед <UDP mode>.
Примеры: AT+CIPSTART=»UDP»,»192.168.101.110″,1000,1002,2

Для большей информации смотрите документ: ESP8266 AT Command Examples

Установка SSL соединения

Set Command: AT+CIPSTART=[<link ID>,]<type>,<remote IP>,<remote port>[,<TCP keep alive>]
Отклик: OK

или

ERROR

Если соединение уже было установлено, то вернет: ALREADY CONNECTED

Параметры:
Замечания:
  • ESP8266 может устанавливать только одно SSL соединение.
  • SSL не поддерживает режим прозрачного соединения (UART-Wi-Fi passthrough mode).
  • SSL соединению необходим большой объем памяти, иначе это может привести к перезагрузке ESP8266. Память для SSL соединения можно выделить командой AT+CIPSSLSIZE=<size>, где size — размер буфера.
Примеры: AT+CIPSTART=»SSL»,»iot.espressif.cn»,8443
«ESP8266 AT Instruction Set»

AT+CIPSEND — отправка данных

Команды: Set Command:
  1. Одиночное соединение: (при +CIPMUX=0)
    AT+CIPSEND=<length>
  2. Множественные соединения:(при +CIPMUX=1)
    AT+CIPSEND=<link ID>,<length>
  3. При UDP сессии может быть указан удаленный IP-адрес и порт:
    AT+CIPSEND=[<link ID>,]<length> [,<remote IP>,<remote port>]

Действие: задание длины данных в нормальном режиме передачи (не «UART-WIFI passthrough mode»).
Execute Command: AT+CIPSEND
Действие: объявлет начало передачи данных в прозрачном режиме.
Отклик: Отправка данных определенной длины. Возвращает значок > после передачи «Set Command». Значок означает, что можно начать передавать данные. Когда длина данных достигнет размера заданного в параметре <length>, данные начнут передаваться. Если соединение не удастся установить или оно будет прервано, то будет возвращенно:

ERROR

Если данные были переданны успешно, то будет возвращенно:

SEND OK

Если же это не удалось, то вернется:

SEND FAIL

Возвращает значок «>» после подачи команды. После этого, ESP8266 удерживает соединение посылая пакеты с интервалом 20 мс и максимальной длиной пакета 2048 байт. Когда будет получен пакет содержащий три последовательных символа плюс: «+++», то соединение разрывается и ESP8266 возвращается в обычный командный режим.

Команда может использоваться только в прозрачном режиме которе требует одиночного режима соединения(+CIPMUX=0)

Для UDP режима, значение <UDP mode> должно быть установлено в нуль, прежде чем подавать команду AT+CIPSTART.

Параметры:
  • <link ID>: ID соединения: от 0 до 4. Применимо для множественного режима соединения.
  • <length>: длина данных, максимальное значение: 2048 байта.
  • [<remote IP>]: удаленный IP адрес, может быть установлен для UDP сессии.
  • [<remote port>]: удаленный порт, может быть установлен для UDP сессии.
Примеры: Для большей информации смотрите документ ESP8266 AT Command Examples.
«ESP8266 AT Instruction Set»

AT+CIPCLOSE — Закрытие TCP/UDP/SSL соединения

Команды: Set Command (используется только при множественном соединении):

AT+CIPCLOSE=<link ID>

Действие: закрывает TCP/UDP соединение.(Про закрытие SSL соединения в оригинале ничего не сказано. Прим переводчика.)

Execute Command (используется только при множественном соединении):

AT+CIPCLOSE

Отклик: OK
Параметры: <link ID>: где ID это номер закрываемого соединения (от 1 до 4). Когда ID равен 5, то это означает, что нужно закрыть все соединения. В режиме сервера, ID=5 не имеет какого-либо эффекта.

AT+CWQAP — отключение от точки доступа

Execute Command: AT+CWQAP
Отклик: OK
Параметры: отсутствуют.
«ESP8266 AT Instruction Set»

13) Получение web-страницы или текстового файла от сервера на OpenWRT

Итак, попробуем получить html страницу которую мы разместили на веб-сервере OpenWRT.

Подключаемся к точке доступа:

AT+CWMODE_CUR=1
OK
AT+CWJAP="Alien","password"
WIFI CONNECTED
WIFI GOT IP
OK

Устанавливаем TCP-соединение:

AT+CIPSTART="TCP","192.168.1.10",8010
CONNECT
OK

Отправляем http запрос из 18 байт, где текст запроса составляет 14 байт, плюс четыре байта отводится на комбинацию завершения: «\r\n\r\n»

AT+CIPSEND=18
OK
> 

После того, как появится символ «>», нужно будет ввести команду:

GET / HTTP/1. 0

После ввода команды нужно еще раз ввести пустой Enter. Если всё было сделано правильно, то вернется наша html страница:

>
Recv 18 bytes
SEND OK
+IPD,17:HTTP/1.0 200 OK
+IPD,450:Connection: close
ETag: "6004-111-5be409c1"
Last-Modified: Thu, 08 Nov 2018 10:02:41 GMT
Date: Thu, 15 Nov 2018 20:00:08 GMT
Content-Type: text/html
Content-Length: 273
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<h4>Hello World!</h4>
</body>
</html>
CLOSED

Если посмотреть запись TCP-сессии в wireshark, то можно увидеть наш GET-запрос:

И 200-й ответ сервера с содержанием html-страницы:

14) Получение лога погоды от сервера на OpenWRT

Теперь подумаем, для чего нужна html страница? HTML страницы открывают в браузерах которые переобразуют их в форматированный текст. В ESP8266 нет ресурсов чтобы парсить интернет. Зато эти ресурсы есть в OpenWRT.

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

$ elinks --dump http://realmeteo.ru/samara/1/current|sed -n "13p" |awk '{print $1}'
-9DEGC

Остается написать задание для cron, что бы он периодически запускал эту команду, еще добавить дату и время для справки, и получим погодный логер из старого роутера. Остается передать лог на ESP8266 чтобы он выводил этот лог на дисплей, т.е. получаем этакий Hi-Tech градусник. У кого обычный градусник летом постоянно нагревается солнцем, те оценят.

Файл с логом погоды разместим в директории сайта: «/site/pub/waether.txt». Чтобы нам получить этот файл от веб-сервера, в GET-запросе нужно будет указать имя файла, который нам нужно получить:

GET /pub/weather. txt HTTP/1.0

В результате получаем наш файл:

AT+CIPSTART="TCP","192.168.1.10",8010
CONNECT
OK
AT+CIPSEND=33
OK
> 
Recv 33 bytes
SEND OK
+IPD,17:HTTP/1.0 200 OK
+IPD,1460:Connection: close
ETag: "6006-545-5bede30f"
Last-Modified: Thu, 15 Nov 2018 21:20:15 GMT
Date: Thu, 15 Nov 2018 21:41:04 GMT
Content-Type: text/plain
Content-Length: 1349
[11-15-18 00:00:11] -5.8DEGC
[11-15-18 00:30:11] -5.9DEGC
[11-15-18 01:30:12] -6.4DEGC
[11-15-18 02:00:12] -6.4DEGC
[11-15-18 02:30:12] -6.6DEGC
[11-15-18 03:00:11] -6.6DEGC
[11-15-18 03:30:11] -6.8DEGC
[11-15-18 04:00:11] -7.1DEGC
[11-15-18 04:30:11] -7.2DEGC
[11-15-18 05:00:11] -7.4DEGC
[11-15-18 05:30:11] -7.6DEGC
[11-15-18 06:00:12] -8.1DEGC
[11-15-18 06:30:12] -8.1DEGC
[11-15-18 07:00:12] -9DEGC
[11-15-18 07:30:12] -9DEGC
[11-15-18 08:00:12] -9DEGC
[11-15-18 08:30:11] -9DEGC
[11-15-18 09:00:11] -9DEGC
[11-15-18 09:30:11] -7.9DEGC
[11-15-18 10:00:11] -7.9DEGC
[11-15-18 10:30:11] -6.7DEGC
[11-15-18 11:00:11] -6.1DEGC
[11-15-18 11:30:11] -5. 4DEGC
[11-15-18 12:00:11] -5.2DEGC
[11-15-18 12:30:11] -5.2DEGC
[11-15-18 13:00:11] -4.3DEGC
[11-15-18 13:30:11] -4.2DEGC
[11-15-18 14:00:11] -3.8DEGC
[11-15-18 14:30:11] -3.4DEGC
[11-15-18 15:00:11] -3.4DEGC
[11-15-18 15:30:11] -3DEGC
[11-15-18 16:00:11] -3DEGC
[11-15-18 16:30:11] -2.8DEGC
[11-15-18 17:00:11] -2.8DEGC
[11-15-18 17:30:11] -2.7DEGC
[11-15-18 18:00:11] -2.7DEGC
[11-15-18 18:30:11] -2.6DEGC
[11-15-18 19:00:11] -2.4DEGC
[11-15-18 19:30:11] -2.4DEGC
[11-15-18 20:00:12] -2.4DEGC
[11-15-18 20:30:12] -2.7DEGC
[11-15-18 21:00:12] -2.7DEGC
[11-15-18 21:30:12] -2.7DEGC
[11-15-18 22:00:12] -2.7DEGC
[11-15-18 22:30:11]
+IPD,68: -2.7DEGC
[11-15-18 23:00:11] -2.7DEGC
[11-15-18 23:30:11] -2.5DEGC
CLOSED

15) Управление OpenWRT через ESP8266 посредством CGI интерфейса

Раньше, чтобы управлять роутером на OpenWRT, нужно было либо припаивать к нему «гребёнку» на UART интерфейс и тянуть провода к микроконтроллеру, посредством которого передавались бы ваши команды. Либо прикручивать к микроконтроллеру какой либо Ethernet чип и передавать команды через сеть Ethernet, что опять же подразумевает провода. С помощью ESP8266 вы сможете вычеркнуть из этого уравнения провода.

Т.к. сервер uhttpd поддерживает CGI интерфейс, мы можем связать наш ESP8266 с OpenWRT посредством этого интерфейса, который и заменит нам пресловутые провода. Скрипты cgi могут писаться на каких угодно языках, для примера я возьму самый очевидный вариант — язык shell скриптов. Я буду краток, но если вас заинтересует тема написания cgi скриптов на языке shell скриптов, то советую почитать книгу Дэвида Тейнсли: «Linux и UNIX: программирование в shell. Руководство разработчика», глава 29 «Сценарии cgi».

Для проверки работоспособности GCI интерфейса проведем небольшой тест. Для этого в каталоге «/site/cgi-bin/» создадим файл esp8266.cgi следующего содержания:

#!/bin/sh
echo -en "Status: 200 OK\r\n"
echo -en "Content-type: text/html\r\n\r\n"
echo "<h2>test</h2>"

Установим на файл права:

# chmod 755 /site/cgi-bin/esp8266.cgi

Проверяем тут же в OpenWRT:

# curl localhost:8010/cgi-bin/esp8266. cgi
<h2>test</h2>

Работает. Теперь, допустим нам нужно получить текущую температуру. Приведем скрипт esp8266.cgi к такому виду:

#!/bin/sh
echo -en "Status: 200 OK\r\n"
echo -en "Content-type: text/html\r\n\r\n"
echo "<h2>ESP8266 Weather</h2>"
temp=$(elinks --dump http://realmeteo.ru/samara/1/current|sed -n "13p" |awk '{print $1}'|sed "s/DEGC//")
echo "<p>"
echo -n "current temp= "
echo -n "$temp" 
echo "&deg;"
echo "</p>"

Проверяем из ESP8266:

Здесь после «AT+CIPSEND=37» нужно будет ввести: «GET /cgi-bin/esp8266.cgi HTTP/1.1», после чего два раза ввести Enter. Как можно видеть по вставкам вида: «+IDC:num», ответ от сервера приходит в формате Chunked transfer encoding, когда данные бьются на фрагменты.

16) Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос

Теперь нам нужно рассмотреть, как можно отправить данные с микроконтроллера, посредством ESP8266, на OpenWRT. В HTTP протоколе имеются два основных способа передачи данных от клиента серверу: а) через GET запрос; б) через POST запрос.

Первый способ несколько попроще, там данные передаются через строку адреса. Отсюда и главное ограничение такого способа: длина передаваемых данные не должна превышать максимальную длину URL. Кроме того, такие данные видны пользователю в строке веб-браузера, что тоже не всегда желательно. Но для того, чтобы передать несколько цифр полученных микроконтроллером от датчиков, GET запрос подходит как нельзя лучше.

GET запрос формируется добавлением к URL знака вопроса, после которого перечисляются данные и их значения:

?var1=value1&var2=value2&var3=value3

Данные разделяются символом амперсанда, пробелы и прочие непечатные символы передаются в шестнадцатеричном виде: %xy. Shell — скрипт получает данные от сервера через CGI интерфейс в виде встроенных переменных.

Приведем содержимое скрипта esp8266.cgi к следующему виду:

#!/bin/sh
echo -en "Status: 200 OK\r\n"
echo -en "Content-type: text/html\r\n\r\n"
echo "<h2>ESP8266 -  GET Request Example</h2>"
echo "<p>"
echo -n "Request method= "
echo "$REQUEST_METHOD"
echo "<br>"
echo -n "Data: "
echo "$QUERY_STRING"
echo "</p>"

Проверяем:

# curl "localhost:8010/cgi-bin/esp8266. cgi?var1=value1&var2=value2&var3=value3"
<h2>ESP8266 -  GET Request Example</h2>
<p>
Request method= GET
<br>
Data: var1=value1&var2=value2&var3=value3
</p>

Как видно, данные были успешно приняты, нам осталось лишь распарсить переменную QUERY_STRING. У меня это получилось так:

#!/bin/sh
echo -en "Status: 200 OK\r\n"
echo -en "Content-type: text/html\r\n\r\n"
echo "<h2>ESP8266 -  GET Request Example</h2>"
echo "<p>"
echo -n "Request method= "
echo "$REQUEST_METHOD"
echo "<br>"
echo -n "Data: "
echo "$QUERY_STRING"
echo "</p>"
line=$(echo "$QUERY_STRING"|sed "s/&/	/g")
for loop in $line
do
	name=$(echo $loop|awk -F = '{print $1}')
	type=$(echo $loop|awk -F = '{print $2}')
	var=$(printf "${name}=${type}")
	eval $(printf $var)
done
[ -z $var1 ] && exit || echo $var1
[ -z $var2 ] && exit || echo $var2
[ -z $var3 ] && exit || echo $var3
let "var1 += 10"
echo $var1

Алгоритм был подсмотрен в книге Дэвида Тейнсли, но я его несколько упростил предположив, что значения переменных не будут содержать пробелы и непечатные символы, которые кодируются шестнадцатеричными числами. После парсинга выводятся значения полученных переменных. Предпологается, что переменная var1 является числом, и с ней производится арифметическая операция. Проверяем:

# curl "localhost:8010/cgi-bin/esp8266.cgi?var1=12&var2=bar&var3=foo"
<h2>ESP8266 -  GET Request Example</h2>
<p>
Request method= GET
<br>
Data: var1=12&var2=bar&var3=foo
</p>
12
bar
foo
22

17) Отправка данных от ESP8266 на web-сервер OpenWRT через POST запрос

Отправка данных через POST запрос несколько сложнее. У этого метода имеется заголовок, в котором следует указывать формат и длинну данных.

Для обработки POST запросов создадим скрипт: «/site/cgi-bin/post.cgi» следующего содержания:

#!/bin/sh
if [ "$REQUEST_METHOD" = "POST" ]; then
QUERY_STRING=$(cat -)
fi
echo -en "Status: 200 OK\r\n"
echo -en "Content-type: text/html\r\n\r\n"
echo "<h2>ESP8266 -  POST Request Example</h2>"
echo "<p>"
echo -n "Request method= "
echo "$REQUEST_METHOD"
echo "<br>"
echo -n "Data: "
echo "$QUERY_STRING"
echo "</p>"
line=$(echo "$QUERY_STRING"|sed "s/&/	/g")
for loop in $line
do
	name=$(echo $loop|awk -F = '{print $1}')
	type=$(echo $loop|awk -F = '{print $2}')
	var=$(printf "${name}=${type}")
	eval $(printf $var)
done
[ -z $var1 ] && exit || echo $var1
[ -z $var2 ] && exit || echo $var2
[ -z $var3 ] && exit || echo $var3
let "var1 += 10"
echo $var1

Установим на него права:

# chmod 755 /site/cgi-bin/post. cgi

Проверяеем командой:

$ curl -d "var1=12&var2=bar&var3=foo" -X POST "192.168.1.10:8010/cgi-bin/post.cgi"

Или:

$ curl -d "var1=12&var2=bar&var3=foo" -H "Content-Type: application/x-www-form-urlencoded" -X POST "192.168.1.10:8010/cgi-bin/post.cgi"

Где «192.168.1.10» — это адрес роутера c OpenWRT.

В Wireshark можно посмотреть формат запроса:

Как можно видеть, заголовок запроса состоит из следующих строк:

POST /cgi-bin/post.cgi HTTP/1.1
Host: 192.168.1.10:8010
User-Agent: curl/7.59.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

После заголовка следует ДВА enter’а, т.е. последовательность: «\r\n\r\n». После этого идут данные.

Полностью вводить вручную весь заголовок может быть утомительно, на скриншоте приведён лог сессии, где используется только первая строка заголовка:

Теперь подробнее, пошаговая инструкция.

Устанавливаем TCP-соединение:

AT+CIPSTART="TCP","192. 168.1.10",8010
CONNECT
OK

Отправляем http запрос из 60 байт, где заголовок будет состоять из 31 байта, 4 байта будет занимать последовательность окончания заголовка: «\r\n\r\n», на остальные 25 байт приходятся сами данные.

AT+CIPSEND=60
OK
 

После того, как появится символ «>», нужно будет ввести запрос:

POST /cgi-bin/post.cgi HTTP/1.1

После ввода запроса нужно еще раз ввести пустой Enter. После этого, вводим наши данные:

var1=12&var2=bar&var3=foo

После ввода Enter, должен прийти ответ от сервера. На скриншоте показан наш POST запрос в программе Wireshark:

18) Управление Linux/OpenWRT используя режим «UART-WiFi passthrough»

В ESP8266 имеется режим «UART-WiFi passthrough» который в документации также называется прозрачным режимом (transparent). Этот режим можно назвать «UART через WIFI», т.к. он позволяет установить непрерывное соединение по TCP или UDP протоколу. Режим включается командой AT+CIPMODE=1, а выход из этого режима происходит посылкой последовательности трех плюсов подряд: «+++». Примеры с использованием данного режима приведены в следующем руководстве: ESP8266 AT Command Examples

Какие у этого может быть практическое применение? Думаю все знают о такой полезной утилите как nc или netcat, с помощью которой можно устраивать простенькие чаты. Одними чатами ее полезность не ограничена, мы можем также управлять компьютером c linux или Windows с её по помощью через ESP8266. Давайте посмотрим как это делается на примере OpenWRT.

Открываем backdoor на OpenWRT с помощью команды:

# nc -l -p 12345 -e /bin/ash

Запускаем ESP8266 и подключаемся к точке доступа:

AT+CWMODE_CUR=1
OK
AT+CWJAP="Alien","password"
WIFI CONNECTED
WIFI GOT IP
OK

Устанавливаем TCP-соединение:

AT+CIPSTART="TCP","192.168.1.10",12345
CONNECT
OK

Где 192.168.1.10 — адрес роутера с OpenWRT, на котором мы открыли порт. Далее даём команды:

AT+CIPMODE=1

и:

AT+CIPSEND

После этого появится значок «>». После этого, в терминале, знак окончания строки нужно будет сменить с «NL & CR» на «NL», и можно начинать вводить команды:

Для окончания сеанса, следует в терминале сменить знак окончания строки на: «нет окончания строки». После этого ввести три знака плюс. Затем знак окончания строки сменить на: «NL & CR».

Далее, для разрыва соединения вводится команды:

AT+CIPMODE=0

и:

AT+CIPCLOSE

Думаю, что стоит упомянуть, что: а) использовать такой способ следует только в защищённом участке интрасети, б) не следует предоставлять привилегированный доступ к . При необходимости следует использовать sudo.

19) Прошивка ESP32 в интерпретатор AT-команд

Плата ESP32 NodeMCU несколько более замороченная нежели свой аналог на ESP8266:

Плата немного шире чем ESP8266 NodeMCU, при установке в беспаячную макетку, свободным остается только один ряд. Т.е. пины на другой стороне становятся недоступными.

Для работы с платой в режиме AT-команд понадобится USB-UART преобразователь с логикой на 3. M

Из любопытного. Последовательности: [[0;32mI и [[0m означат цветовую разметку вывода в Linux. Это означает, что мы можем подключиться к порту программной screen:

$ screen /dev/ttyUSB0 115200,cs8

Выглядит это так:

Из полезного, тут можно узнать версию AT-интерпретатора:

Bin version:0.10.0

Т.к. это ужас какая древняя версия, аж прошлого 2017-го года, скорее всего вам захочется ее обновить. Для этого нам снова придется обратится к программе esptool.py

Перед вводом команд esptool.py, необходимо: а) вначале нажать кнопку EN; б) после чего, удерживая кнопку EN, нажать конку BOOT; в) после чего, отпустить кнопку EN и удерживая кнопку BOOT ввести команду esptool.py.

Для начала проверим связь:

$ esptool.py --chip esp32 flash_id
esptool.py v2.3.1
Connecting....
Chip is ESP32D0WDQ6 (revision (unknown 0xa))
Features: WiFi, BT, Dual Core, VRef calibration in efuse
Uploading stub...
Running stub...
Stub running...
Manufacturer: c8
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin. ..
$ esptool.py --chip esp32 chip_id
esptool.py v2.3.1
Connecting......
Chip is ESP32D0WDQ6 (revision (unknown 0xa))
Features: WiFi, BT, Dual Core, VRef calibration in efuse
Uploading stub...
Running stub...
Stub running...
Chip ID: 0xaa807d3acb66
Hard resetting via RTS pin...

Затем, вам возможно захочется сохранить существующую прошивку:

$  esptool.py --chip esp32 --port /dev/ttyUSB0 read_flash 0x00000 0x400000 ./esp32_firmware2.bin
esptool.py v2.3.1
Connecting.....
Chip is ESP32D0WDQ6 (revision (unknown 0xa))
Features: WiFi, BT, Dual Core, VRef calibration in efuse
Uploading stub...
Running stub...
Stub running...
4194304 (100 %)
4194304 (100 %)
Read 4194304 bytes at 0x0 in 380.7 seconds (88.1 kbit/s)...
Hard resetting via RTS pin...

Актуальную версию прошивки можно скачать с официального сайта: ESP32 Resources | Espressif Systems.

После распаковки архива, видим следующую структуру каталогов:

$ tree .
.
├── at_customize.bin
├── blank. bin
├── bootloader
│   └── bootloader.bin
├── customized_partitions
│   ├── ble_data.bin
│   ├── client_ca.bin
│   ├── client_cert.bin
│   ├── client_key.bin
│   ├── server_ca.bin
│   ├── server_cert.bin
│   └── server_key.bin
├── download.config
├── esp-at.bin
├── factory.bin
├── partitions_at.bin
└── phy_init_data.bin

Здесь нас будет интересовать содержимое файла download.config, к котором хранится опции прошивки для esptool.py:

--flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader/bootloader.bin 0x20000 at_customize.bin 0x21000 customized_partitions/ble_data.bin 0x24000 customized_partitions/server_cert.bin 0x26000 customized_partitions/server_key.bin 0x28000 customized_partitions/server_ca.bin 0x2a000 customized_partitions/client_cert.bin 0x2c000 customized_partitions/client_key.bin 0x2e000 customized_partitions/client_ca.bin 0xf000 phy_init_data.bin 0x100000 esp-at.bin 0x8000 partitions_at.bin

Не мудрствуя лукаво, прошиваем согласно предложенным рекомендациям:

$ esptool. py --chip esp32 --port /dev/ttyUSB0 write_flash --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader/bootloader.bin 0x20000 at_customize.bin 0x21000 customized_partitions/ble_data.bin 0x24000 customized_partitions/server_cert.bin 0x26000 customized_partitions/server_key.bin 0x28000 customized_partitions/server_ca.bin 0x2a000 customized_partitions/client_cert.bin 0x2c000 customized_partitions/client_key.bin 0x2e000 customized_partitions/client_ca.bin 0xf000 phy_init_data.bin 0x100000 esp-at.bin 0x8000 partitions_at.bin

Процесс прошивки:

esptool.py v2.3.1
Connecting.....
Chip is ESP32D0WDQ6 (revision (unknown 0xa))
Features: WiFi, BT, Dual Core, VRef calibration in efuse
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 19424 bytes to 11458...
Wrote 19424 bytes (11458 compressed) at 0x00001000 in 1.0 seconds (effective 153.0 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 136. ..
Wrote 3072 bytes (136 compressed) at 0x00020000 in 0.0 seconds (effective 1372.2 kbit/s)...
Hash of data verified.
Compressed 5720 bytes to 347...
Wrote 5720 bytes (347 compressed) at 0x00021000 in 0.0 seconds (effective 1239.8 kbit/s)...
Hash of data verified.
Compressed 1284 bytes to 941...
Wrote 1284 bytes (941 compressed) at 0x00024000 in 0.1 seconds (effective 115.7 kbit/s)...
Hash of data verified.
Compressed 1692 bytes to 1322...
Wrote 1692 bytes (1322 compressed) at 0x00026000 in 0.1 seconds (effective 110.9 kbit/s)...
Hash of data verified.
Compressed 1276 bytes to 882...
Wrote 1276 bytes (882 compressed) at 0x00028000 in 0.1 seconds (effective 121.5 kbit/s)...
Hash of data verified.
Compressed 2536 bytes to 1534...
Wrote 2536 bytes (1534 compressed) at 0x0002a000 in 0.1 seconds (effective 142.9 kbit/s)...
Hash of data verified.
Compressed 3376 bytes to 2537...
Wrote 3376 bytes (2537 compressed) at 0x0002c000 in 0.2 seconds (effective 116.9 kbit/s)...
Hash of data verified.
Compressed 2544 bytes to 1460. ..
Wrote 2544 bytes (1460 compressed) at 0x0002e000 in 0.1 seconds (effective 150.8 kbit/s)...
Hash of data verified.
Compressed 144 bytes to 69...
Wrote 144 bytes (69 compressed) at 0x0000f000 in 0.0 seconds (effective 96.2 kbit/s)...
Hash of data verified.
Compressed 1119072 bytes to 704097...
Wrote 1119072 bytes (704097 compressed) at 0x00100000 in 62.5 seconds (effective 143.2 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 129...
Wrote 3072 bytes (129 compressed) at 0x00008000 in 0.0 seconds (effective 1446.2 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...

Если после перепрошивки отладочный лог платы в порядке, то теперь для работы с AT-командами нужно будет подключить USB-UART адаптер с 3.3 вольтовой логикой на второй UART порт ESP32. Подключение USB-UART адаптера и ESP32: GND<—>GND(адаптера), RX2<—>TX(адаптера), TX2<—>RX(адаптера).

Работа с AT интерпретатором ESP32 по сути не отличается от ESP8266:

AT+GMR
AT version:1. 1.2.0(f045c0c - Aug 30 2018 04:20:47)
SDK version:v3.0.3
compile time:Sep  4 2018 08:53:40
Bin version(Wroom32):1.1.2
OK
AT+SYSRAM?
+SYSRAM:131680
OK
AT+PING="ya.ru"
+PING:30
OK
AT+CIPDNS?
+CIPDNS:192.168.1.10
OK

Существенное отличие от ESP8266 — это наличие команд для работы с Bluetooth.

На этом пока всё. К сожалению не удалось осветить тему программирования ESP8266/ESP32 на Си и ассемблере. Для этого потребуется отдельная статья и возможно даже не одна. Так же остался за бортом Bluetooth, о сфере применения которого я пока гадаю. В руководстве ESP32 AT Instruction Set and Examples имеется пример сопряжения двух ESP32, но мне кажется более интересной тема связи с другими Bluetooth устройствами, например со смартфонами.

Перепрошивка ESP-8266 | Жизнь, бизнес и IT

ESP-8266 — интересный Wi-Fi чип для разработки устройств IoT. При приобретении его на Aliexpress прошивка на нем, нередко, достаточно старая. Прошивка устройства много где описана, но нередко упускаются из виду очень критичные моменты. Постараюсь воссоздать всю цепочку.

Для начала рекомендую распаять чип на белую платку-адаптер для ESP-07, ESP-12. На ней уже распаяны необходимые подтягивающие резисторы, кроме того, минимизируется риск повреждения контактов модуля ESP-8266.

Обычно в комплекте с платой не идет XC-6206A на 3,3 V. В принципе, он не нужен для работы при подаче напряжения 3,3 V.

Схема белой платы-адаптера (ESP-12 white mounting breakout board scematics) для ESP-07, ESP-12 следующая:

  • Приницпиальная схема платы-адаптера для ESP-07, ESP-12 (ESP-8266)

Емкости на плате отсутствуют. Вход EN обозначен как CH_PD.

Для программирования использовал аксессуары:

  • Arduino UNO R3 запитанный от блока питания, а не от USB порта. Мощности USB порта может оказаться недостаточно для питания Arduino UNO и ESP-8266. Arduino использовал только как блок питания на 3,3 V. Естественно, лучше использовать блок питания на 3,3 V.
  • RS-232 to UART конвертер. Можно использовать недорогой бескорпусный вариант. Я использовал корпусный вариант.
  • ESP-12 модуль (ESP-8266).
  • Белая плата-адаптер для ESP-8266 модулей.
  • Набор Dupont проводов.

Замечательно если есть беспаячная монтажная плата. У меня не было под руками, поэтому коммутацию выполнял напрямую проводами обжатыми Dupont разъемами.

Далее по тексту ESP-8266 — это модуль распаянный на белую плату-адаптер.

Коммутация:

ESP-8266
RS-232
converter
Arduino UNO
или БП 3,3 V
Комментарий
TXDRXDТеоретически, можно использовать Arduino TX/RD с небольшим скетчем. Однако, по-умолчанию, для ESP-8266 задана скорость порта 115200. Arduino UNO/Nano работают нестабильно на этой скорости, поэтому сначала придется подключится напрямую, чтобы установить скорость 9600.
RXDTXD
GNDGNDGND
VCC3,3 VArduino запитываем не от USB порта ПК!!!
GPIO0GNDДля переключения в режим обновления.

Проверка собранной схемы

Перед тем как переводить ESP-8266 в режим отновления прошивки, проверим работу собранной схемы:

  • Убедимся, что GIO0 отключена от GND. Иначе AT команды отправить в модуль нельзя.
  • Включим питание модуля.
  • Подключим USB-to-RS232 конвертер к ПК.
  • Зайдем в Control Panel -> System -> Device manager -> Ports (COM & LPT).
  • Если устройство Prolific USB-to-Serial Comm Port работает с ошибкой — нужно установить fix.
  • Если USB конвертер работает без ошибок — смоттри на каком COM порту он работает.
  • Запускаем ESPlorer и выставляем в настройках правильный COM порт и скорость. Жмем «Open».
  • Переходим на закладку «AT-based» и жмем кнопку «AT». Отправится команда AT, в ответ должна прийти «ОК». Хначит устрйоство работает нормально. То-же самое можно сделать любой терминальной программой работающей с последовательным портом, вроде PuTTY.
  • Далее жмем кнопку»RST». Отправится команда AT+RST для рестарта модуля.
  • Отправка команды AT+RST в ESP-8266.
AT+RST
AT+RST
OK
WIFI DISCONNECT
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)
load 0x40100000, len 1396, room 16 
tail 4
chksum 0x89
load 0x3ffe8000, len 776, room 4 
tail 4
chksum 0xe8
load 0x3ffe8308, len 540, room 4 
tail 8
chksum 0xc0
csum 0xc0
2nd boot version : 1.4(b1)
  SPI Speed      : 40MHz
  SPI Mode       : DIO
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000
тn&#039;t use rtc mem data
rlЋ‚rlМя
Ai-Thinker Technology Co.,Ltd.
ready
WIFI CONNECTED
WIFI GOT IP
  • Сохраним полученные параметры чипа. Они могут пригодится в дальнейшем.
  • Отправим AT+GMR для получения информации о текущей версии прошивки ESP-8266.
  • Отправка команды AT+GMR в ESP-8266

Получили следующую информацию о чипе:

  • SPI Speed : 40MHz
  • SPI Mode : DIO
  • SPI Flash Size & Map: 8Mbit(512KB+512KB)
  • AT version:0.40.0.0(Aug 8 2015 14:45:58)
  • SDK version:1.3.0
  • Build:1.3.0.2 Sep 11 2015 11:48:04

Софт для прошивки ESP-8266

Для прошивки нужно скачать следующее ПО от разработчика чипа, компании Espressif:

  • Flash Downloads Tool.
  • Прошивка ESP8266 AT. Если нужны исходники, то ESP8266 NONOS SDK.
  • Документация по ESP8266.

Перевод ESP-8266 в режим загрузки обновления

Для перевода ESP-8266 в режим загрузки прошивки нужно:

  • Отключить питание модуля и извлечь из USB порта USB-to-RS-232 конвертер.
  • Замкнуть PIN GPIO0 на GND. Я использовал Dupont кабель. Кнопку нет смысла использовать. Вот здесь есть тонкий момент. На некоторых схемах используют две кнопки Flash и Reset и нажимают их попеременно для ввода в режим заливки обновления. В официальной документации дан вариант, который я описал. Но при этом я брикнул ESP8266 и пока не нашел способа восстановить.
  • Включить питание модуля.
  • Немного подождать и подключить USB-to-RS-232 конвертер.

Если нарушить последовательность, то программатор не найдет ESP-8266 модуль!

  • Запускаем ESP8266 Flash Download Tool.
  • Выбираем ESP8266 и задаем правильный порт и скорость.
  • Ничего не вводим и нажимаем Start
  • Если ESP 8266 корректно переведен в режиме скачивания прошивки, то практически мгновенно будет выдан статус Finish. И в «detected info» отобразится информация:
    • flash vendor: E0h : N/A
    • flash devID: 4016h
    • QUAD;
    • 32Mbit crystal;
    • 26 Mhz

Прошивка

В некоторых случаях брикнутые ESP 8266 удается восстановить с использованием инстурмента XTCOM_UTIL. Статья на эту тему.

Но здесь есть такой момент. Прошивки подходящие под эту утилиту неофициальные (специально сделанные) и очень древние. Хотя, можно «лить» и официальные, указав правильные адреса. Я не пробовал, но в статье пример.

У меня была ситуация, когда не мог залить официальную прошивку на купленный на Aliexpress ESP 8266 модуль. Но после того как залил древнюю прошивку через XTCOM_UTIL, залилась и прошивка через официальный ESP8266 Download Tool.

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

Если конвертер USB — RS-232 плохого качества, либо плохое качество соединений, то ESP8266 Download Tool может выдавать ошибку синхронизации. В Интернет рекомедуют снижать скорость до 9600, но это нельзя сделать с помощью этой утилиты. У неё минимальная скорость 115200. В этом случае можно воспользоваться консольной утилитой ESPTool от официального разработчика чипа компании Espressif. Я пробовал прошивать с помощью этой утилиты брикнутый чип, но безуспешно.

Таблицу адресов для заливки лучше брать в официальной документации, поскольку адреса завсят от чипа. Этот вопрос нужно смотреть тщательно, поскольку в Интернет адреса заданы для того чипа, который шил автор статьи. Адреса и схема распайки для программирования есть в ESP8266_SDK_Getting_Started_Guide, и адреса есть также в ESP8266_AT_Instructions_Set.

Сразу отмечу, что у меня нет достоверной информации, что если в ESP8266 Download Tool выставить флаг SpiAutoSet, то действительно производится проверка параметров чипа. Адреса точно никак не проверяются.

Например, у меня брикнулся чип после заливки бинарников, хотя утилита после прошивки написала, что всё прошло успешно. Нет никаких гарантий. Можно ошибится с адресом или выбрать не тот бинарник. Поэтому если вы планируете использовать ESP8266 в реальных проектах, лучше заказывать их с запасом, стоят недорого.

В Интернете не раз проскакивала информация, что ESP-8266 невозможно вывести из строя кривой прошивкой. Мне удавалось. 🙂 После этого чип даже при повторном переводе в режим заливки образа не откликается на запросы. Пробовал скорость и 9600 и 115200 использовать и разные другие шаманства со всеми возможными утилитами.

Troubleshooting

Если после прошивки ESP-8266 не получается подключиться к модулю на скорости 115200, нужно попробовать скорость 9600. В некоторых прошивках эта скорость выставлена по-умолчанию.

В некоторых случаях из-за качества соединений могут возникать проблемы с синхронизацией. Одно из решений — уменьшить скорость с 115200 до 9600:

  • AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>
  • AT+UART_DEF=9600,8,1,0,0
  • AT+UART_DEF=115200,8,1,0,3

В некоторых случаях при переходе на другую скорость отклики от модуля в терминальной программе становятся очень медленными. Пока не разобрался с чем это связано. Помогает сброс к заводским настройкам командой AT+RESTORE.

Статьи

  • https://www.espressif.com/en/products/hardware/esp8266ex/resources — ресурсы компании-разработчика ESP-8266
  • https://bbs.espressif.com/ — официальный форум компании-разработчика ESP-8266.
  • https://www.allaboutcircuits.com/projects/flashing-the-ESP-01-firmware-to-SDK-v2.0.0-is-easier-now/ — самая свежая статья на тему.
  • https://www.allaboutcircuits.com/projects/update-the-firmware-in-your-esp8266-wi-fi-module/ — предыдущая версия статьи того-же автора.
  • https://radioprog.ru/post/212 — статья на русском во многом перепечатка предыдущих статей. 🙂
  • https://www.electronicshub.org/update-flash-esp8266-firmware/ — свежая статья по теме.
  • https://www.esp8266.com/viewtopic.php?t=12440 — видео со ссылками.
  • https://github.com/espressif/ESP8266_NONOS_SDK/blob/master/documents/EN/%20Partition%20Table.md — Partition table — адреса размещения бинарей.
  • https://os.mbed.com/users/sschocke/code/WiFiLamp/wiki/Updating-ESP8266-Firmware — использование неофициального прошивальщика XTCOM_UTIL.
  • Прошивальщик от NodeMCU.
  • Прошивальщик от NodeMCU и пример работы с ним.

Spread the love

Запись опубликована в рубрике IT tools, IT рецепты с метками Aliexpress, ESP8266, IoT. Добавьте в закладки постоянную ссылку.

ESP8266 прошивка AT-espressif

Вариант прошивки интерпретатора AT-команд.

Очистим Flash память модуля (у нас ESP8266-01):

esptool.py -p /dev/ttyUSB0 erase_flash
esptool.py v2.8
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 84:f3:eb:68:8e:9a
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 0.0s
Hard resetting via RTS pin...

Скачайте архив ESP firmware.

В папке ESP8266_NonOS_AT_Bin_V1.7.4/ESP8266_NonOS_A.7.4/bin/at есть файл README.md:

# Notice: 
AT firmware becomes larger since it supports more functions. So, we provide two firmwares here:

* 1024+1024: Normal AT, which is compiled from ESP8266_NONOS_SDK/examples/at, and uses mbedTLS lib.
* 512+512: Nano AT, which is compiled from ESP8266_NONOS_SDK/examples/at_nano, and uses SSL lib that supports less cipher suites.
It is suggested to use normal AT(1024+1024), if your flash size is 2MB or larger.

# BOOT MODE
## download

### Flash size 8Mbit: 512KB+512KB
    boot_v1.2+.bin              0x00000
    user1.1024.new.2.bin        0x01000
    esp_init_data_default.bin   0xfc000
    blank.bin                   0x7e000 & 0xfe000


### Flash size 16Mbit-C1: 1024KB+1024KB
    boot_v1.2+.bin              0x00000
    user1.2048.new.5.bin        0x01000
    esp_init_data_default. bin   0x1fc000
    blank.bin                   0xfe000 & 0x1fe000

# NON-BOOT MODE
## download
    eagle.flash.bin              0x00000
    eagle.irom0text.bin          0x10000
    blank.bin
        Flash size 8Mbit:        0x7e000 & 0xfe000
        Flash size 16Mbit:       0x7e000 & 0x1fe000
        Flash size 16Mbit-C1:    0xfe000 & 0x1fe000
        Flash size 32Mbit:       0x7e000 & 0x3fe000
        Flash size 32Mbit-C1:    0xfe000 & 0x3fe000
    esp_init_data_default.bin    
        Flash size 8Mbit:        0xfc000
        Flash size 16Mbit:       0x1fc000
        Flash size 16Mbit-C1:    0x1fc000
        Flash size 32Mbit:       0x3fc000
        Flash size 32Mbit-C1:    0x3fc000
 
## compile
    modify eagle.app.v6.ld, as
    irom0_0_seg :                         org = 0x40210000, len = 0x6C000
    

> NOTICE: UPDATE is not supported in non-boot mode; 4Mbit Flash is not supported in non-boot mode;

# Update steps
1. Make sure TE(terminal equipment) is in sta or sta+ap mode

    AT+CWMODE=3
    OK

2.Make sure TE got ip address

    AT+CWJAP="ssid","12345678"
    OK
    
    AT+CIFSR
    192.168.1.134

3.Let's update

    AT+CIUPDATE
    +CIPUPDATE:1    found server
    +CIPUPDATE:2    connect server
    +CIPUPDATE:3    got edition
    +CIPUPDATE:4    start start
    
    OK

> NOTICE: If there are mistakes in the updating, then break update and print ERROR.

Нас интересует информация из секции # BOOT MODE ### Flash size 8Mbit: 512KB+512KB, так как на нашем модуле ESP8266-01 8 Мбит = 1 Мбайт Flash памяти.

# BOOT MODE
## download

### Flash size 8Mbit: 512KB+512KB
    boot_v1.2+.bin              0x00000
    user1.1024.new.2.bin        0x01000
    esp_init_data_default.bin   0xfc000
    blank.bin                   0x7e000 & 0xfe000

Загрузим файлы boot_v1. 7.bin, user1.1024.new.2.bin, esp_init_data_default_v08.bin, blank.bin по указанным выше адресам:

ESP8266_NonOS_AT_Bin_V1.7.4/ESP8266_NonOS_AT_Bin_V1.7.4/bin$ esptool -p /dev/ttyUSB1 write_flash -fm dio -ff 40m -fs 1MB 0x00000 boot_v1.7.bin 0x01000 at/512+512/user1.1024.new.2.bin 0xfc000 esp_init_data_default_v08.bin 0x7e000 blank.bin 0xfe000 blank.bin
esptool.py v2.1
Connecting........_____....._
Detecting chip type... ESP8266
Chip is ESP8266
Enabling default SPI flash mode...
Configuring flash size...
Erasing flash...
Flash params set to 0x0220
Took 0.24s to erase flash block
Wrote 4096 bytes at 0x00000000 in 0.4 seconds (73.2 kbit/s)...
Erasing flash...
Took 4.09s to erase flash block
Wrote 413696 bytes at 0x00001000 in 45.2 seconds (73.1 kbit/s)...
Erasing flash...
Took 0.18s to erase flash block
Wrote 1024 bytes at 0x000fc000 in 0.1 seconds (73.2 kbit/s)...
Erasing flash...
Took 0.21s to erase flash block
Wrote 4096 bytes at 0x0007e000 in 0. 4 seconds (82.0 kbit/s)...
Erasing flash...
Took 0.18s to erase flash block
Wrote 4096 bytes at 0x000fe000 in 0.4 seconds (85.4 kbit/s)...

Leaving...
Hard resetting...

Не забываем своевременно нажимать RESET и Prog (см. статью Esptool).

Проверим работоспособность в терминале CuteCom (см. статью CuteCom монитор порта). Сначала на скорости 74880 после нажатия кнопки RESET:

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

load 0x40100000, len 2592, room 16 
tail 0
chksum 0xf3
load 0x3ffe8000, len 764, room 8 
tail 4
chksum 0x92
load 0x3ffe82fc, len 676, room 4 
tail 0
chksum 0x22
csum 0x22

2nd boot version : 1.7(5d6f877)
SPI Speed : 40MHz
SPI Mode : DIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

correct flash map
V2
Mo
,<0x95><0xff>rf cal sector: 251
freq trace enable 0
rf[112] : 00
rf[113] : 00
rf[114] : 01

SDK ver: 3. 0.4(9532ceb) compiled @ May 22 2020 16:26:04
phy ver: 1156_0, pp ver: 10.2

<0xa2><0xd4><0xaa>TWT

Затем на скорости 11520 даём команду AT+GMR:

AT+GMR
AT version:1.7.4.0(May 11 2020 19:13:04)
SDK version:3.0.4(9532ceb)
compile time:May 27 2020 10:12:17
Bin version(Wroom 02):1.7.4
OK

ОК, ОК, ОК, ну совсем свежий софт!

<<< Edragon, ESP firmware Ω ESP8266-01 Web-сервер >>>

Прошивка и запуск модуля ESP8266

Twitter

SocButtons v1.5

Для начала необходимо определить сколько памяти установлено на модуле ESP8266.  Встречаются варианты модулей, с установленной памятью 512 кбайт(4 мегабита) , а так же 4мбайт(32 мегабита). Редко, но попадаются с флеш памятью 1 мбайт(8 мегабит). Почти все разновидности ESP-12 и новые ESP-07 имеют на борту 4 мегабайта. Объем памяти можно определить по маркировке flash чипа, посмотреть в программе Flash Download Tool или на вкладке /debug. Маркировка имеет вид 25QXX, где XX — объем в мегабитах, например 25Q32 имеет на борту 32 мегабита=4 мегабайта.

Определение размера памяти по вкладке ip_adr/debug:

Вкладка debug содержит разную полезную информацию, в том числе и реальный размер чипа флеш памяти в строке Flash real size, а так же размер памяти, установленный в прошивающей программе Flash set size, который важен для правильной поддержки OTA.

Если у вас нет купленых ключей, то прошивку можно скачать на страничке проекта, где доступны2 облегченных варианта прошивки:

-Вариант с поддержкой OTA с объемом памяти чипа 1мбайт.  Данная прошивка прошивается и в модули и с бОльшим объемом flash. Необходимо обязательно выбирать в прошивающей программе размер памяти 1мбайт !! Модули с 512кб не поддерживаются !!

-Вариант без поддержки OTA. Подходит для любого объема flash памяти. Необходимо обязательно выбирать в прошивающей программе размер памяти 512кбайт !!

Возможность дальнейшего обновления прошивки по OTA доступна только у кого есть активированные ключи !

Прошивку можно собрать так же в конструкторе прошивки , где необходимо выбрать настройки для поддержки OTA и объема flash 1 мегабайт.

При использовании OTA и с объемом 512кб невозможно одновременно использовать множество опций конструктора, а так же использовать новые SDK, т.к. прошивка в модуль не помещается !!

Если у вас имеются проблемы со стартом прошивки, то обязательно смотрим ниже абзац про решение проблем с прошивкой !

Подключение модуля для прошивки

Для прошивки ESP8266 необходим USB-UART переходник или Arduino. ESP8266 необходимо обеспечить напряжение питания 3.3в и током 200..300мА. Питание 3.3в от ARDUINO или от USB-UART подключать не рекомендуется — модуль может работать не стабильно из-за нехватки тока. Рекомендуется использовать стабилизатор вида 1117.

Подключение ESP8266 к USB-UART: Необходимо подключить общие выводы GND(минус). RX у USB-UART на TX ESP, TX у USB-UART на RX ESP. Подключаем так же источник питания 3.3в.

Подключение ESP8266 к Arduino: Необходимо подключить общие выводы GND(минус).RX у Arduino на RX ESP, TX у Arduino на TX ESP. Подключаем так же источник питания 3.3в. RESET у Arduina необходимо подключить к GND.

На модуле ESP8266 вывод CH_EN необходимо подключить к +3.3в для того, чтобы включить чип.

GPIO 0 на время программирования, перед включением питания необходимо подключить к GND(земля). После успешной прошивки GPIO 0 можно отключить от GND. Если на модуле выведен GPIO 15, то его необходимо подключить на GND через резистор 10кОм на постоянной основе !!

Прошивка модуля

Для начала необходимо установить драйвера для вашего USB-UART переходника или Arduinы.

Прошивка через Nodemcu Flasher: Устанавливаем на вкладке Advanced Параметр Flash size в соотвествии выбранным размером flash памяти (в байтах). Остальные параметры не трогаем. Указываем на вкладке Config путь на файл прошивки с адресом 0x0000. На вкладке Operation выбираем COM порт и жмем кнопку FLASH.

Прошивка через Flash download tool: Описание в разработке(Действия аналогичны).

Прошивка через esptool. Пример команды esptool.py —port /dev/ttyUSB0 write_flash -fs 8m 0x00000 esp8266.bin . где -fs 8m параметр нужен только для указания размера при одномегабайтовой прошивке.

Скорость COM порта рекомендуется ставить не выше 115200.

Запуск модуля

После успешной прошивки необходимо запустить режим safe mode, замкнув между собой RX и TX и перезапустив модуль или нажать 3 раза подрят (с интервалом нажатия около секунды) кнопку RESET на ESP8266. В эфире появится точка с именем homessmart , к которой можно подключится используя смартфон или ноутбук.

После успешного коннекта заходим по адресу http://192.168.4.1 . Настраиваем подключение на свой роутер на вкладке main веб интерфейса. Необходимо вбить в поля WiFi options данные своей точки доступа. Для подключения к роутеру выбираем режим «Station mode». После нажатия кнопки set ниже появится IP адрес, на который можно заходить внутри своей беспроводной сети.

Далее обновляем страницу и видим внизу IP адрес, на который уже можно будет заходить внутри Вашей локальной сети.

Тут же вы можете установить свой логин и пароль на странички настроек веб интерфейса. По умолчанию логин esp8266, пароль 0000. Длинна логина и пароля не более 8 символов. Пароль затребуется на все вкладки настроек. А при установленной опции «Full Security» и на все GET запросы управления. В режиме safe mode пароль не запрашивается !

На данной вкладке можно задать имя модулю, которое будет отображаться на главной и в системе flymon, а так же в топике на MQTT сервере.

 

Решение проблем с прошивкой

Иногда, после сторонних прошивок или мусора модуль может не запустится и необходимо выполнить дополнительные действия. Необходимо затереть flash память пустым бланком по адресу 0x00000. Если вы используйте прошивку с размером 1 мегабайт, то качаем этот бланк. Далее уже прошиваем саму прошивку снова.

У некоторых пользователей даже после зачистки бланком модуль не стартует или стартует только при установленном режиме 512 кб или 4мб, возможно это связано с низким качеством flash памяти или частичной её несовместимостью с чипом ESP8266. Обратите внимание, что если даже у вас получилось запустить прошивку в режиме 4мб, то обновление по OTA в таком режиме не пройдет — модуль не запустится после обновления. По некоторым сведениям от пользователей помогает замена чипа памяти.

Если на главной странице модуля выводится сообщение «Error flash size ! (code 0x1)«, то это значит была прошита прошивка 1мегабайт в режиме 512кб. При этом включается режим Safe Mode и возможны сбои в работе модуля из-за таких неверных настроек. Убедитесь, что на модуле установлен необходимый размер памяти — это видно на веб вкладке ИП_АДРЕС/debug в строке Flash real size. Режим объема памяти указывается в прошивающей программе.

Если на главной странице модуля выводится сообщение «Error flash size ! (code 0x2)«, то это модуль имеет всего 512кб flash памяти и это значит, что необходимо использовать прошивку без включенного режима 1 мегабайт или не использовать OTA. Можно так же перепаять микросхему flash памяти на более ёмкую.

ВАЖНО !!  Если модуль не может получить IP адрес. Висит постоянно статус connect , то рекомендуется вписать IP адрес вручную ниже. Для этого необходимо выбрать режим Static IP и вписать IP модуля и IP шлюза(IP роутера). После этого можно заходить на модуль уже внутри сети по IP адресу, который указали в настройках..

Сохранение настроек в файл

Настройки модуля можно сохранить в файл, исключая настройки WI-FI, состояния GPIO, список датчиков DS18B20. Файл необходимо скачать по адресу ИП_АДРЕС/configsave.bin . Записывается обратно в модуль через программатор по адресу 0x3C000 для 512кб прошивки, 0x7C000 — для 1мб. Настройки можно скачать и через esptool.py используя пример ниже подставив нужный адрес. 

Скачать настройки WI-FI можно по адресу ИП_АДРЕС/configsave.bin?pg=66 для 512кб, ИП_АДРЕС/configsave.bin?pg=130 для 1 мег. Скачать через esptool.py можно командой esptool.py read_flash 0x7E000 4096 mywifi_settings.bin для 512 кб (Для 1024кб адрес будет 0xfe000).

Полезные ссылки:

Видеоиструкция по настройке от Umka 

Обновите прошивку в вашем модуле Wi-Fi ESP8266

Цель и обоснование

Это вторая статья автора об интегральной схеме ESP8266, относительно новой микросхеме, включающей в себя полнофункциональный 32-разрядный RISC µC и встроенный модуль 802.11. b/g/n Wi-Fi. Первая статья описывает использование Arduino IDE для программирования ESP8266 и содержит важную справочную информацию, которая не будет повторяться здесь. Если вы не читали, пожалуйста.

В сети полно информации о 8266; на самом деле, может быть слишком много… неправильного типа. Разработчики IC, Espressif, по-видимому, решили не только передать производство на аутсорсинг, но и избежать прямого участия в линейке модулей ESP, в которых используется чип ESP8266. Вместо этого они предлагают информацию и услуги поддержки через форум для тех, у кого достаточно терпения и настойчивости, чтобы исследовать лабиринт. Путаницу усугубляет существование другого форума, который, несмотря на то, что он называется esp8266. com, похоже, не управляется Espressif. Кроме того, существует множество реселлеров, видеоблогеров и писателей, которые также предлагают информацию, которая варьируется от хорошей до запутанной и совершенно неправильной. 9Модули ESP 0005

доступны из различных источников, а встроенное ПО, содержащееся в чипах ESP8266 модулей, почти всегда устарело и часто имеет сомнительное происхождение. «Обновления» прошивки и инструменты, доступные из тех же источников, также иногда вызывают подозрения. Следовательно, целью этой статьи является документирование процедуры загрузки последней доступной прошивки непосредственно из Espressif и ее установки на ESP8266 с помощью инструмента прошивки, предоставленного Espressif.

Настройка оборудования

Чтобы обновить прошивку на любом ESP8266, необходимо, чтобы он был правильно запитан и подключен к ПК. Кроме того, должны быть предусмотрены средства сброса ИС и перевода ее в режим загрузки. Схематическая диаграмма и фотография ниже показывают рекомендуемую установку; обратите внимание, что цвета проводов на схеме соответствуют цветам проводов на фотографии. Как видите, он основан на модуле ESP-01, но те же соединения будут работать и с другими модулями, если используются те же входы/выходы ESP8266, как показано на схеме. Дополнительные сведения см. в этой статье.

 

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

 

 

Терминальная программа PuTTY

После завершения настройки оборудования следующим шагом будет включение ESP8266 и попытка связи с ним. Требуется простая терминальная программа, и следующая процедура использует PuTTY, бесплатную программу, доступную здесь. Вы можете использовать другую терминальную программу, но вам придется делать поправку на любые различия между ней и PuTTY.

Откройте PuTTY и щелкните переключатель Serial. Введите номер COM-порта (который должен быть меньше 10) и скорость передачи данных (которая, скорее всего, будет 115200 или 9600).

В небольшом окне «Сохраненные сеансы» введите ESP8266 и нажмите кнопку «Сохранить». Окно PuTTY должно быть похоже на изображение ниже.

 

 

Нажмите кнопку «Открыть». Должно открыться окно сеанса терминала PuTTY.

Включите Caps Lock на вашем ПК и введите AT, но не нажимайте Enter. Вы должны увидеть AT в окне терминала PuTTY. Если вы этого не сделаете, возможно, вы выбрали неправильный COM-порт или неправильную скорость передачи данных. Закройте PuTTY и начните снова с начала этого раздела. Допустимые скорости передачи: 9600, 19200, 38400, 74880, 115200, 230400, 460800 и 921600; попробуйте каждый по очереди, пока не найдете тот, который работает.

Когда вы увидите AT в окне терминала PuTTY, удерживая нажатой клавишу Ctrl, нажмите клавишу M, а затем клавишу J. Отпустите клавишу Ctrl. Вы должны увидеть OK в окне терминала PuTTY, как показано на рисунке ниже.

 

 

Обратите внимание, что если вы допустили опечатку в окне сеанса терминала, исправить ошибку может оказаться невозможным. Вместо того, чтобы пытаться отредактировать свою ошибку, часто лучше просто, удерживая нажатой клавишу Ctrl, нажать клавишу M, а затем клавишу J, что приведет к появлению сообщения об ошибке. Затем вы можете начать снова и ввести правильный ввод.

Когда вы видите это первое сообщение OK, вы преодолели большое препятствие. Тогда вы знаете, что ваше оборудование настроено правильно, модуль ESP работает, вы выбрали правильный COM-порт и правильную скорость передачи данных. Закройте окно сеанса терминала PuTTY и нажмите OK, когда PuTTY спросит, уверены ли вы.

Теперь снова откройте PuTTY, выберите сохраненный сеанс ESP8266 и нажмите кнопку «Загрузить». Это должно поместить ваши ранее определенные настройки COM-порта и скорости передачи данных в соответствующие окна. Нажмите кнопку «Открыть», и откроется новое окно сеанса терминала PuTTY.

Включите Caps Lock на вашем ПК и введите AT, но не нажимайте Enter. Вы должны увидеть AT в окне терминала PuTTY. Введите знак +, а затем GMR. Когда вы увидите AT+GMR в окне терминала PuTTY, удерживая нажатой клавишу Ctrl, нажмите клавишу M, а затем клавишу J. Отпустите клавишу Ctrl. Вы должны увидеть информацию о прошивке ESP8266 в окне терминала PuTTY, как показано на рисунке ниже.

 

 

В первой строке выше вы видите введенную вами команду AT+GMR. Как вы, возможно, знаете или уже догадались, схема команд, которую вы используете для связи с ESP8266, называется «набором AT-команд», потому что все команды начинаются с букв «AT».

К сожалению, существует множество различных версий наборов AT-команд; все они содержат одни и те же команды, но есть много AT-команд, которые не являются стандартными среди всех наборов AT-команд. Даже в сообществе ESP8266 существует несколько версий. Вторая строка выше указывает, что это конкретное устройство 8266 запрограммировано микропрограммой, использующей AT-команды версии 0.25.0.0. Где-то есть документ, определяющий команды, включенные в версию 0.25.0. 0, но без этого документа вы должны методом проб и ошибок определить, какие AT-команды работают. Это в лучшем случае очень утомительный процесс, но, к счастью, есть решение этой дилеммы, которое вскоре будет объяснено.

В третьей строке указана версия Software Development Kit (SDK), которая использовалась для этого конкретного ESP8266, как версия 1.1.1. Каждый SDK также включает набор AT-команд, который является частью микропрограммы и подходит для управления этой микропрограммой. Якобы AT версии 0.25.0.0 работает с SDK версии 1.1.1. Но все же нужен документ, описывающий AT версии 0.25.0.0, чтобы знать, какие команды включены. Есть лучший способ, описанный в следующем разделе этой статьи, но прежде чем идти туда, попробуйте другую AT-команду, чтобы посмотреть, что произойдет.

Включите Caps Lock на вашем ПК и введите AT+CWLAP. Когда вы увидите AT+CWLAP в окне терминала PuTTY, удерживая нажатой клавишу Ctrl, нажмите клавишу M, а затем клавишу J. Отпустите клавишу Ctrl. Через несколько секунд окно терминала должно выглядеть примерно так, как на фото ниже.

 

 

AT+CWLAP дал команду ESP8266 составить список всех точек доступа Wi-Fi в пределах своего диапазона. В случае выше были найдены две точки доступа: одна называется «ATT936″, а другой называется «tracecom 2.4». Ваши результаты, конечно, будут отличаться и должны включать вашу собственную сеть Wi-Fi, а также сети любого из ваших ближайших соседей.

Закройте окно сеанса терминала PuTTY и нажмите «ОК», когда PuTTY спросит, уверены ли вы. . Это ESP Flash Download Tool, и он доступен здесь. Загрузите, распакуйте и установите последнюю версию на свой компьютер; на момент написания этой статьи это FLASH_DOWNLOAD_TOOLS_v2.4_1509.24.рар.

Запустите инструмент, и вы должны увидеть два открытых окна: окно графического интерфейса с местами для ввода информации и окно, похожее на терминал, в котором регистрируются предпринятые действия.

 

 

 

Следует отметить несколько вещей, но это не повод для беспокойства.

  • Окно графического интерфейса определяется как V2.3, а окно журнала — как V2.4. По-видимому, окно GUI неправильно помечено.
  • COM-порт и скорость передачи в окне графического интерфейса могут содержать данные.
  • Поля адреса окна GUI могут содержать данные.
  • Окно журнала может содержать данные.

Получение последней версии прошивки

У Espressif есть страница, на которой размещаются последние доступные прошивки. Перейдите на bbs.espressif.com, щелкните запись SDK в разделе «Загрузки», а затем нажмите «последний выпуск» в разделе «Объявления». На сегодняшний день, 28 октября 2015 г., вы увидите страницу, содержащую следующее.

 

 

Последний выпуск Non-OS SDK (Software Development Kit) — это то, что вам нужно, и, казалось бы, вы можете щелкнуть прямо под «Последняя версия: 1.4.0» и получить последнюю версию. . Но это не совсем так; обратите внимание, что доступен патч, обозначенный как esp_iot_sdk_v1. 4.1_15_10_22. На самом деле это не патч; это исправленная версия версии 1.4.0, выпущенная 22 октября 2015 года. Вы хотите это и бин-файлы AT_v0.50. Нажмите на каждый из них по очереди и загрузите файлы; вы можете сохранить их где угодно, но они прекрасно хранятся в папке «Загрузки».

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

Вы могли заметить, что есть раздел для скачивания документов. Все они содержат хорошую информацию, но иногда бывают существенные потери при переводе с китайского на английский. На данный момент не забудьте получить последние версии ESP8266 AT Instruction Set и Espressif IOT SDK User Manual; оба в настоящее время находятся в версии 1.4.

Установка микропрограммы

Запустите средство загрузки флэш-памяти ESP и убедитесь, что ни один из флажков в левом верхнем углу окна графического интерфейса не установлен. Введите используемый вами COM-порт и скорость передачи данных 115 200 в полях в нижней части окна. Обратите внимание, что по мере ввода данных они записываются в окно журнала.

Включите установку программирования ESP и подключите ее к компьютеру. Нажмите и удерживайте кнопку Reset, а затем нажмите и удерживайте кнопку Flash. Отпустите кнопку Reset, а затем отпустите кнопку Flash. Нажмите кнопку СТАРТ в окне графического интерфейса средства загрузки флэш-памяти. Инструмент загрузки флэш-памяти должен проверить ESP8266 в вашей настройке и создать отчет, аналогичный изображениям, показанным ниже. Нажмите и отпустите кнопку сброса в настройках программирования, чтобы выйти из режима загрузки ESP8266 и возобновить нормальную работу.

Обратите внимание, что окно графического интерфейса теперь содержит информацию о ESP8266, включая размер флэш-памяти (в примере 8 Мбит), частоту кристалла (в примере 26 МГц) и два MAC-адреса. адреса для чипа. Такая же информация содержится в окне журнала.

Затем щелкните поле в окне графического интерфейса с надписью «SpiAutoSet», после чего инструмент загрузки автоматически выберет правильный размер флэш-памяти и частоту кристалла.

Теперь вам нужно выбрать файлы для установки в ESP8266 и установить начальный адрес памяти для каждого файла. Для обновления чипа ESP необходимо правильно установить четыре файла. Откройте руководство пользователя Espressif IOT SDK и найдите раздел о записи изображений во флэш-память. В версии 1.4 руководства он начинается на странице 20. Затем найдите часть, описывающую версию, поддерживающую облачное обновление (FOTA), и в этой части найдите таблицу, относящуюся к размеру флэш-памяти в вашем ESP8266. В примере размер флэш-памяти составляет 8 Мбит, что соответствует 1024 КБ, поэтому в таблице 2 на странице 25 руководства содержится информация, необходимая для примера. См. рисунок ниже.

 

 

Необходимы четыре файла: esp_init_data_default. bin, Blank.bin, boot.bin и файл user1.bin. Адрес, по которому должен быть установлен каждый файл, указан рядом с именем файла. Первые три необходимых файла находятся в папке esp_iot_sdk_v1.4.1_15_10_22, которую вы ранее скачали с bbs.espressif.com, а четвертый находится в bin-файлах AT_v0.50. Перейдите туда, где находятся эти загруженные файлы, и скопируйте каждый из них в одно из полей в верхней части окна графического интерфейса Flash Download Tool; введите правильный адрес для каждого файла в поле рядом с именем файла. Выполните следующие действия для каждого файла.

  • Щелкните внутри файла «установить путь к прошивке».
  • Нажмите кнопку … справа от пробела.
  • Перейдите к нужному файлу и щелкните файл. Графический интерфейс автоматически введет имя файла в пробел.
  • Введите правильный адрес (из таблицы) для каждого файла.

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

Теперь установите четыре флажка слева от имени каждого файла. Окно графического интерфейса Flash Download Tool должно выглядеть так, как показано на рисунке ниже. Дважды проверьте адреса по таблице.

 

 

В настройках программирования ESP нажмите и удерживайте кнопку сброса, а затем нажмите и удерживайте кнопку Flash. Отпустите кнопку Reset, а затем отпустите кнопку Flash. Нажмите кнопку СТАРТ в окне графического интерфейса Flash Download Tool. Должна начаться загрузка, и ее ход должен отображаться в окне графического интерфейса Flash Download Tool и в окне журнала, как показано ниже.

 

 

Как показано выше, успешная операция флэш-памяти приведет к отправке всех файлов на ESP8266 и закрытию COM-порта.

Проверка успешной прошивки

По завершении операции прошивки закройте средство загрузки Flash. Отключите питание от установки программирования ESP, а затем снова подключите питание.

Повторно откройте PuTTY, выберите сохраненный сеанс ESP8266 и нажмите кнопку «Загрузить». Это должно поместить ваши ранее определенные настройки COM-порта и скорости передачи данных в соответствующие окна. Нажмите кнопку «Открыть», и откроется новое окно сеанса терминала PuTTY.

Включите Caps Lock на вашем ПК и введите AT, но не нажимайте Enter. Вы должны увидеть AT в окне терминала PuTTY. Введите знак +, а затем GMR. Когда вы увидите AT+GMR в окне терминала PuTTY, удерживая нажатой клавишу Ctrl, нажмите клавишу M, а затем клавишу J. Отпустите клавишу Ctrl. Вы должны увидеть информацию о прошивке ESP8266 в окне терминала PuTTY, как показано на рисунке ниже.

 

 

Как видите, в ESP8266 явно присутствует новая прошивка. Он был обновлен с версии SDK 1.1.1 до версии SDK 1.4.0. Кроме того, также была установлена ​​соответствующая версия 0.50.0.0 набора AT-команд, которая задокументирована в ESP8266 AT Instruction Set, Version 1.4.

Закройте окно сеанса терминала PuTTY и нажмите OK, когда PuTTY спросит, уверены ли вы.

Последние слова

С помощью пары практических занятий весь процесс прошивки можно завершить за гораздо меньшее время, чем требуется для прочтения этой статьи. Как только это будет сделано, вы можете быть уверены в том, что находится внутри вашего 8266, и можете сосредоточиться на своем проекте Wi-Fi вместо того, чтобы «догадываться и надеяться» на прошивку ESP и необходимый набор AT-команд.

Следующая статья в серии: Как обновить прошивку ESP-01 до улучшенного SDK v2.0.0

 

Попробуйте этот проект сами! Получите спецификацию.

Обновление прошивки ESP8266

Для работы с RemoteXY модуль ESP8266 должен иметь прошивку с поддержкой AT-команд не ниже v0.40. Для проверки версии прошивки, а также для обновления прошивки необходимо подключить модуль к компьютеру через последовательный порт. Модуль можно подключить как через плату Arduino, так и через переходник USB-UART.

Подключение через плату Arduino

При использовании Arduino в качестве преобразователя ATmega устанавливается в режим сброса, и активен только внутренний преобразователь USB-UART. Для этого контакт RESET соединяется с землей. Пины TX и RX подключены к ESP8266 один к одному, а не крест-накрест, как если бы они были подключены к контроллеру в режиме работы.


Подключение через адаптер USB-UART

Адаптер должен иметь выходное питание 3.3В для ESP8266. Этот выход должен обеспечивать необходимый ток не менее 200 мА.

Контакт CPIO0 ESP8266 определяет режим работы модуля. Когда этот контакт не подключен, модуль работает в обычном режиме и отвечает за AT-команды. Когда этот контакт подключен к земле, модуль работает в режиме обновления прошивки. Модуль перейдет в режим обновления прошивки, когда вывод CPIO0 будет подключен к земле во время включения питания. Если этот контакт соединить с землей, когда модуль работает, модуль не перейдет в режим обновления прошивки.

Проверить текущую версию прошивки

Для отправки AT-команд и просмотра ответов необходимо использовать любой программный монитор последовательного порта. Очень подходит инструмент последовательного порта в Arduino IDE. Монитор последовательного порта необходимо настроить таким образом, чтобы командная строка отправлялась с конечными символами NL и CR. Скорость передачи по умолчанию 115200 бод.

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

Проверить текущую версию прошивки можно AT-командой: AT+GMR. Пример ответа модуля:


АТ+ГМР

AT версия: 0.40.0.0 (8 августа 2015 г., 14:45:58)
SDK версии: 1.3.0
Ai-Thinker Technology Co., Ltd.
Сборка: 1.3.0.2 11 сен 2015 11:48:04
ОК

Также необходимо знать объем флеш памяти модуля ESP, от его размера зависит адрес загрузки прошивки. В данном руководстве описывается обновленная прошивка модуля с объемом флэш-памяти 8Мбит (512КБ+512КБ) или 16Мбит (1024КБ+1024КБ), как наиболее распространенная. Размер флэш-памяти можно узнать, если отправить AT-команду из сброса: AT+RST.


AT+RST

ОК

8 января 2013 г., первая причина: 2, режим загрузки: (3,1)

загрузка 0x40100000, длина 1396, комната 16
хвост 4
контрольная сумма 0x89
загрузка 0x3ffe8000, длина 776, комната 4
хвост 4
контрольная сумма 0xe8
загрузка 0x3ffe8308, длина 540, комната 4
хвост 8
контрольная сумма 0xc0
csum 0xc0

2-я версия загрузки: 1.4(b1)
  SPI Скорость      : 40 МГц
  Режим SPI       : DIO
  Размер SPI Flash и сопоставление: 8 Мбит (512 КБ + 512 КБ)
перейти к запуску user1 @ 1000

#т#n't использовать данные памяти rtc
slЏ‚rlМя
Ai-Thinker Technology Co., Ltd.

готов

Инструмент для обновления прошивки

Для обновления прошивки необходимо скачать специальное приложение-инструмент и саму прошивку. Приложение для обновления прошивки ESP8266 будет использовать Flash Download Tools v2. 4 с официального сайта Espressif Systems. Ссылка на страницу загрузки: http://espressif.com/en/products/hardware/esp8266ex/resources. Вы должны перейти в раздел «Инструменты».

Прошивка

Прошивку также можно скачать с официального сайта. Ссылка на страницу загрузки на официальном сайте: http://espressif.com/en/products/hardware/esp8266ex/resources. Вам необходимо перейти в раздел «SDKs & Demos» и скачать прошивку ESP8266 NONOS SDK версии не ниже v1.3.0. Эта версия прошивки стала поддерживать AT-команды v0.40.

Все загруженные файлы необходимо распаковать и поместить в каталог, где полный путь к файлу содержит только латинские символы, т.е. символы без языковой локализации.

Настройки

Запустить приложение Flash Download Tools v2.4 (одноименный .exe-файл). В открывшемся окне необходимо правильно выбрать загружаемые файлы и настроить режим подключения.

Загружаемые файлы находятся в папке «bin» с файлами прошивки. Для каждого файла необходимо указать действующий адрес загрузки. Для выбора файлов и адресов назначения используйте следующую таблицу:

Установите следующие настройки:

  • SPIAutoSet — установить;
  • КристаллФрек — 26M;
  • FLASH SIZE – 8Мбит или 16Мбит в зависимости от объема флэш-памяти;
  • ПОРТ COM – выберите порт, который подключен к ESP;
  • СКОРОСТЬ БОД – 115200

Для запуска процесса обновления прошивки необходимо нажать кнопку «СТАРТ».

Последовательность действий для обновления прошивки ESP8266

1. Подключите модуль ESP к компьютеру согласно схеме подключения в этой статье.

2. Запустите монитор последовательного порта. Отправьте AT-команды AT+RST и AT+GMR для определения текущей версии прошивки и объема памяти модуля. Этот шаг также позволяет проверить правильность подключения модуля.

3. Запустить приложение для обновления прошивки Flash Download Tools, правильно настроить загружаемые файлы и адреса, правильно выставить настройки.

4. Отключите питание модуля ESP8266.

5. Соедините контакт CPIO0 с землей.

6. Включите питание модуля ESP8266.

7. Нажмите кнопку «СТАРТ» в приложении для обновления прошивки.

8. Дождаться окончания обновления прошивки. По окончании процесса появляется надпись FINISH зеленого цвета.

9. Выключите питание модуля ESP8266 и отсоедините землю от контакта CPIO0.

10. Включите модуль и запустите монитор последовательного порта. Убедитесь, что модуль и новая версия прошивки работают, отправив AT-команду AT+GMR.

Как обновить прошивку ESP8266

Это второй проект на ESP8266, и в этом проекте я покажу вам, как прошить официальную прошивку Espressif в ESP8266 с помощью Arduino. Этот проект также можно использовать, если вы хотите обновить прошивку ESP8266 до последней версии.

[adsense1]

В предыдущем проекте ESP8266 мы видели, как написать собственную программу на ESP8266 с помощью Arduino IDE и управлять светодиодом с помощью контактов GPIO. В том же проекте я упомянул, что по умолчанию модуль ESP8266 ESP-01 поставляется с прошивкой AT Command.

Но если мы напишем собственную программу для доступа к выводам GPIO (как мы это делали в предыдущем проекте), существующая прошивка будет полностью стерта, а новая программа будет записана.

Несмотря на то, что WiFi-модуль ESP8266 производится компанией Espressif Systems, SoC используется многими сторонними производителями для реализации своих собственных модулей. В моем случае у меня есть модуль ESP8266 ESP-01 от AI-Thinker.

Это приводит к множеству вопросов, например, является ли прошивка оригинальной или нет, является ли прошивка актуальной или нет и многими другими.

Итак, в этом проекте мы будем прошивать официальную прошивку Espressif Systems для модуля ESP8266, используя официальный ESP8266 Flasher Tool, предоставленный Espressif Systems, который представляет собой ESP8266 FLASH DOWNLOAD TOOL, и Arduino UNO в качестве USB-последовательного интерфейса.

Прошивка ESP8266 может быть установлена ​​по двум причинам: если вы хотите обновить прошивку ESP8266 до ее последней версии или полностью установить новую прошивку (в случае, если она была перезаписана какой-либо программой). Итак, приступим.

[adsense2]

Outline

Настройка оборудования для обновления прошивки ESP8266

Прежде чем приступить к процессу обновления прошивки SoC ESP8266, важно настроить WiFi-модуль ESP8266 в режиме загрузки или режиме программирования.

Если вы помните, в проекте НАЧАЛО РАБОТЫ С ESP8266 И ARDUINO я упоминал, что контакты GPIO0 и RST модуля ESP8266 играют важную роль в его настройке в режиме загрузки.

Здесь мы реализуем ту же настройку. Итак, связи следующие.

  • VCC до 3,3 В
  • Земля на Землю
  • TX к TX Arduino UNO
  • RX-RX Arduino UNO (через преобразователь уровней)
  • GPIO0 на землю
  • RST к GND через кнопку
  • CH_PD на 3,3 В

Принципиальная схема для прошивки прошивки в ESP8266

На следующем изображении показана принципиальная схема для включения режима прошивки в ESP8266. Чтобы перевести SoC ESP8266 в режим мигания, вывод GPIO0 должен быть подключен к GND, а мгновенный импульс GND — к выводу RST.

Необходимые компоненты

  • Arduino UNO         
  • ESP8266 ESP-01 (любой модуль ESP8266)
  • Резистор 1 кОм
  • Резистор 2,2 кОм
  • Кнопка
  • Переключатель SPDT
  • Соединительные провода
  • Мини-макет

ВАЖНЫЕ ПРИМЕЧАНИЯ

  • Прежде чем продолжить, обратитесь к предыдущему проекту по настройке Arduino IDE и подготовке Arduino UNO к прошивке прошивки.
  • Я подключил контакт GPIO0 к GND напрямую. И после прошивки прошивки я отключил его от GND. Вы можете использовать переключатель SPDT для выполнения этого действия, то есть в одном положении GPIO0 подключен к GND, а в другом положении его можно использовать как GPIO.
  • ESP8266 не выдерживает 5В. Он должен быть подключен к 3,3 В. Даже контакт RX ESP8266 подключен через преобразователь уровней.

Проверка текущей версии прошивки

Перед установкой прошивки мы сначала проверим существующую прошивку в модуле ESP8266, используя последовательную связь. Для этого нам нужно отключить вывод GPIO0 от GND. *ВАЖНЫЙ*.

После выполнения соединений в соответствии с приведенной выше принципиальной схемой (и отключения GPIO0 от GND), подключите USB-кабель Arduino к компьютеру и откройте любое программное обеспечение для последовательного мониторинга. Я использую последовательный монитор Arduino. Вы можете использовать любое программное обеспечение, такое как Putty, Terminal и т. д.

В Arduino IDE выберите правильный COM-порт и откройте Serial Monitor. Установите скорость передачи данных на 115200 и выберите вариант Both NL и CR в последовательном мониторе. После этого нажмите кнопку RST ESP8266 на секунду и отпустите. Модуль ESP8266 перезагрузится и отобразит «готов» после того, как на последовательном мониторе появятся некоторые мусорные данные.

Чтобы проверить версию прошивки, вам нужно ввести следующую AT-команду и нажать «Отправить». Эта команда вернет версию прошивки модуля ESP8266. Все AT-команды должны быть в верхнем регистре.

AT+GMR

Если вы заметили, моя прошивка от Ai-Thinker Technology, производителя моего модуля ESP8266 ESP-01, и она довольно старая. Версия набора команд AT — 0.21.0.0, а версия SDK — 0.9.5.

Теперь я заменю эту прошивку на прошивку Espressif (производитель SoC ESP8266).

ПРИМЕЧАНИЕ : Убедитесь, что контакт GPIO0 подключен к GND, прежде чем продолжить.

Загрузка последней прошивки ESP8266

Существует два типа SDK или комплектов разработки программного обеспечения для ESP8266: SDK без ОС и SDK RTOS. Non-OS SDK, как следует из названия, не основан на какой-либо ОС. Используя этот SDK, вы можете скомпилировать IOT_Demo и AT-команды. С другой стороны, RTOS SDK основан на FreeRTOS.

Я буду использовать Non-OS SDK (ну, технически, файлы прошивки на основе Non-OS SDK). Файлы прошивки ESP8266 представлены в виде двоичных файлов, т. е. файлов .bin.

Теперь, поскольку я буду использовать только набор AT-команд ESP8266, я буду загружать только бин-файлы, связанные с AT-командами. Чтобы загрузить прошивку AT Commands для ESP8266, перейдите по официальной ссылке здесь или скачайте напрямую по этой ссылке .

Существуют другие версии прошивки для модуля ESP8266. Сначала попробуйте процедуру, упомянутую в этом проекте, и если вам это удастся, вы можете попробовать установить другую прошивку ESP8266. Другие прошивки можно скачать из раздела SDK по ссылке, указанной выше.

Загрузка инструмента для загрузки флэш-памяти ESP8266

Следующим шагом является загрузка инструмента для обновления прошивки ESP8266. Именно для этой цели компания Espressif Systems разработала небольшое программное обеспечение. Он называется ESP Flash Download Tool.

Чтобы загрузить средство загрузки встроенного программного обеспечения ESP8266, перейдите по ссылке по ссылке и в разделе «Инструменты» загрузите средства загрузки флэш-памяти ESP или вы можете напрямую загрузить ее с по этой ссылке .

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

Установка прошивки в ESP8266

Чтобы прошить прошивку в ESP8266, сначала откройте Flash Download Tool или Flasher Software ESP8266. На момент работы над этим проектом у меня стоит версия 3.6.2.2. Итак, открываем файл приложения ESPFlashDownloadTool_v3.6.2.2.

Затем вы получите различные варианты, такие как средство загрузки ESP8266, средство загрузки ESP8285, средство загрузки ESP32 и средство загрузки ESP32D2WD. Выберите средство загрузки ESP8266.

После открытия ESP8266 Flash Download Tool нужно выбрать файлы прошивки, которые нам нужны для установки. Вам нужно загрузить четыре файла по четырем разным адресам. Следующая таблица даст вам список файлов и их соответствующие адреса.

ПРИМЕЧАНИЕ. Этот список предназначен для сопоставления флэш-памяти встроенного ПО по беспроводной сети (FOTA) для модулей ESP8266 с 1 МБ флэш-памяти. Для других размеров флэш-памяти см. Руководство по началу работы с ESP8266 по этой ссылке.

Файл

Адрес во флэш-памяти

boot_v1.7.bin

0x00000

пользователь 1.1024.new.2.bin

0x10000

esp_init_data_default.bin

0xFC000

пустой.bin

0xFE000

В ESP8266 Download Tool во вкладке SPI Download выберите необходимые файлы в опции «Download Path Config», нажав на кнопку (…). Кроме того, добавьте соответствующие адреса в отведенное место.

После выбора четырех файлов и заполнения адресов установите частоту кристалла на 26 МГц (обычно это 26 МГц, но если ваша плата ESP8266 имеет другой кристалл, введите это значение). Далее выберите размер вспышки. Поскольку у меня встроенная флэш-память 1 МБ, я выбрал вариант размера флэш-памяти 8 Мбит (что равно 1 МБ).

Наконец, выберите правильный COM-порт и установите скорость передачи данных на 115200. Убедитесь, что все последовательные терминалы закрыты.

Перед началом прошивки убедитесь, что GPIO0 подключен к GND и подайте импульс LOW (нажмите кнопку Reset) на контакт RST.

Теперь нажмите кнопку СТАРТ. Должна начаться прошивка в ESP8266. Если вы заметили в ESP8266 Firmware Flash Tool, в тот момент, когда вы нажимаете START, вы получаете два MAC-адреса как AP и STA, а также информацию о модуле в разделе DETECTED INFO.

Если все пойдет хорошо, модуль ESP8266 должен быть обновлен новой прошивкой. Если есть какая-либо ошибка, отсоедините USB-кабель, подключите его еще раз и, нажав START, нажмите кнопку Reset на ESP8266.

Вы получите сообщение FINISH на инструменте, и после этого вы сможете закрыть инструмент. Отключите GPIO0 от GND и перезагрузите устройство. Откройте последовательный монитор Arduino еще раз и проверьте наличие новой прошивки.

ПРИМЕЧАНИЕ : Нажмите кнопку «Сброс» после открытия последовательного монитора.

Чтобы проверить версию прошивки, наберите AT+GMR и нажмите «Отправить». Вы получите ответ с номером версии AT и номером версии SDK. В моем случае новая версия набора AT-команд — 1.5.0.0, а версия SDK — 2.1.0.

В этом проекте вы увидели, как обновить/прошить прошивку в модуле ESP8266, используя официальную прошивку Espressif ESP8266.

Восстановление прошивки АТ на ESP8266

Большую часть времени я использую мини-платы для разработки Wemos D1 в сочетании с Arduino IDE, чтобы создать собственную прошивку для запуска непосредственно на чипе ESP8266. Но у меня также завалялось несколько голых модулей ESP-01 и ESP-12, и недавно я придумал план использовать один из них.

Конкретный проект требует очень хорошо контролируемой синхронизации АЦП, для чего я буду использовать обычную плату Arduino на базе ATmega328P. В этом проекте ESP8266 будет использоваться только для передачи данных по WiFi. Ни у моего ESP-01, ни у моего ESP-12 еще нет оригинальной прошивки AT, так как я экспериментировал с разными другими прошивками.

Здесь начинается проблема, поскольку мой план требовал восстановления моего ESP-12 до прошивки AT и использования библиотеки, такой как ESP8266wifi или WiFiEsp. Я понимаю, что раньше мне приходилось бороться с разными прошивками, поэтому этот пост предназначен для того, чтобы дать краткий обзор и оставить некоторые заметки для собственного использования в будущем.

Форм-фактор модуля

Микрочип ESP8266 поставляется на различных макетных платах с интерфейсом USB, таких как Wemos D1 Mini и плата NodeMCU, а также в виде голых модулей, таких как ESP-01, 02 и т. д. На этой странице вики-сайта ESP8266 представлен обзор всех модулей, а также сравнение некоторых необработанных модулей с некоторыми платами для разработки.

Модуль ESP-01:

Модуль ESP-12:

Емкость флэш-памяти

Помимо количества выводов GPIO, открытых каждым из модулей, еще одной важной характеристикой является объем их флэш-памяти. На веб-сайте AI-Thinker есть таблица со списком модулей, которая включает это. Модуль ESP-01 поставляется с флэш-памятью 512 КБ (старые модули) или 1 МБ (сейчас более распространено). Модуль ESP-12 поставляется с 4 МБ. Обратите внимание, что есть платы для разработки, такие как Wemos D1 mini pro, которые имеют даже больше.

Прошивка

Поскольку в настоящее время ESP8266 полностью поддерживается в среде разработки Arduino IDE, я предпочитаю разрабатывать собственную прошивку для ESP8266 с использованием C/C++, среды разработки Arduino и библиотек. Таким образом, наиболее запутанным аспектом ESP8266 для меня является то, что для него доступно несколько «стандартных» прошивок, которые я часто случайно путаю. К ним относятся

  • Прошивка AT, сравнимая с набором команд Hayes на старых модемах.
  • Микропрограмма NodeMCU, включающая интерпретатор LUA.
  • Микропрограмма MicroPython, включающая интерпретатор Python.
  • Прошивка Espruino, включающая интерпретатор JavaScript.

Для вариантов прошивки, которые включают интерпретатор Python или JavaScript, следует отметить, что существуют и другие версии от других компаний/проектов.

Проект NodeMCU более централизованно управляется/организуется и включает веб-сайт, на котором можно компилировать специализированные прошивки с поддержкой определенных аппаратных надстроек.

Восстановление прошивки AT

Чтобы прошить прошивку на ESP8266, вам нужно подключить его и перевести в правильный режим загрузчика. Для этого есть много онлайн-уроков, и я не буду здесь подробно останавливаться. Вам также понадобится программное обеспечение для записи новой прошивки, я использую исключительно esptool.py.

Пробовал разные варианты прошить свой ESP-12 оригинальной прошивкой, большинство из которых не помогло. Задача состоит в том, чтобы выяснить, какая прошивка совместима с моим конкретным модулем и в какие ячейки флэш-памяти записать разные части прошивки. В следующем разделе я опишу три вещи, которые работали, переходя от самых старых к самым последним версиям прошивки.

Следуя приведенным здесь инструкциям и используя довольно неясную версию прошивки, содержащуюся в одном двоичном файле отсюда, я успешно выполнил:

esptool.py --port /dev/tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x00000 v0.9.2.2\ AT\ Firmware.bin

Впоследствии я смог подключиться в терминальной программе со скоростью 9600 бит/с и получил

[System Ready, Vendor:www.ai-thinker. ком]
AT+GMR

0018000902

OK

Используя старую прошивку AT от самого Espressif с «Offical ESP8266 AT+ Commands» из их старого репозитория GitHub, я также смог заставить его работать с:

esptool.py --port /dev/ tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x00000 boot_v1.1.bin
esptool.py --port /dev/tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x01000 newest/user1.bin
esptool.py --port /dev/tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x7C000 esp_init_data_default. bin
esptool.py --port /dev/tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x7E000 Blank.bin

Впоследствии я смог подключиться в терминальной программе со скоростью 115200 бит/с и получил

готовых
AT+GMR

00200.9.4

OK

Руководство по началу работы с Espressif ESP8266 SDK содержит самую последнюю информацию о структуре флэш-памяти. Использование версии 2.2.1 из репозитория Espressif NONOS_SDK и

esptool.py --port /dev/tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x00000 boot_v1.2.bin
esptool.py --port /dev/tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x01000 at/512+512/user1.1024.new.2.bin
esptool.py --port /dev/tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x7C000 esp_init_data_bin_default_v05.
esptool.py --port /dev/tty.usbserial-FTG54BPS --baud 115200 write_flash --flash_mode dio 0x7E000 Blank.bin

У меня также был успех, и я смог подключиться к терминальной программе со скоростью 115200 бит/с. В результате был получен следующий ответ

ready
AT+GMR
AT версия: 1.6.2.0 (13 апреля 2018 г. 11:10:59)
SDK версия: 2.2.1 (6ab97e9)
время компиляции: 7 июня 2018 г. 19: 34:26
Версия Bin (Wroom 02): 1.6.2

У меня не получилось с выпуском 3.0 из репозитория Espressif NONOS_SDK. У него нет каталога «512+512», только каталог «1024+1024», который я не смог заставить работать на своем ESP-12. Предложения по выполнению этой работы приветствуются.

MicroPython — Python for microcontrollers

ESP8266 with 2MiB+ flash

Vendor: Espressif

Features: WiFi

Source on GitHub: esp8266/GENERIC

More info: Website

The following ежедневные сборки прошивки ESP8266 для плат с не менее 2 МБ флэш-памяти. У них есть последние функции и исправления ошибок, WebREPL не запускается автоматически, а отладка включена по умолчанию.

Примечание. Для версии 1.12-334 и новее (включая версию 1.13) требуется модуль ESP8266 с 2 МБ флэш-памяти или более, и по умолчанию используйте littlefs в качестве файловой системы. Когда при обновлении со старой прошивки сначала сделайте резервную копию файлов, а затем либо стереть всю флэш-память перед обновлением или выполнить после обновления uos.VfsLfs2.mkfs(bdev) .

OTA-сборки

Over-The-Air (OTA) сборки прошивки ESP8266 также предоставляются.

При первом использовании этой сборки нужно прошить один из «исходных образов» изображения с помощью esptool.py, как описано выше. После этого можно обновить прошивки по воздуху с помощью файла «OTA update» совместно с скрипт ота-клиента от yaota8266. Файлы «OTA update» имеют цифровую подпись. и будет работать только с предоставленными файлами «исходного изображения», и наоборот. (Примечание: эта функция находится в стадии разработки.)

Инструкции по установке

Запрограммируйте плату с помощью программы esptool. py, как описано в руководстве.

Микропрограмма

Выпуски

v1.19.1 (18.06.2022).bin [.эльф] [.карта] [Примечания к выпуску] (последняя)

v1.18 (2022-01-17) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.17 (2021-09-02) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.16 (2021-06-18) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.15 (2021-04-18) .bin [. эльф] [.карта] [Примечания к выпуску]

v1.14 (2021-02-02) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.13 (11 сентября 2020 г.) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.12 (20 декабря 2019 г.) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.11 (29 мая 2019 г.) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.10 (25 января 2019 г.) .bin [.эльф] [. карта] [Примечания к выпуску]

v1.9.4 (11 мая 2018 г.) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.9.3 (2017-11-01) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.9.2 (23 августа 2017 г.) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.9.1 (2017-06-12) .bin [.эльф] [.карта] [Примечания к выпуску]

v1.9 (2017-05-26) .bin [.эльф] [.карта] [Примечания к выпуску]

v1. 8.7 (2017-01-08) .bin [.эльф] [.карта] [Примечания к выпуску]

Ночные сборки

v1.19.1-446-ge6d351318 (25 сентября 2022 г.) .bin [.эльф] [.карта]

v1.19.1-443-g30e50ab19 (23 сентября 2022 г.) .bin [.эльф] [.map]

v1.19.1-439-gdb668742a (23 сентября 2022 г.) .bin [.эльф] [.map]

v1.19.1-437-g13c4470fd (2022-09-19) .bin [.эльф] [.map]

Прошивка (OTA-совместимая)

Релизы

v1.19.1 (18.06.2022).bin [.эльф] [. карта] [.ота] [Примечания к выпуску] (последняя)

v1.18 (2022-01-17) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

v1.13 (2020-09-02) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

v1.12 (20 декабря 2019 г.) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

v1.11 (2019-05-29).bin [.эльф] [.карта] [. ота] [Примечания к выпуску]

v1.10 (2019-01-25) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

v1.9.4 (11 мая 2018 г.) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

v1.9.3 (2017-11-01) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

v1.9.2 (23 августа 2017 г.) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

v1. 9.1 (11 июня 2017 г.) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

v1.9 (26 мая 2017 г.) .bin [.эльф] [.карта] [.ота] [Примечания к выпуску]

Ночные сборки

v1.19.1-446-ge6d351318 (25 сентября 2022 г.) .bin [.эльф] [.карта] [.ota]

v1.19.1-443-g30e50ab19 (23 сентября 2022 г.) .bin [.эльф] [.карта] [.ota]

v1.19.1-439-gdb668742a (23 сентября 2022 г.) .bin [.эльф] [.карта] [. ота]

v1.19.1-437-g13c4470fd (2022-09-19) .bin [.эльф] [.карта] [.ota]

Прошивка/загрузка прошивки MicroPython на ESP32 и ESP8266

В этом посте показано, как прошить прошивку MicroPython на платы ESP32/ESP8266 с помощью программного обеспечения uPyCraft IDE. Он работает в Windows, Linux и Mac OS X.

Прежде чем продолжить работу с этим учебным пособием, убедитесь, что вы следуете одному из следующих руководств по установке uPyCraft IDE на свой компьютер:

  • ПК с Windows — установите uPyCraft IDE
  • Mac OS X — установите uPyCraft IDE
  • Linux Ubuntu — установите uPyCraft IDE

Установив uPyCraft IDE на свой компьютер, вы можете легко прошить свои платы ESP32 или ESP8266 прошивкой MicroPython. Этот пост разделен на две части, читайте Часть 1 или Часть 2 в зависимости от вашей платы:

  • Часть 1 — ESP32
  • Часть 2 — ESP8266

Примечание : после установки прошивки MicroPython на ESP32 или ESP8266 вы можете вернуться и снова использовать Arduino IDE. Вам просто нужно загрузить код с помощью Arduino IDE. Затем, если вы хотите снова использовать MicroPython, вам необходимо прошить микропрограмму MicroPython.

[Часть 1 — ESP32] Загрузка и прошивка прошивки MicroPython на ESP32

Чтобы загрузить последнюю версию прошивки MicroPython для ESP32, перейдите на страницу загрузок MicroPython и прокрутите до раздела ESP32.

Вы должны увидеть аналогичную веб-страницу (см. рисунок ниже) с последней ссылкой для загрузки файла ESP32 .bin — например: esp32-20181007-v1.9.4-631-g338635ccc.bin .

Примечание: , если вы используете другую плату (например, PyBoard, WiPy или другую), перейдите на страницу загрузок MicroPython и загрузите нужную прошивку для своей платы.

Выбор последовательного порта

Перейдите в меню Инструменты > Серийный порт и выберите свой COM-порт ESP32 (в нашем случае это COM5).

Важно: , если вы подключаете плату ESP32 к компьютеру, но не можете найти порт ESP32, доступный в вашей IDE uPyCraft, это может быть одна из следующих двух проблем: 1.  драйверы USB отсутствуют или 2.  кабель USB без проводов передачи данных.

1. Если COM-порт вашего ESP не доступен, это часто означает, что у вас не установлены драйверы USB. Присмотритесь к микросхеме рядом с регулятором напряжения на плате и проверьте ее название.

Плата ESP32 DEVKIT V1 DOIT использует микросхему CP2102 .

Перейдите в Google и найдите свой конкретный чип, чтобы найти драйверы и установить их в свою операционную систему.

Драйверы CP2102 можно загрузить на веб-сайте Silicon Labs.

После их установки перезапустите uPyCraft IDE, и вы должны увидеть COM-порт в меню Tools .

2. Если у вас установлены драйверы, но вы не видите свое устройство, убедитесь, что вы используете USB-кабель с проводами для передачи данных.

USB-кабели от повербанков часто не имеют проводов для передачи данных (они предназначены только для зарядки). Таким образом, ваш компьютер никогда не установит последовательную связь с вашим ESP32. Использование подходящего USB-кабеля должно решить вашу проблему.

Выбор платы

Перейдите к Инструменты > Плата . В этом руководстве мы предполагаем, что вы используете ESP32, поэтому убедитесь, что вы выбрали опцию « esp32 »: чтобы прошить ESP32 с помощью MicroPython.

Выберите все эти параметры для прошивки платы ESP32:

  • плата: есп32
  • burn_addr: 0x1000
  • erase_flash: да
  • com: COMX (в нашем случае это COM5)
  • Прошивка
  • : выберите « Users » и выберите загруженный ранее файл ESP32 .bin

После нажатия кнопки « Choose », перейдите в папку «Загрузки» и выберите файл ESP32 .bin :

Выбрав все настройки, нажмите и удерживайте «9Кнопка 0213 BOOT/FLASH «на плате ESP32:

Удерживая нажатой кнопку « BOOT/FLASH «, нажмите кнопку « ok » в окне записи прошивки:

Начнется процесс EraseFlash , можно отпустить кнопку « BOOT/FLASH ». Через несколько секунд прошивка будет загружена на вашу плату ESP32.

Примечание: , если полоса « EraseFlash » не перемещается и вы видите сообщение об ошибке « стереть ложь. », это означает, что ваш ESP32 не был в режиме прошивки. Вам нужно повторить все шаги, описанные ранее, и снова удерживать кнопку « BOOT/FLASH », чтобы убедиться, что ваш ESP32 перешел в режим прошивки.

[Часть 2 — ESP8266] Загрузка и прошивка микропрограммы MicroPython на ESP8266

Чтобы загрузить последнюю версию микропрограммы MicroPython для ESP8266, перейдите на страницу загрузок MicroPython и прокрутите вниз до раздела ESP8266.

Вы должны увидеть аналогичную веб-страницу (см. рисунок ниже) с последней ссылкой для загрузки файла ESP8266 .bin — например: esp8266-20180511-v1.9.4.bin .

Примечание: , если вы используете другую плату (например, PyBoard, WiPy или другую), перейдите на страницу загрузок MicroPython и загрузите нужную прошивку для своей платы.

Выбор последовательного порта

Перейдите в Tools > Serial и выберите свой COM-порт ESP8266 (в нашем случае это COM5).

Важно: , если вы подключаете плату ESP32 к компьютеру, но не можете найти порт ESP32, доступный в вашей IDE uPyCraft, это может быть одной из следующих двух проблем: 1. Драйверы USB отсутствуют или 2. Кабель USB без проводов для передачи данных.

1. Если COM-порт вашего ESP не доступен, это часто означает, что у вас не установлены драйверы USB. Присмотритесь к микросхеме рядом с регулятором напряжения на плате и проверьте ее название.

Плата ESP8266 ESP-12E NodeMCU использует микросхему CP2102 .

Перейдите в Google и найдите свой конкретный чип, чтобы найти драйверы и установить их в свою операционную систему.

Драйверы CP2102 можно загрузить на веб-сайте Silicon Labs.

После их установки перезапустите uPyCraft IDE, и вы должны увидеть COM-порт в меню Tools .

2. Если у вас установлены драйверы, но вы не видите свое устройство, убедитесь, что вы используете USB-кабель с проводами для передачи данных.

USB-кабели от повербанков часто не имеют проводов для передачи данных (они предназначены только для зарядки). Таким образом, ваш компьютер никогда не установит последовательную связь с вашим ESP8266. Использование подходящего USB-кабеля должно решить вашу проблему.

Выбор платы

Перейдите к Инструменты > Плата . В этом руководстве мы предполагаем, что вы используете ESP8266, поэтому убедитесь, что вы выбрали опцию « esp8266 »:

Прошивка/загрузка прошивки MicroPython

Наконец, перейдите в меню Tools > BurnFirmware , чтобы прошить ESP32 с помощью MicroPython.

Выберите все эти параметры для прошивки платы ESP8266:

  • плата: esp8266
  • burn_addr: 0x0
  • erase_flash: да
  • com: COMX (в нашем случае это COM5)
  • Прошивка
  • : выберите « Users » и выберите ESP8266 .bin файл загружен ранее

После нажатия кнопки « Choose », перейдите в папку «Загрузки» и выберите файл ESP8266  .bin : на плате ESP8266:

Удерживая нажатой кнопку « BOOT/FLASH », нажмите кнопку « ok » в окне записи прошивки:

Когда появится « EraseFlash », вы можете отпустить кнопку « BOOT/FLASH ». Через несколько секунд прошивка будет загружена на вашу плату ESP8266.

Примечание: , если полоса « EraseFlash » не перемещается и вы видите сообщение об ошибке « Erase False.

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

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