Описание конструктора прошивки для wifi всей линейки модулей ESP32. Прошивка основана на SDK RTOS(esp-idf) производителя чипа.
Поддержка модулей ESP32S, ESP32S2, ESP32C3, ESP32S3, ESP32C2, ESP32C6.
Тестовая поддержка ESP32C2, ESP32C6. Доступны не все опции. Не работают I2C опции ! Могут быть ошибки компиляции.
Тестовая поддержка SDK 5.3.1 - работают не все опции !
Распиновка одного из распространенных модулей на базе ESP32:
Не проверенные опции:
ADC KEY, TSL2561, DS1621, Email check (не проверено без SSL), RFID замок(не проверен SPI), АЦП PCF8591, MPR121, UART bridge, VirtualWire 433/315, iButton
Просьба сообщить через обратную связь, работают ли у Вас указанные выше опции.
Опции, имеющие проблемы или недоделки:
IR передатчик (доступен только NEC и RAW протоколы)
IR приемник (принимает только NEC)
Для начала соберем прошивку в конструкторе с необходимыми Вам функциями. Рекомендуется включать опции NVS настройки 2 и Экспорт/Импорт настроек.
Автоматическая прошивка модуля с загрузкой всех необходимых файлов можно произвести через WiFi-Iot Flasher (документация и ссылка на софт)
Прошивка через Flash_download_tools . Настройка DoNotChgBIn должна быть выключена.
Перед первой прошивкой в некоторых случаях, когда модуль не стартует из-за мусора в памяти требуется прошить пустой файл. Или воспользоваться опцией ERASE в настройках Flash tools.
Одним файлом - можно скачать и прошить только один этот файл по адресу 0x0000.
Или прошить 3 файла по указанным адресам:
0x1000 - загрузчик прошивки (bootloader), адрес для ESP32, ESP32S2. Для ESP32C3 и ESP32S3 - 0x0000 адрес;
0x8000 - таблица разметки разделов. Определяет размер секций и наличие SPIFFS диска;
0x10000 - сама прошивка. Только этот файл изменяется при компиляции новой прошивки.
Обратите внимание на размер flash памяти, обычно в модулях установлена память на 4 или 16 мегабайт. В прошивающей программе необходимо указать этот размер в мегабитах ! Установленный размер памяти в мегабитах видно в программе Flash download tools в окне Detected info.
Важно ! Если в модуле 4 мегабайта памяти, то при прошивке через программатор файл прошивки(адрес 0x10000) должен быть не больше 1.6 мегабайта !
Необходимо указать режим работы flash памяти DIO. В режиме QIO модули не работают, bootloader собран в режиме DIO.
Для загрузки прошивки необходимо GPIO 0 подтянуть к GND и нажать reset.
Готовые платы с USB-UART обычно автоматически запускаются в режиме прошивки, но иногда при проблемах требуется так же замыкать GPIO 0. Иногда для этого отдельно выведена кнопка BOOT.
Три варианта прошивки:
1. Прошить через flash_download_tool_3.9.3 - она поддерживает ESP32S2. При подключении через USB нужно выключить no-stub установив в конфиге no-stub = True
2. Через USB используя прошивку dfu_esp32s2.bin . Требуется установка драйвера через программу https://zadig.akeo.ie/ . Прошить через онлайн прошиватор https://dfu.stetelthings.com/.
3. UART0 не выведен . Шьем через UART1(GPIO17-U1TXD, GPIO18-U1RXD ) через внешний USB-UART. Прошивка через esptools требуется ключ --no-stub.
В обеих случая для запуска режима прошивки требуется зажать кнопку "0" сбросив чип по питанию или нажав кнопку RST.
esp_image: Image length 1116272 doesn't fit in partition length 1048576 - Сообщение о том, что размер файла прошивки больше секции, в данном случае 1 мегабайта(1048576 байт). Необходимо пересобрать прошивку меньшего размера. Ошибка возникает, если не читать предыдущий абзац.
boot: Failed to verify partition table - Ошибка таблицы разделов, возникает, если в модуле находится мусор от предыдущей прошивки. Требуется очистка модуля бланком.
Brownout detector was triggered - нехватка питания, срабатывает защита. Помогает установка электролита или замена кабеля(если он тонкий китайский)
Если на главной ошибка:
Firmware update ERROR ! (code 3) - это значит не собрана прошивка, например из-за ошибки компиляции.
Firmware update ERROR ! (code 2) - превышен размер файла прошивки. Изучайте вариант переразметки памяти.
Firmware update ERROR ! (code 1) - у модуля нет доступа к Интернету или к серверу wifi-iot.com. Плохой интернет.
Не забываем, что в UART можно посмотреть более точную причину и состояние обновления.
***ERROR*** A stack overflow in task vsens has been detected -ошибка переполнения стека задачи (в данном случае vsens). Произошла ситуация, когда задаче потребовалось больше ресурсов, чем выделено.
Ecли подобные ошибки появляются в UART , то необходимо сообщить в обратную связь для устранения проблемы.
Первоначальная настройка требует запустить режим Safe mode. В эфире должна появится точка доступа WiFi-IoT. При пустых настройках точки доступа Safe mode включается автоматически.
Safe mode можно запустить замыканием GPIO 18 и 19 и перезапуском модуля. Если данные GPIO заняты и установка перемычки невозможна, то можно воспользоваться опцией Safe GPIO.
После подключения к точке доступа необходимо зайти через браузер по адресу 192.168.4.1 и настроить там параметры доступа к своему роутеру.
Прошивка поддерживает OTA - это обновление прошивки напрямую из конструктора на вкладке Firmware_update. В Free режиме будет загружена прошивка по умолчанию, в PRO будет загружаться прошивка из Вашего личного кабинета.
С 29.11.17 в модуле доступно обновление прошивки с локального компьютера, прошивку можно загрузить на этой же вкладке обновления по OTA. Опция доступна только в PRO режиме !
При запуске модуля в UART выдается информация о разметке модуля.
Пример для 4 мегабайт flash с секциями по 1 мегабайту(старая разметка):
I (113) boot: ## Label Usage Type ST Offset LengthПример для 4 мегабайт flash с секциями по 1.6 мегабайт и SPIFFS 512кб (новая разметка):
I (135) boot: 0 nvs WiFi data 01 02 00009000 00004000
I (159) boot: 1 otadata OTA data 01 00 0000d000 00002000
I (182) boot: 2 phy_init RF data 01 01 0000f000 00001000
I (205) boot: 3 factory factory app 00 00 00010000 00100000
I (228) boot: 4 ota_0 OTA app 00 10 00110000 00100000
I (251) boot: 5 ota_1 OTA app 00 11 00210000 00100000
I (54) boot: Partition Table: I (58) boot: ## Label Usage Type ST Offset Length I (65) boot: 0 nvs WiFi data 01 02 00009000 00004000 I (73) boot: 1 otadata OTA data 01 00 0000d000 00002000 I (80) boot: 2 phy_init RF data 01 01 0000f000 00001000 I (88) boot: 3 ota_0 OTA app 00 10 00010000 00191000 I (95) boot: 4 ota_1 OTA app 00 11 001b0000 00191000 I (98) boot: 5 storage Unknown data 01 82 00341000 00080000
Если модуль с нуля прошит после 9.05.20, то эта команда не требуется !!!
Переразметка позволяет увеличить максимальный размер секции OTA с 1024 кб до 1348 кб.
Запускается командой http://[ip адрес]/patchpartions , Необходимо чтобы была загружена OTA partion 1 (смотрим на вкладке debug) , обновитесь по ОТА, чтобы была нужная секция. Естественно, что нужно пытаться обновлять прошивку, чтобы она укладывалась в 1 мегабайт.
С помощью команды http://[ip адрес]/configpartion?st=x можно переключится на предыдущую прошивку, где x- это номер партиции, на которую нужно переключится (1 или 2). Текущую партицию можно посмотреть в debug.
Режим PRO дает возможность использовать модуль в полную силу. Активация модуля происходит на вкладке лицензий личного кабинета.
Чип ESP32 имеет 3 UART (0,1,2), ESP32S2 и ESP32C3 - 2 UART(0 и 1). На данный момент UART 0 занят под debug, при его выборе в опциях отладка отключается - рекомендуется переназначать его на другие GPIO.
У каждой UART опции в дополнительных настройках необходимо указать номер UART, который не должен пересекаться с другими UART устройствами. Требуется так же указать GPIO выводы, они никак не привязаны к номеру UART и могут быть назначены любые свободные в указанном диапазоне.
Некоторые опции экперементально поддерживают программный UART выбрав номера UART 3 или 4.
Чип | Аппаратный ethernet | Bluetooth | Количество UART | Количество GPIO | Количество АЦП | Аппаратный ШИМ | USB | ОЗУ* |
ESP8266 | нет | нет | 1 + 1 только TX | 16 | 1 | нет | нет | 40 (RTOS) |
ESP32 | да | да | 3 | 40 | 8 | да | нет | 245 |
ESP32S2 | нет | нет | 2 | 47 | 8 | да | да | 110 |
ESP32C3 | нет | да | 2 | 22 | 5 | да | нет** | 180 |
ESP32S3 | нет | да | 3 | 47 | 8 | да | да | 260 |
ESP32C2 | нет | да | 2 | 21 | 5 | да | нет** | ? |
ESP32C6 | нет | да + Zigbee | 2 | 24 | 5 | да | нет** | 280 |
* - примерное свободное ОЗУ на "пустой" прошивке.
** - USB только для отладки и прошивки.
Через UART0 на скорости 115200 выводится отладочная информация модуля. Здесь видно все ошибки. При проблемах работы прошивки просьба сообщать эту информацию разработчику.
Для вывода данных подходит приложение Putty в режиме uart монитора.
Тут не отображены GPIO 6-11 , использующиеся под SPI Flash память.
GPIO 20, 24, 28, 29 ,30, 31 не выведены на модулях и нигде не фигурируют в документации(?) 37 и 38 так же часто не доступны на модулях.
ADC2_CHx не доступны в SDK на данный момент из-за конфликта с WI-FI. С учетом отсутствия GPIO 37 и 38 доступны всего 6 ADC.
GPIO 34 -39 доступны только на вход, на выход сконфигурировать вывод невозможно. Назначить выводы для I2C так же не получится.
Системные GPIO, которые мешают штатному запуску модуля, должно быть: GPIO0 - 1, GPIO12 -1(3.3в) 0(1.8в) в зависимости от модели spi флеш памяти.
Для прошивки требуется чтобы GPIO2 и GPIO0 были на GND. Обычно схема у готовых плат это делает автоматически
При некорректном режиме включения системных GPIO в UART отладке будет другое отличное от сообщение SPI_FAST_FLASH_BOOT (это нормальный режим загрузки с SPI FLASH)
Вывод модуля | Имя Pin | Описание |
1 | GND | Земля |
2 | EN | Разрешить работу чипа |
3 | SVP | SENSOR_VP, GPIO36, ADC1_CH0, RTC_GPIO0 |
4 | SVN | SENSOR_VN, GPIO39, ADC1_CH3, RTC_GPIO3 |
5 | IO34 | GPIO34, ADC1_CH6, RTC_GPIO4 |
6 | IO35 | GPIO35, ADC1_CH7, RTC_GPIO5 |
7 | IO32 | GPIO32, 32K_XP (кварц 32,768 кГц), ADC1_CH4, TOUCH9, RTC_GPIO9 |
8 | IO33 | GPIO33, 32K_XN (кварц 32,768 кГц), ADC1_CH5, TOUCH8, RTC_GPIO8 |
9 | IO25 | GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6 |
10 | IO26 | GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7 |
11 | IO27 | GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17 |
12 | IO14 | GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK |
13 | IO12 | GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ |
14 | IO13 | GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, U0CTS |
15 | IO15 | GPIO15, ADC2_CH3, TOUCH3, RTC_GPIO13, MTDO, HSPICS0, U0RTS |
16 | GND | Земля |
17 | IO2 | GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP |
18 | Io0 | GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1 |
19 | IO4 | GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD |
20 | IO16 | GPIO16, HS1_DATA4 |
21 | 3V3 | 3.3V |
22 | IO17 | GPIO17, HS1_DATA5 |
23 | IO5 | GPIO5, VSPICS0, HS1_DATA6 |
24 | IO18 | GPIO18, VSPICLK, HS1_DATA7 |
25 | IO23 | GPIO23 |
26 | IO19 | GPIO19, VSPIQ, HS2_DATA2 |
27 | IO22 | GPIO22, VSPIWP, HS2_CLK |
28 | U0RX | U0RXD, GPIO3, CLK_OUT2, HS2_DATA0 |
29 | U0TX | U0TXD, GPIO1, CLK_OUT3, HS2_DATA1 |
30 | IO21 | GPIO21, VSPIHD, HS2_CMD |
31 | GND | Земля |