Как правильно прошить ESP8266. Какие инструменты понадобятся для прошивки. Как подключить ESP8266 для прошивки. Какие ошибки могут возникнуть при прошивке ESP8266. Как проверить успешность прошивки ESP8266.
Что такое ESP8266 и зачем его прошивать
ESP8266 — это популярный микроконтроллер с встроенным Wi-Fi модулем, который широко используется для создания устройств интернета вещей (IoT). Прошивка ESP8266 позволяет обновить его программное обеспечение, добавить новый функционал или исправить ошибки.
Основные причины, по которым может потребоваться прошивка ESP8266:
- Обновление до последней версии прошивки с новыми возможностями
- Установка специализированной прошивки под конкретную задачу
- Исправление ошибок и повышение стабильности работы
- Кастомизация функционала под свои нужды
Прошивка ESP8266 — это важный этап при работе с этим микроконтроллером, позволяющий раскрыть весь его потенциал.
Необходимые инструменты и программы для прошивки ESP8266
Для успешной прошивки ESP8266 вам понадобится следующее:
![](/800/600/https/primalcortex.wordpress.com/wp-content/uploads/2015/10/selection_012.png)
- Сам модуль ESP8266 (например, популярная версия ESP-01)
- USB-TTL преобразователь для подключения ESP8266 к компьютеру
- Провода для соединения ESP8266 с USB-TTL преобразователем
- Компьютер с USB-портом
- Программа-прошивальщик (например, NodeMCU Flasher или esptool)
- Файл прошивки в формате .bin
Дополнительно может потребоваться:
- Макетная плата для удобного подключения
- Стабилизатор напряжения на 3.3В (если USB-TTL выдает 5В)
- Кнопка для перезагрузки ESP8266
При выборе инструментов важно убедиться в их совместимости с ESP8266 и вашим компьютером.
Подготовка ESP8266 к прошивке
Перед началом прошивки необходимо правильно подготовить ESP8266:
- Подключите ESP8266 к USB-TTL преобразователю по следующей схеме:
- VCC ESP8266 → 3.3V USB-TTL
- GND ESP8266 → GND USB-TTL
- TX ESP8266 → RX USB-TTL
- RX ESP8266 → TX USB-TTL
- GPIO0 ESP8266 → GND (для входа в режим прошивки)
- CH_PD/EN ESP8266 → 3.3V
- Убедитесь, что все соединения надежны и нет замыканий
- Подключите USB-TTL преобразователь к компьютеру
- Установите драйверы для USB-TTL, если это необходимо
- Определите номер COM-порта, к которому подключен ESP8266
Правильная подготовка ESP8266 критически важна для успешной прошивки. Ошибки на этом этапе могут привести к невозможности прошивки или даже повреждению модуля.
![](/800/600/https/i.pinimg.com/originals/bc/a2/f8/bca2f84150f4d80b8b55ccac11ef3552.jpg)
Выбор и загрузка прошивки для ESP8266
Выбор подходящей прошивки — важный шаг, от которого зависит функциональность вашего ESP8266. Вот основные варианты:
- Стандартная прошивка с AT-командами от Espressif
- NodeMCU — популярная прошивка на основе Lua
- MicroPython — реализация Python для микроконтроллеров
- Arduino для ESP8266 — прошивка, совместимая со средой Arduino
- Специализированные прошивки под конкретные задачи (например, для умного дома)
Как выбрать и загрузить прошивку:
- Определитесь с желаемым функционалом
- Найдите подходящую прошивку на официальных сайтах или форумах
- Скачайте файл прошивки (обычно с расширением .bin)
- Проверьте соответствие прошивки вашей модели ESP8266
- Убедитесь в надежности источника прошивки во избежание вредоносного ПО
Помните, что неправильно подобранная прошивка может привести к нестабильной работе ESP8266 или сделать его неработоспособным.
Процесс прошивки ESP8266 пошагово
Теперь, когда все подготовлено, можно приступать непосредственно к прошивке ESP8266. Вот пошаговая инструкция:
![](/800/600/https/www.autocardesign.org/wp-content/uploads/2021/05/astatic-636l-mic-wiring-diagram-astatic-636l-mic-wiring-diagram-of-astatic-636l-mic-wiring-diagram.jpg)
- Запустите программу-прошивальщик на компьютере
- Выберите COM-порт, к которому подключен ESP8266
- Укажите путь к файлу прошивки (.bin)
- Настройте параметры прошивки (скорость, режим и т.д.) согласно документации
- Переведите ESP8266 в режим прошивки (обычно путем замыкания GPIO0 на GND при включении питания)
- Нажмите кнопку «Старт» или «Прошить» в программе
- Дождитесь завершения процесса прошивки (обычно занимает несколько минут)
- После успешной прошивки отключите GPIO0 от GND и перезагрузите ESP8266
Важно: Не прерывайте процесс прошивки, это может привести к повреждению микроконтроллера. Если прошивка прервалась, повторите процесс сначала.
Проверка успешности прошивки ESP8266
После завершения процесса прошивки необходимо убедиться, что все прошло успешно. Вот несколько способов проверки:
- Подключите ESP8266 к компьютеру через терминальную программу (например, PuTTY)
- Установите параметры соединения: скорость 115200 бод, 8 бит данных, без четности, 1 стоп-бит
- Перезагрузите ESP8266 и проверьте вывод в терминале:
- Для AT-прошивки: отправьте команду «AT», должен прийти ответ «OK»
- Для NodeMCU: должно появиться приветственное сообщение с версией прошивки
- Для MicroPython: должен появиться интерпретатор Python (>>>)
- Проверьте основной функционал, соответствующий выбранной прошивке
- Если есть возможность, протестируйте Wi-Fi соединение
Если проверка показала, что прошивка работает корректно, можно приступать к использованию ESP8266 в своем проекте.
![](/800/600/https/microcontrollerelectronics.com/wp-content/uploads/2017/06/flash_esp8266.png)
Возможные ошибки при прошивке ESP8266 и их решение
При прошивке ESP8266 могут возникнуть различные проблемы. Вот некоторые распространенные ошибки и способы их решения:
- Ошибка подключения:
- Проверьте правильность подключения проводов
- Убедитесь, что выбран правильный COM-порт
- Переустановите драйверы USB-TTL преобразователя
- Ошибка «Timed out waiting for packet header»:
- Проверьте, переведен ли ESP8266 в режим прошивки (GPIO0 на GND)
- Попробуйте уменьшить скорость прошивки
- Проверьте качество USB-кабеля
- Прошивка завершается, но 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 version:0.40.0.0(Aug 8 2015 14:45:58)
AT+GMR
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.
OK
ets Jan 8 2013,rst cause:2, boot mode:(3,1)
load 0x40100000, len 1396, room 16
2nd boot version : 1.4(b1)
#т#n't use rtc mem data
ready
AT+RST
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
SPI Speed : 40MHz
SPI Mode : DIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000
slЏ‚rlМя
Ai-Thinker Technology Co. ,Ltd.
Программа для прошивки
Для обновлении прошивки необходимо скачать программу для прошивки и саму прошивку. Программа для прошивки 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 и более.
Все скаченные файлы необходимо распаковать и поместить в каталог, где полный путь к файлам состоит только из латинских символов, то есть без символов локализации языка.
Настройка
![](/800/600/http/i.pinimg.com/736x/56/71/f2/5671f2d283d0186ff137324f2545b2a6.jpg)
Загружаемые файлы располагаются в каталоге 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 встали корректно и в системе появился новый виртуальный последовательный порт.
Большой популярностью пользуется программа 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) и снова включаете (т.
На одном из вариантов скорости «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г.
![](/800/600/http/domoticx.com/wp-content/uploads/2016/01/ESP8266-ESP-01-GPIO-DHT11-schema-900x811.png)
Собственная плата с модулем 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.
- Список используемой документации:
- ESP8266 Overview | Espressif Systems Страница продукта на сайте производителя.
- ESP8266EX Resources | Espressif Systems Страница с материалами на сайте производителя.
- ESP8266 SDK Getting Started Guide
- ESP8266 Technical Reference
- ESP-01/07/12 Series Modules User’s Manual
- ESP8266 AT Instruction Set
- ESP8266 AT Command Examples
- ESP32 AT Instruction Set and Examples
- Netcat Cheat Sheet
- Xtensa Instruction Set Architecture (ISA)
- Статья: «ESP8266 — подключение и обновление прошивки – esp8266»
- Статья на хабре: «Reverse Engineering ESP8266 — часть 1»
- Статья на хабре: «Reverse Engineering ESP8266 — часть 2»
- ESP8266 быстрый старт
- ESP8266 продолжение.
Модуль ESP-12
- Статья на хабре: «Новые ревизии модулей на базе ESP8266 не умеют писать в SPI Flash»
- Книга Дэвида Тейнсли «Linux и UNIX: программирование в shell. Руководство разработчика», глава 29 «Сценарии cgi».
Содержание:
- I. Описание ESP8266
- Распиновка и подключение модулей ESP12
- Формат загрузочного лога, режимы работы SPI флеш-памяти
- Баг в Linux драйвере USB-UART преобразователя CP2102
- II. Прошивка ESP8266
- Использование esptool
- Первый способ прошивки
- Второй способ прошивки
- Третий способ прошивки
- Прошивка модуля ESP12E AT-интерпретатором версии 1.7.0 (август 2018г)
- III. Использование связки ESP8266 + OpenWRT
- Связка OpenWRT + ESP8266, использование сниффера tcpdump и анализатора траффика Wireshark для иследования трафика ESP8266
- Получение даты и времени через сеть, используя NTP
- IV.
- Связь ESP8266 с Web сервером на OpenWrt: настройка OpenWRT
- АТ-команды для установки TCP/UDP соединения
- Получение web-страницы от сервера на OpenWRT
- Получение лога погоды от сервера на OpenWRT
![](http://m-gen.ru/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif)
- V. Связь ESP8266 с Web сервером на OpenWRT посредством CGI скриптов
- Управление OpenWRT через ESP8266 посредством CGI интерфейса
- Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос
- Отправка данных от ESP8266 на web-сервер OpenWRT через POST запрос
- VI. Прозрачный режим соединения (UART-WiFi passthrough)
- Управление Linux/OpenWRT используя режим «UART-WiFi passthrough»
- VI. Плата NodeMCU с модулем ESP-WROOM-32
- Прошивка 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 — Вывод информации о версиях ПО
«ESP8266 AT Instruction Set»
Execute Command: AT+GMR Отклик: <AT version info>
<SDK version info>
<compile time>
OKПараметры: • <AT version info>: версия AT-интерпретатора.
• <SDK version info>: версия SDK.
• <compile time>: дата компиляции BIN-файла.
Выполняем:
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; Конфигурация НЕ СОХРАНЯЕТСЯ во флеш-памяти
«ESP8266 AT Instruction Set»
Команды: 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:<режим>
OKOK Параметры: <режим>:
‣ 1: Station mode
‣ 2: SoftAP mode
‣ 3: SoftAP+Station modeЗамечания: Конфигурация НЕ СОХРАНЯЕТСЯ во флеш-памяти Примеры: AT+CWMODE_CUR=3
AT+CWMODE_DEF — Установка режима Wi-Fi по умолчанию; Конфигурация сохраняется во флеш-памяти
«ESP8266 AT Instruction Set»
Команды: 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:<режим>
OKOK Параметры: <режим>:
‣ 1: Station mode
‣ 2: SoftAP mode
‣ 3: SoftAP+Station modeЗамечания: Изменённое значение будет сохранено в области параметров Примеры: AT+CWMODE_DEF=3
Устанавливаем режим клиента (Station):
AT+CWMODE_CUR=1OK
Поверяем:
AT+CWMODE_CUR?
+CWMODE_CUR:1OK
Смотрим какой режим работы Wifi установлен по умолчанию:
AT+CWMODE_DEF?
+CWMODE_DEF:2OK
Теперь нам нужно найти точку доступа. Делается это с помощью команды AT+CWLAP:
AT+CWLAP — вывод списка точек доступа WiFi
«ESP8266 AT Instruction Set»
Команды: 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,,
Сканируем воздух:
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
«ESP8266 AT Instruction Set»
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″
Подключаемся к точке доступа:
AT+CWJAP_CUR="Alien","password"
WIFI CONNECTED
WIFI GOT IPOK
Далее смотрим IP адрес который получил ESP8266:
AT+CIFSR — показать локальный IP адрес
«ESP8266 AT Instruction Set»
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 находится в режиме клиента и при этом подключён к точке доступа
AT+CIFSR
+CIFSR:STAIP,"192.168.1.125"
+CIFSR:STAMAC,"60:01:94:41:28:0f"OK
Пробуем достучаться до интернета :
AT+PING — посылка Ping пакета
«ESP8266 AT Instruction Set»
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»
AT+PING="ya.ru"
+32OK
Обновление прошивки из «облака» осуществляется с помощью команды CIUPDATE:
AT+CIUPDATE — Обновление прошивки через Wi-Fi
«ESP8266 AT Instruction Set»
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 для восстановления установок по умолчанию.
Обновляем:
AT+CIUPDATE +CIPUPDATE:1 +CIPUPDATE:2 +CIPUPDATE:3 +CIPUPDATE:4 OK
Обновление занимает где-то одну минуту. После обновления выполняем сброс настроек:
AT+RESTORE — Сброс к заводским настройкам
«ESP8266 AT Instruction Set»
Execute Command: AT+RESTORE Отклик: OK Параметры: Выполнение этой команды сбросит все настройки сохранённые на флешке, что вернёт прошивку к заводским настройкам. После выполнения команды чип будет перезагружен.
В случае, если использовались команды с суффиксом CUR, то для сброса будет достаточно обычного Reset:
AT+RST — Перезагрузка модуля
«ESP8266 AT Instruction Set»
Execute Command: AT+RST Отклик: OK Параметры: отсутствуют
Выполняем сброс:
Обратите внимание, что вектор старта программы изменился с 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 — Проверка оставшейся свободной памяти в ОЗУ
«ESP8266 AT Instruction Set»
Query Command: AT+SYSRAM? Отклик: +SYSRAM:<remaining RAM size> OK
Параметры отклика: <remaining RAM size>: оставшаяся свободная память в байтах.
Выполняем:
AT+SYSRAM?
+SYSRAM:33432OK
Имеем свободные 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 серверов, настройки НЕ сохраняются во флеш-памяти
«ESP8266 AT Instruction Set»
Команды: 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 сервер по умолчанию.
AT+CIPDNS_DEF — Задание пользовательских DNS серверов, настройки сохраняются во флеш-памяти
«ESP8266 AT Instruction Set»
Команды: 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 сервер по умолчанию.
Смотрим какие 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
«ESP8266 AT Instruction Set»
Команды: 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».
AT+CIPSNTPTIME — получение текущей даты и времени по SNTP
«ESP8266 AT Instruction Set»
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? //получить текущее время
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 соединения
«ESP8266 AT Instruction Set»
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
AT+CIPSEND — отправка данных
«ESP8266 AT Instruction Set»
Команды: Set Command:
- Одиночное соединение: (при +CIPMUX=0)
AT+CIPSEND=<length>- Множественные соединения:(при +CIPMUX=1)
AT+CIPSEND=<link ID>,<length>- При 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.
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 — отключение от точки доступа
«ESP8266 AT Instruction Set»
Execute Command: AT+CWQAP Отклик: OK Параметры: отсутствуют.
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 "°" 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 | Комментарий |
TXD | RXD | Теоретически, можно использовать Arduino TX/RD с небольшим скетчем. Однако, по-умолчанию, для ESP-8266 задана скорость порта 115200. Arduino UNO/Nano работают нестабильно на этой скорости, поэтому сначала придется подключится напрямую, чтобы установить скорость 9600.![]() | |
RXD | TXD | ||
GND | GND | GND | |
VCC | 3,3 V | Arduino запитываем не от USB порта ПК!!! | |
GPIO0 | GND | Для переключения в режим обновления. |
Проверка собранной схемы
Перед тем как переводить 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'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
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.
ОК 8 января 2013 г., первая причина: 2, режим загрузки: (3,1) загрузка 0x40100000, длина 1396, комната 16 2-я версия загрузки: 1.4(b1) #т#n't использовать данные памяти rtc готов
AT+RST
хвост 4
контрольная сумма 0x89
загрузка 0x3ffe8000, длина 776, комната 4
хвост 4
контрольная сумма 0xe8
загрузка 0x3ffe8308, длина 540, комната 4
хвост 8
контрольная сумма 0xc0
csum 0xc0
SPI Скорость : 40 МГц
Режим SPI : DIO
Размер SPI Flash и сопоставление: 8 Мбит (512 КБ + 512 КБ)
перейти к запуску user1 @ 1000
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.