Конструктор прошивки ESP32 (обновлено: 05 Oct 2020, 19:26:39)

Описание конструктора прошивки для wifi модуля ESP32. Прошивка основана на SDK RTOS производителя чипа.


Не проверенные опции:

ADC KEY

TSL2561

GPIO PCF8574

DS1621

WakeOnLan

Email check (не проверено без SSL)

I2C через GET

RFID замок(не проверен SPI)

АЦП ADS1115

АЦП PCF8591

АЦП MCP3201

MPR121

UART bridge

Просьба сообщить через обратную связь, работают ли у Вас указанные выше опции.

Опции, имеющие проблемы или недоделки:

1wire ds18b20 (возможны ошибки чтения)

DHT22/11 (возможны ошибки чтения)

Встроенные ADC пока не доступны в термостате ???

IR передатчик (пока только NEC и RAW)

IR приемник (принимает только NEC)

Опции, которые не импортированы из ESP8266 из-за неактуальности или технических проблем:

CC/CV, NooLite MT1132, NooLite MR1132 , iButton, Wiegand26/34, UPS Монитор, wunderground.com, Thingspeak.com, HC-SR04.

Это не значит, что данные опции никогда не будут добавлены в чип ESP32 - просто приоритет добавления этих опций не первостепенный. Конечно сильно не актуальные опции добавляться в проект не будут никогда.

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

Автоматическая прошивка модуля с загрузкой всех необходимых файлов можно произвести через WiFi-Iot Flasher (документация и ссылка на софт)

Прошивка через сторонние флешеры:

Прошивка через Flash_download_tools

Для начала соберем прошивку в конструкторе с необходимыми Вам функциями. Рекомендуется включать опции NVS настройки 2 и Экспорт/Импорт настроек.

Перед первой прошивкой в некоторых случаях, когда модуль не стартует из-за мусора в памяти требуется прошить пустой файл. Или воспользоваться опцией ERASE в настройках Flash tools.


Необходимо собрать прошивку в конструкторе ESP32 и скачать все 3 файла на свой компьютер:

0x1000 - загрузчик прошивки (bootloader)

0x8000 - таблица разметки разделов. Смотрите ниже про разметку памяти.

0x10000 - сама прошивка

Далее указать согласно адресам путь к файлам. Если в uart пишет ошибку запуска прошивки с секции 0x110000, то необходимо файл 0x10000 загрузить именно в адрес  0x110000.

Обратите внимание на размер 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. 

Ошибки запуска модуля

esp_image: Image length 1116272 doesn't fit in partition length 1048576 - Сообщение о том, что размер файла прошивки больше секции, в данном случае 1 мегабайта(1048576 байт). Необходимо пересобрать прошивку меньшего размера. Ошибка возникает, если не читать предыдущий абзац.

boot: Failed to verify partition table - Ошибка таблицы разделов, возникает, если в модуле находится мусор от предыдущей прошивки. Требуется очистка модуля бланком.

Brownout detector was triggered - нехватка питания, срабатывает защита. Помогает установка электролита или замена кабеля(если он тонкий китайский)

Ошибки обновления по OTA

Если на главной ошибка:

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 можно запустить замыканием GPIO 18 и 19 и перезапуском модуля. Если данные GPIO заняты и установка перемычки невозможна, то можно воспользоваться опцией Safe GPIO.

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

Прошивка через OTA или через веб интерфейс.

Прошивка поддерживает OTA - это обновление прошивки напрямую из конструктора на вкладке Firmware_update. В Free режиме будет загружена прошивка по умолчанию, в PRO будет загружаться прошивка из Вашего личного кабинета.

С 29.11.17 в модуле доступно обновление прошивки с локального компьютера, прошивку можно загрузить на этой же вкладке обновления по OTA. Опция доступна только в PRO режиме !

Структура разметки памяти:

При запуске модуля в UART выдается информация о разметке модуля.

Пример для 4 мегабайт flash с секциями по 1 мегабайту(старая разметка):

