Описание конструктора прошивки для wifi модуля ESP32. Прошивка основана на SDK RTOS производителя чипа.
Существуют в продаже модули ESP32S2 - на данный момент конструктор его не поддерживает, но для опытов собрать прошивку с нужными опциями возможно , обратившись в поддержку проекта.
Не проверенные опции:
ADC KEY
TSL2561
DS1621
WakeOnLan
Email check (не проверено без SSL)
I2C через GET
RFID замок(не проверен SPI)
АЦП PCF8591
MPR121
UART bridge
VirtualWire 433/315
Wiegand26/34
HC-SR04
iButton
Просьба сообщить через обратную связь, работают ли у Вас указанные выше опции.
Опции, имеющие проблемы или недоделки:
IR передатчик (пока только NEC и RAW)
IR приемник (принимает только NEC)
Опции, которые не импортированы из ESP8266 из-за неактуальности или технических проблем:
CC/CV, NooLite MT1132, NooLite MR1132, UPS Монитор, wunderground.com, Thingspeak.com.
Это не значит, что данные опции никогда не будут добавлены в чип 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 - нехватка питания, срабатывает защита. Помогает установка электролита или замена кабеля(если он тонкий китайский)
Если на главной ошибка:
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 - это обновление прошивки напрямую из конструктора на вкладке 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 - 2 UART(0 и 1). На данный момент UART 0 (GPIO 3 и 1) занят под debug.
У каждой UART опции в дополнительных настройках необходимо указать номер UART, который не должен пересекаться с другими UART устройствами. Требуется так же указать GPIO выводы, они никак не привязаны к номеру UART и могут быть назначены любые свободные в указанном диапазоне.
Некоторые опции экперементально поддерживают программный UART выбрав номера UART 3 или 4.
1. Имеет на борту больше доступного ОЗУ примерно в 5 раз.
2. Доступно подключение по Ethernet.
3. Имеется на борту Bluetooth.
4. Больше доступных GPIO. 40 штук. (реально доступно где-то 26). Номера выше 33 не поддерживают режим на выход.
5. Доступно 8 АЦП .
6. Аппаратный ШИМ до 8 каналов !
7. Подключение до 10 сенсорных кнопок без дополнительного железа.
8. Процессор имеет 2 ядра частотой до 240мгц.
9. ESP32 имеет сверхнизкий режим потребления энергии , при котором может выполнятся какой либо код (пишется на ASM).
10. Разнообразные варианты пробуждения из спящего режима, в том числе из сверхнизкого потребления энергии или по состоянию GPIO.
11.Три полноценных аппаратных UART с возможностью выбора GPIO.
На данный момент за счет более больших ресурсов ESP32 поддерживает обратную связь на опции Telegram в отличии от ESP8266.
В целом многие характеристики схожи с обычной ESP32 , но есть отличия:
1. ОЗУ на модуле меньше чем на ESP32 примерно раза в 2, рекомендуется брать модули с установленной PSRAM.
2. GPIO больше, нумерация до 46 , GPIO46 работает только на вход !
3. Одно ядро до 240мгц.
4. Два полноценных аппаратных UART с возможностью выбора GPIO.
5. Аппаратная поддержка камеры, но модулей таких в продаже пока нет, так же нет и поддержки в SDK.
6. НЕТ Bluetooth и Ethernet (только SPI модули).
7. Поддержка USB OTG. Пока применение в проекте не найдено.
8. Встроенный датчик температуры.
Через 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 | Земля |