====== ESP32 WROOM DevKit v1: распиновка, схема подключения и программирование ====== [[amp>product/esp32-wroom-wifi-devkit-v1?utm_source=man&utm_campaign=esp32-wroom-wifi-devkit&utm_medium=wiki|ESP32 DevKit]] — это универсальная платформа для разработки IoT-решений. {{ :products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1.1.jpg?nolink |}} ===== Программирование на C++ ===== {{ :products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_c.png?nolink |}} - Для начала работы с платформой ESP32 DevKit на языке C++ [[articles:arduino-ide-install|скачайте и установите]] на компьютер интегрированную среду разработки Arduino IDE. - По умолчанию среда IDE настроена только на AVR-платы. Для платформы ESP32 DevKit добавьте в менеджере плат [[:articles:arduino-boards-manager#платформы_на_модуле_esp32|поддержку платформ на модуле ESP32]]. - Выберите платформу ESP32 DevKit: //Инструменты// //Плата// //DOIT ESP32 DEVKIT V1//. После выполненных действий плата ESP32 DevKit готова к программированию через Arduino IDE. Подробности о функциях и методах работы ESP32 на языке C++ читайте на [[https://github.com/espressif/arduino-esp32|ESP32 Arduino Core]]. ===== Примеры работы для Arduino ===== ESP32 может подключиться к Wi-Fi сети, создать собственную точку доступа, представляться сервером и клиентом, формировать GET и POST запросы. Также микроконтроллер имеет два АЦП и датчик Хола. ==== Пример WebClient ==== GET-запрос по URL-адресу в Интернете. // библиотека для работы с HTTP-протоколом #include // вводим имя и пароль точки доступа const char* ssid = "WIFINAME"; const char* password = "WIFIPASSWORD"; void setup() { // иницилизируем монитор порта Serial.begin(115200); // запас времени на открытие монитора порта — 5 секунд delay(5000); // подключаемся к Wi-Fi сети WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to Wi-Fi.."); } Serial.println("Connected to the Wi-Fi network"); } void loop() { // выполняем проверку подключения к беспроводной сети if ((WiFi.status() == WL_CONNECTED)) { // создаем объект для работы с HTTP HTTPClient http; // подключаемся к тестовому серверу с помощью HTTP http.begin("http://httpbin.org/"); // делаем GET запрос int httpCode = http.GET(); // проверяем успешность запроса if (httpCode > 0) { // выводим ответ сервера String payload = http.getString(); Serial.println(httpCode); Serial.println(payload); } else { Serial.println("Error on HTTP request"); } // освобождаем ресурсы микроконтроллера http.end(); } delay(10000); } После подключения к Wi-Fi микроконтроллер напишет в COM порт ответ от сервера. {{ :products:esp32-wroom-wifi-devkit-v1:clientmonitor.png?nolink |}} ==== Пример Analog WebServer ==== ESP32 имеет 15 аналоговых пинов. Выведем через веб-интерфейс значения с 36, 39 и 34 пина. // подключяем библиотеку для работы с Wi-Fi server #include // вводим имя и пароль точки доступа const char* ssid = "WIFINAME"; const char* password = "WIFIPASSWORD"; // инициализируем сервер на 80 порте WiFiServer server(80); // заводим буфер и счетчик для буфера char lineBuf[80]; int charCount = 0; void setup() { // инициализируем монитор порта Serial.begin(115200); // запас времени на открытие монитора порта — 5 секунд delay(5000); // инициализируем аналоговые пины pinMode(36, INPUT); pinMode(39, INPUT); pinMode(34, INPUT); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); // подключаем микроконтроллер к Wi-Fi сети WiFi.begin(ssid, password); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Wi-Fi connected"); Serial.println("IP-address: "); Serial.println(WiFi.localIP()); // запускаем сервер server.begin(); } void loop() { // анализируем канал связи на наличие входящих клиентов WiFiClient client = server.available(); if (client) { Serial.println("New client"); memset(lineBuf, 0, sizeof(lineBuf)); charCount = 0; // HTTP-запрос заканчивается пустой строкой boolean currentLineIsBlank = true; while (client.connected()) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); // формируем веб-страницу String webPage = ""; webPage += ""; webPage += " "; webPage += " "; webPage += " "; webPage += "

ESP32 - Web Server

"; webPage += "

"; webPage += " AnalogPin 36 = "; webPage += analogRead(36); webPage += "
"; webPage += " AnalogPin 39 = "; webPage += analogRead(39); webPage += "
"; webPage += " AnalogPin 34 = "; webPage += analogRead(34); webPage += "
"; webPage += "

"; webPage += ""; client.println(webPage); break; } // даем веб-браузеру время для получения данных delay(1); // закрываем соединение client.stop(); Serial.println("client disconnected"); } }
Когда микроконтроллер подключится к Wi-Fi сети, в монитор порта будет выведен IP-адрес веб-страницы с данными. Получить к ней доступ можно из локальной сети, перейдя по указанному IP-адресу. {{ :products:esp32-wroom-wifi-devkit-v1:monitor.png?nolink |}} Скопируйте IP-адрес из монитора порта и вставьте в адресную строку браузера. Если вы подключены к той же локальной сети, что и ESP32, то вы увидите веб-интерфейс. {{ :products:esp32-wroom-wifi-devkit-v1:analog_browser_2_.png?nolink |}} ==== Пример blink WebServer ==== Создадим WEB-сервер на порту 80. С помощью веб-интерфейса будем мигать светодиодами на 16 и 17 пинах. // подключяем библиотеку для работы с Wi-Fi server #include // указываем пины, к которым подключены светодиоды #define LED_GREEN 16 #define LED_RED 17 // вводим имя и пароль точки доступа const char* ssid = "WIFINAME"; const char* password = "WIFIPASSWORD"; // инициализируем сервер на 80 порте WiFiServer server(80); // создаем буфер и счетчик для буфера char lineBuf[80]; int charCount = 0; void setup() { // запас времени на открытие монитора порта — 5 секунд delay(5000); // инициализируем контакты для светодиодов pinMode(LED_GREEN, OUTPUT); pinMode(LED_RED, OUTPUT); // инициализируем монитор порта Serial.begin(115200); // подключаемся к Wi-Fi сети Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Wi-Fi connected"); Serial.println("IP-address: "); // пишем IP-адрес в монитор порта Serial.println(WiFi.localIP()); server.begin(); } void loop() { // анализируем канал связи на наличие входящих клиентов WiFiClient client = server.available(); if (client) { Serial.println("New client"); memset(lineBuf, 0, sizeof(lineBuf)); charCount = 0; // HTTP-запрос заканчивается пустой строкой boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // считываем HTTP-запрос lineBuf[charCount] = c; if (charCount < sizeof(lineBuf) - 1) { charCount++; } // на символ конца строки отправляем ответ if (c == '\n' && currentLineIsBlank) { // отправляем стандартный заголовок HTTP-ответа client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); // тип контента: text/html client.println("Connection: close"); // после отправки ответа связь будет отключена client.println(); // формируем веб-страницу String webPage = ""; webPage +=""; webPage +=" "; webPage +=" "; webPage +=" "; webPage +="

ESP32 - Web Server

"; webPage +="

LED #1"; webPage +=" "; webPage +=" "; webPage +="  "; webPage +=" "; webPage +=" "; webPage +=" "; webPage +="

"; webPage +="

LED #2"; webPage +=" "; webPage +=" "; webPage +="  "; webPage +=" "; webPage +=" "; webPage +=" "; webPage +="

"; webPage +=""; client.println(webPage); break; } if (c == '\n') { // анализируем буфер на наличие запросов // если есть запрос, меняем состояние светодиода currentLineIsBlank = true; if (strstr(lineBuf, "GET /on1") > 0) { Serial.println("LED 1 ON"); digitalWrite(LED_GREEN, HIGH); } else if (strstr(lineBuf, "GET /off1") > 0) { Serial.println("LED 1 OFF"); digitalWrite(LED_GREEN, LOW); } else if (strstr(lineBuf, "GET /on2") > 0) { Serial.println("LED 2 ON"); digitalWrite(LED_RED, HIGH); } else if (strstr(lineBuf, "GET /off2") > 0) { Serial.println("LED 2 OFF"); digitalWrite(LED_RED, LOW); } // начинаем новую строку currentLineIsBlank = true; memset(lineBuf, 0, sizeof(lineBuf)); charCount = 0; } else if (c != '\r') { // в строке попался новый символ currentLineIsBlank = false; } } } // даем веб-браузеру время, чтобы получить данные delay(1); // закрываем соединение client.stop(); Serial.println("client disconnected"); } }
При переходе по IP-адресу из монитора порта, выводится веб-страница с кнопками. {{ :products:esp32-wroom-wifi-devkit-v1:led_browser.png?nolink |}} ===== Программирование на JavaScript ===== {{ :products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_js.png?nolink |}} - Для старта с платформой Wi-Fi Slot на языке JavaScript [[:js:ide|скачайте и установите]] интегрированную среду разработки — Espruino Web IDE. - [[:js:espruino:esp8266|Установите прошивку интерпретатор JavaScript на ESP32]]. Подробнее о функциях и методах работы ESP32 на языке JavaScript читайте документацию на [[http://www.espruino.com/http://www.espruino.com/ESP32|Espruino]]. ===== Элементы платы ===== [[this>_media/products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_annotation.pdf|{{:products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_annotation-preview.png}}]] ==== Мозг платформы ==== Платформа для разработки ESP32 DevKit основана на модуле {{ :products:esp32-wroom-wifi-devkit-v1:esp32-wroom_datasheet.pdf |ESP32-WROOM}} с чипом {{ :products:esp32-wroom-wifi-devkit-v1:esp32_datasheet.pdf |ESP32-D0WDQ6}} от Espressif. {{ :products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_composed.png?nolink |}} === Чип ESP32-D0WDQ6 === Чип ESP32-D0WDQ6 — выполнен по технологии SoC (англ. System-on-a-Chip — система на кристалле), в которую входит 2-ядерный 32-битный процессор Tensilica Xtensa LX6 с блоками памяти ROM на 448 КБ и SRAM на 520 КБ. В кристалле также расположены беспроводные технологии Wi-Fi/Bluetooth, радио-модуль, датчик Холла и сенсор температуры. Для работы с чипом необходима внешняя Flash-память и другая электронная обвязка. Кристалл ''ESP32-D0WDQ6'' является основой на базе которой выпускаются модули с необходимой периферией: например ''ESP32-WROOM'' или ''ESP32-WROVER''. === Модуль ESP32-WROOM === ESP32-WROOM — модуль с чипом ESP32-D0WDQ6, Flash-памятью на 4 МБ и всей необходимой обвязкой, которые спрятаны под металлическим кожухом. Pins SCK/CLK, SDO/SD0, SDI/SD1, SHD/SD2, SWP/SD3 and SCS/CMD, namely, GPIO6 to GPIO11 are connected to the integrated SPI flash integrated on the module and are not recommended for other uses. Рядом с кожухом расположена миниатюрная антенна из дорожки на верхнем слое печатной платы в виде змейки. Металлический кожух экранирует компоненты модуля и тем самым улучшает электромагнитные свойства. Модуль является основной, на которой выполняются промышленные устройства или отладочные платы, например: ''ESP32 DevKit'' или ''ESP32-Sense Kit''. ==== USB-UART преобразователь ==== Преобразователь USB-UART на микросхеме {{ :products:esp32-wroom-wifi-devkit-v1:cp2102_datasheet.pdf |CP2102}} обеспечивает связь модуля ESP32-WROOM с USB-портом компьютера. При подключении к ПК — платформа ESP32 DevKit определяется как виртуальный COM-порт. ==== Разъём micro-USB ==== Разъём micro-USB предназначен для прошивки и питания платформы ESP32 DevKit с помощью компьютера. ==== Светодиодная индикация ==== ^ Имя светодиода ^ Назначение ^ | ON |Индикатор питания платформы.| | LED | Пользовательский светодиод на ''2'' пине микроконтроллера. При задании значения «высокого уровня» светодиод включается, при «низком» – выключается.| ==== Кнопка EN ==== Кнопка предназначена для ручного сброса программы — аналог кнопки ''RESET'' обычного компьютера. ==== Кнопка BOOT ==== Кнопка служит для ручного перевода модуля в режим прошивки: - Зажмите кнопку ''BOOT''; - Нажмите и отпустите кнопку ''EN''; - Отпустите кнопку ''BOOT'' ==== Регулятор напряжения ==== Линейный понижающий регулятор напряжение {{ :products:esp32-wroom-wifi-devkit-v1:ams1117-3.3_datasheet.pdf |AMS1117-3.3}} обеспечивает питание микроконтроллера. Выходное напряжение 3,3 вольта с максимальным током 1 А. ===== Распиновка ===== [[this>_media/products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_pinout.pdf|{{:products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_pinout-preview.png}}]] ==== Пины питания ==== * **VIN:** Пин для подключения внешнего источника напряжения в диапазоне от 5 до 14 вольт. * **3V3:** Пин от стабилизатора напряжения с выходом 3,3 вольта и максимальных током 1 А. Регулятор обеспечивает питание модуля ESP32-WROOM. * **GND:** Выводы земли. ==== Порты ввода/вывода ==== В отличие от большинства плат Arduino, родным напряжением ESP32 DevKit является 3,3 В, а не 5 В. Выходы для логической единицы выдают 3,3 В, а в режиме входа ожидают принимать не более 3,3 В. Более высокое напряжение может повредить микроконтроллер! Будьте внимательны при подключении периферии: убедитесь, что она может корректно функционировать в этом диапазоне напряжений. * **Цифровые входы/выходы:** 21 пин ''1''–''5'', ''12''–''19'', ''21''–''23'', ''25''–''27'', ''32'' и ''33''\\ Контакты ввода-вывода общего назначения. Пины могут быть настроены на вход или на выход. Логический уровень единицы — 3,3 В, нуля — 0 В. Максимальный ток выхода — 12 мА. * **Цифровые входы:** 4 пина ''34''–''36'' и ''39''\\ Контакты ввода общего назначения. Могут быть настроены только на вход. * **ШИМ:** все пины ввода-вывода\\ Позволяет выводить аналоговые значения в виде ШИМ-сигнала с разрядность 16 бит. Максимальное количество каналов 16. * **АЦП:** 15 пинов ''2'', ''4'', ''12''–''15'', ''25''–''27'', ''32''–''36'' и ''39''\\ Позволяет представить аналоговое напряжение в цифровом виде с разрядностью 12 бит. * **ЦАП:** пины ''25(DAC1)'' и ''26(DAC2)''\\ Аналоговый выход цифро-аналогового преобразователя, который позволяет формировать 8-битные уровни напряжения. Выводы могут использоваться для аудио-выхода. ==== Интерфейсы ==== Каждый пин ввода-вывода платформы поддерживает аппаратные интерфейсы. ^ Интерфейс ^ Количество ^ Назначение ^ |I²C| 2 | Используется для общения с периферией по последовательному интерфейсу «I²C».| |SPI| 3 | Для общения с периферией по последовательному интерфейсу «SPI».| |UART/Serial| 3 | Для общения с периферией по интерфейсу «UART».| |I²S| 2 | Используется для передачи и приёма цифрового звука с другими аудио устройствами.| ===== Принципиальная схема ===== [[this>_media/products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_schematic.pdf|{{:products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_schematic-preview.png?direct&700 }}]] ===== Габаритный чертёж ===== [[this>_media/products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_design.pdf|{{:products:esp32-wroom-wifi-devkit-v1:esp32-wroom-wifi-devkit-v1_design-preview.png}}]] ===== Характеристики ===== * Модуль: ESP32-WROOM с чипом ESP32-D0WDQ6 * Частота беспроводной передачи: 2,4 ГГц * Стандарт Wi-Fi: 802.11b/g/n * Стандарт Bluetooth: BLE v4.2 BR/EDR * Тактовая частота: до 240 МГц * Flash-память: 448 КБ * Внешняя Flash-память: 4 МБ * SRAM-память: 520 КБ * Пинов общего назначения: 25 ввода-вывода (GPIO) и 4 ввода (GPI) * Контактов с АЦП: 15 * Разрядность АЦП: 12 бит * Контактов с ЦАП: 2 * Разрядность ЦАП: 8 бит * Контактов с ШИМ: 21 (16 каналов) * Разрядность ШИМ: 16 бит * Контактов с ёмкостным сенсором: 8 * Пинов с прерываниями: 25 * Аппаратные интерфейсы: 3×SPI, 3×UART, 2×I²C и 2×I²S * Напряжение логических уровней: 3,3 В * Максимальный ток с пина или на пин: 12 мА * Максимальный выходной ток пина 3V3: 1 А * Входное напряжение через пин Vin: 5–14 В * Габариты: 51×28 мм ===== Ресурсы ===== * [[amp>product/esp32-wroom-wifi-devkit-v1?utm_source=man&utm_campaign=esp32-wroom-wifi-devkit&utm_medium=wiki|ESP32 WROOM DevKit]] в магазине. * [[https://github.com/amperka/hardware-drawings/blob/master/esp32-wroom-wifi-devkit-v1.svg|Векторное изображение платформы ESP32 DevKit]] * {{ :products:esp32-wroom-wifi-devkit-v1:esp32-wroom_datasheet.pdf |Datasheet на модуль ESP32-WROOM}} * {{ :products:esp32-wroom-wifi-devkit-v1:esp32_datasheet.pdf |Datasheet на чип ESP32-D0WDQ6}} * {{ :products:esp32-wroom-wifi-devkit-v1:ams1117-3.3_datasheet.pdf |Datasheet на понижающий регулятор напряжения ASM1117-3.3}} * {{ :products:esp32-wroom-wifi-devkit-v1:cp2102_datasheet.pdf |Datasheet на USB-UART преобразователь CP2102}}