I (113) boot: ## Label            Usage           Type ST Offset   Length
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
Пример для 4 мегабайт flash с секциями по 1.6 мегабайт и SPIFFS 512кб (новая разметка):
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

Разметка модуля имеет несколько секций, в том числе настройки OTA(otadata), настройки wif(nvs) и калибровки wifi(phy_init)
Секция factory содержит прошивку, которую обычно нужно зашить при первом использовании модуля, а уже при использовании OTA эта секция не используется.
ota_0 и ota_1 содержат прошивки, которые чередуются при обновлении OTA. По этой причине, если уже использовалось OTA ,а нужно зашить прошивку по кабелю,то требуется уже прошивать секцию OTA, которая грузится в данный момент. Это видно далее в логах UART в виде строки I (305) boot: Loading app partition at offset 00110000
Столбец Offset содержит начальный адрес секции, а Length её длину, этот параметр ограничивает максимальный размер прошивки, которую можно залить в модуль. Адрес секции ota_1, а так же длина обеих секций ota изменятся, если сделать переразметку flash памяти.

Данная таблица разметки находится по адресу flash памяти 0x8000
Конструктор прошивки выдает по умолчанию файл разметки для flash 4 мегабайт. С 9.05.20 секции по 1600кб. SPIFFS 512кб.
Файл таблицы для 16 мегабайт можно скачать тут. Секции по 2 мегабайта.

Переразметка flash памяти(актуально для прошивки до 9.05.20)

Если модуль с нуля прошит после 9.05.20, то эта команда не требуется !!!

Переразметка позволяет увеличить максимальный размер секции OTA с 1024 кб до 1348 кб.

Запускается командой http://[ip адрес]/patchpartions , Необходимо чтобы была загружена OTA partion 1 (смотрим на вкладке debug) , обновитесь по ОТА, чтобы была нужная секция. Естественно, что нужно пытаться обновлять прошивку, чтобы она укладывалась в 1 мегабайт.

Откат загруженной прошивки

С помощью команды http://[ip адрес]/configpartion?st=x можно переключится на предыдущую прошивку, где x- это номер партиции, на которую нужно переключится (1 или 2). Текущую партицию можно посмотреть в debug.

Режим PRO

Режим PRO дает возможность использовать модуль в полную силу. Активация модуля происходит на вкладке лицензий личного кабинета.

Работа с UART устройствами

Чип ESP32 имеет 3 UART. Их номера 0,1,2 , но на данный момент UART 0 (GPIO 3 и 1) занят под debug. 

У каждой UART опции в дополнительных настройках необходимо указать номер UART, который не должен пересекаться с другими UART устройствами. Требуется так же указать GPIO выводы, они никак не привязаны к номеру UART и могут быть назначены любые свободные в указанном диапозоне

Отличие ESP32 от ESP8266.

1. Имеет на борту больше доступного ОЗУ примерно в 5 раз.

2. Доступно подключение по Ethernet.

3. Имеется на борту Bluetooth.

4. Больше доступных GPIO. 40 штук. (реально доступно где-то 26)

5. Доступно 8 АЦП .

6. Аппаратный ШИМ до 8 каналов !

7. Подключение до 10 сенсорных кнопок без дополнительного железа.

8. Процессор имеет 2 ядра частотой до 240мгц.

9. ESP32 имеет сверхнизкий режим потребления энергии , при котором может выполнятся какой либо код (пишется на ASM).

10. Разнообразные варианты пробуждения из спящего режима, в том числе из сверхнизкого потребления энергии или по состоянию GPIO.

11.Три полноценных UART с возможностью выбора GPIO.

На данный момент за счет более больших ресурсов ESP32 поддерживает обратную связь на опции Telegram в отличии от ESP8266

Отладочная информация на UART порте

Через UART0 на скорости 115200 выводится отладочная информация модуля. Здесь видно все ошибки. При проблемах работы прошивки просьба сообщать эту информацию разработчику.

Для вывода данных подходит приложение Putty в режиме uart монитора.


Распиновка выводов чипа ESP32

Тут не отображены 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 Земля