Статья будет дополняться по мере необходимости изучения материала...
Я не являюсь специалистом в данной отрасли, данная статья ведётся посредством изучения темы и сохранения знаний в печатном виде, в том числе для общего пользования. Поэтому, если вы увидели какие-то ошибки, заблуждения или неточности, то буду благодарен в конструктивном комментарии на эту тему.
Разобранные модули:
- ESP32-WRDOM-32D на плате ESP32-Devkitc_V4
Что на борту?
Думаю, полезнее всего начать с общих характеристик железяки, что бы сразу было осознание того, с чем и как она может работать. Я буду разбирать только версии модулей, которые будут попадаться в руки, но, по сути, разница в них минимальна, если не брать во внимание специфичные модули, которые ещё просто так не купить в соседней пятёрочке. Итак, мы имеем:
- основной процессор: ESP32-D0WD (1);
- встроенная память: 32 Mbits (1);
- контроллеры беспроводных интерфейсов (Wi-Fi и Bluetooth);
- цифровая периферия (UART, Ethernet, SPI, I2C и т.д.);
- модуль RTC, предназначенный для работы камня в режимах с низким энергопотреблением, общего управления питанием, а также включающий в себя всю аналоговую периферию («медленные» контроллеры АЦП, ЦАП, драйвер сенсорных датчиков, осциллятор на 32кГц);
- аппаратные блоки шифрования данных.
- 34 порта ввода-вывода;
!!!
Контакты D0, D1, D2, D3, CMD и CLK используются для внутренней связи между ESP32 и флэш-памятью SPI. Они расположены с обеих сторон рядом с разъемом USB. Избегайте использования этих контактов, так как это может нарушить доступ к флэш-памяти SPI / SPI RAM.
Дружим Arduino IDE и ESP32
Разберём настройку приложения на примере ArduinoIDEv2, но от первой версии кардинальных отличий нет.
- Заходим в меню Параметры (Файл > Параметры)
- В строке "Дополнительные ссылки для менеджера плат" нажимаем на кнопочку с окошками.
- В новом открывшемся окне вставляем данную ссылку https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json В случае, если в этом окошке у вас уже есть другие ссылки, то вставляем эту в новой строке. Нажимаем ОК, ОК.
- Переходим в менеджер плат (Инструменты > Плата: " ... " > Менеджер плат...)
- Вверху слева в поисковой строке, где написано "Отфильтровать результаты поиска" пишем ESP32 и, в результатах, выбираем «esp32 by Espressif Systems» и нажимаем "Установка". Если, вместо "Установка" у вас высвечивается кнопочка "Удалить", то вы зря читали этот параграф, так как, просто забыли, что это уже делали :)
Заливаем проект в микроконтроллер
Linux
По тому, как подружить ArduinoIDE c Linux я описывал в статье "Шпаргалка по Линукс" Теперь займёмся уже самой прошивкой микроконтроллера через USB.
Подключаем ESP32 к компьютеру USB проводом (стоит обратить внимание, что не все провода поддерживают передачу data, некоторые провода рассчитаны только для зарядки телефона) При этом, в ArduinoIDE, появляется новый порт: /dev/ttyUSB0 Serial Port (USB). Нажимаем на данный порт и нам предлагают выбрать подключенную плату. Поскольку в куче плат у меня нет точного совпадения с моей, я выбираю ESP32 Dev Module.
При всём при этом, на плате ESP32-Devkitc_V4 никаких заморочек с нажатиями кнопок при загрузке нет. Просто нажимаем на кнопку загрузки и плата готова к работе.
Проект для ознакомления "Выводим основные характеристики в монитор порта"
Очень хреново, что площадка дзена не оптимизирована под публикацию кода, поэтому как есть... Копируем код, вставляем в ArduinoIDE и делаем оптимизацию в меню Изменить > Автоформатирование
Сразу предупрежу для одновременной работы и вай-фай и блютуз на 4Мб флеш памяти на борту, придётся поменять стандартные настройки в разделе инструменты >> partition scheme По умолчанию стоит вариант "Default 4mb with spiffs" с разделом под прошивку APP 1,2 Мб. Скетч совместного использования вай-фай и блютуз будет весить порядка 1,6 Мб и будет выдавать ошибку при загрузке прошивки Compilation error: text section exceeds available space in board Поэтому, пока я остановился на варианте "Minimal SPIFFS". Где (если я правильно понимаю) Имеется два раздела APP под загрузку прошивки с вариантом обновления по воздуху OTA и раздел SPIFFS для постоянного хранения данных. Более подробнее про разделы можно почитать здесь
Весовые характеристики различных библиотек.
"Чистый" код. Только setup() и loop()
Скетч использует 265741 байт (20%) памяти устройства.
Глобальные переменные используют 20224 байт (6%) динамической памяти
Только Serial.begin
Скетч использует 278529 байт (21%) памяти устройства.
Глобальные переменные используют 20232 байт (6%) динамической памяти
Только LittleFS.h
Скетч использует 274845 байт (20%) памяти устройства.
Глобальные переменные используют 20232 байт (6%) динамической памяти
Только Arduino.h
Скетч использует 265741 байт (20%) памяти устройства.
Глобальные переменные используют 20224 байт (6%) динамической памяти
Если сравнивать цифры размера скетча, то, получается, АрдуиноIDE вставляет библиотеку Arduino.h автоматически, при компиляции для ESP32...
Только WiFiConnector.h
Скетч использует 882953 байт (67%) памяти устройства.
Глобальные переменные используют 43784 байт (13%) динамической памяти
Как мы видим, работа с вай-фай посредством этой библиотеки автоматом съедает 47% памяти
Только WiFi.h
Скетч использует 882481 байт (67%) памяти устройства.
Глобальные переменные используют 43704 байт (13%) динамической памяти
Для сравнения
Только BluetoothSerial.h
Скетч использует 281117 байт (21%) памяти устройства.
Глобальные переменные используют 20368 байт (6%) динамической памяти
Только SettingsGyver.h
Скетч использует 910713 байт (69%) памяти устройства.
Глобальные переменные используют 43920 байт (13%) динамической памяти
Полезные ссылки:
ESP32-WROOM-32D & ESP32-WROOM-32U Datasheet
Краткое описание микроконтроллеров ESP32 и модулей на их основе по-русски
Руководство по программированию ESP-IDF ссылка дана на старую версию инструкции, так как в новой нет описания модулей на обозрении
Руководство Espressif по ArduinoIDEv2 https://github.com/espressif/arduino-esp32
Страничка гитхаб библиотек Гайвера, в том числе и для ESP8266/ESP32