ESP8266 — Где найти руководство по назначению контактов для загрузки кода?
Я пытаюсь загрузить сценарий, который запускает веб-сервер на ESP8266 с простым веб-интерфейсом, где пользователь может ввести свои учетные данные WLAN.
/* ======================================== =============================================== ================
Пример кода для создания портала настройки с использованием программной точки доступа на ESP8266.
Для получения дополнительной информации посмотрите мое видео по адресу https://youtu.be/1VW-z4ibMXI.
MrDIY.ca
=============================================== =============================================== ========== */
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
ESP8266WebServer server(80);
struct settings {
char ssid[30];
char password[30];
} user_wifi = {};
void setup() {
EEPROM.begin(sizeof(struct settings) );
EEPROM.get( 0, user_wifi );
WiFi.mode(WIFI_STA);
WiFi.begin(user_wifi.ssid, user_wifi.password);
byte tries = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
if (tries++ > 30) {
WiFi.mode(WIFI_AP);
WiFi.softAP("Setup Portal", "mrdiy.ca");
break;
}
}
server.on("/", handlePortal);
server.begin();
}
void loop() {
server.handleClient();
}
void handlePortal() {
if (server.method() == HTTP_POST) {
strncpy(user_wifi.ssid, server.arg("ssid").c_str(), sizeof(user_wifi.ssid) );
strncpy(user_wifi.password, server.arg("password").c_str(), sizeof(user_wifi.password) );
user_wifi.ssid[server.arg("ssid").length()] = user_wifi.password[server.arg("password").length()] = '\0';
EEPROM.put(0, user_wifi);
EEPROM.commit();
server.send(200, "text/html", "<!doctype html><html lang='en'><head><meta charset='utf-8'><meta name='viewport' content='width=device-width, initial-scale=1'><title>Wifi Setup</title><style>*,::after,::before{box-sizing:border-box;}body{margin:0;font-family:'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans','Liberation Sans';font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#f5f5f5;}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);border:1px solid #ced4da;}button{border:1px solid transparent;color:#fff;background-color:#007bff;border-color:#007bff;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem;width:100%}.form-signin{width:100%;max-width:400px;padding:15px;margin:auto;}h1,p{text-align: center}</style> </head> <body><main class='form-signin'> <h1>Wifi Setup</h1> <br/> <p>Your settings have been saved successfully!<br />Please restart the device.</p></main></body></html>" );
} else {
server.send(200, "text/html", "<!doctype html><html lang='en'><head><meta charset='utf-8'><meta name='viewport' content='width=device-width, initial-scale=1'><title>Wifi Setup</title> <style>*,::after,::before{box-sizing:border-box;}body{margin:0;font-family:'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans','Liberation Sans';font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#f5f5f5;}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);border:1px solid #ced4da;}button{cursor: pointer;border:1px solid transparent;color:#fff;background-color:#007bff;border-color:#007bff;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem;width:100%}.form-signin{width:100%;max-width:400px;padding:15px;margin:auto;}h1{text-align: center}</style> </head> <body><main class='form-signin'> <form action='/' method='post'> <h1 class=''>Wifi Setup</h1><br/><div class='form-floating'><label>SSID</label><input type='text' class='form-control' name='ssid'> </div><div class='form-floating'><br/><label>Password</label><input type='password' class='form-control' name='password'></div><br/><br/><button type='submit'>Save</button><p style='text-align: right'><a href='https://www.mrdiy.ca' style='color: #32C5FF'>mrdiy.ca</a></p></form></main> </body></html>" );
}
}
Я пытаюсь понять, как мне нужно подключить модуль WLAN ESP8266 к моему Arduino Uno, чтобы иметь возможность загрузить этот скрипт. Я просмотрел документацию , но я не могу найти много полезного.
Модуль имеет следующие контакты:
3V3 | RX
RST | IO0
EN | IO2
TX | GND
Но в документации есть и другие контакты, которых у меня нет, а контакт EN в документации даже не упоминается.
Я подключил вот так (подтягивающие резисторы пока не использовал):
[ESP8266 -> Arduino Uno]
3V3 -> 3V3 (bread board)
EN -> 3V3 (bread board)
RX -> RX
TX -> TX
GND -> GND
Соединение работает и отвечает на AT-команды.
Но если я попытаюсь загрузить скрипт, произойдет сбой:
. Variables and constants in RAM (global, static), used 28236 / 80192 bytes (35%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1504 initialized variables
╠══ RODATA 1020 constants
╚══ BSS 25712 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 59535 / 65536 bytes (90%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 26767 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 239164 / 1048576 bytes (22%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 239164 code in flash
esptool.py v3.0
Serial port COM4
Connecting........_____....._____....._____....._____....._____....._____....._____
A fatal esptool.py error occurred: Failed to connect to ESP8266: Invalid head of packet (0xF0)
Как мне нужно подключить модуль, чтобы загрузить код?
Я использую этот чип. Я также проверил другой чип (у меня их 4), чтобы проверить, не сломался ли мой, но получаю ту же ошибку.
@Black, 👍1
Обсуждение1 ответ
Модуль построен на базе микроконтроллера esp8266ex. Чтобы войти в режим программирования флэш-памяти, необходимо выполнить следующие шаги.
Переведите микроконтроллер в состояние сброса, переведя линию сброса на низкий уровень.
Переведите gpio15 на низкий уровень и gpio0 на низкий уровень, удерживая при этом низкий уровень сброса.
Выполните сброс, чтобы он поднялся до высокого уровня и микроконтроллер перезапустился.
При запуске микроконтроллер проверит состояние контактов (gpio15 low = используйте SPI Flash серии 25xx, предварительно подключенный к gpio6-11, gpio0 low = режим самопрограммирования, gpio2 НЕ имеет низкий уровень) и перейдет в состояние ожидания в несколько миллисекунд.
Отпустите gpio0 и начните передачу данных на аппаратное обеспечение uart0 (подключенное к gpio1 и gpio3, также известное как tx и rx).
Итак, вам необходимо убедиться, что: gpio0 поднят; gpio1 и gpio3 подключены к uart другого хоста перекрестным соединением; gpio2 не низкий; gpio15 находится на низком уровне; и сброс, и включение имеют высокий уровень; и, конечно же, у вас есть питание и земля 3х3. Кроме того, вам понадобятся две кнопки для временного подключения сброса и gpio0 к земле. Затем нажмите сброс, нажмите кнопку gpio0, отпустите сброс и, наконец, отпустите gpio0. Mcu теперь должен дождаться мигания данных. Кроме того, при использовании esptool вам необходимо указать ему пропускать последовательность автоматического сброса (--before no_reset
), поскольку вы делаете это вручную.
Учитывая вышеупомянутые подтягивания, их наличие зависит от используемого вами модуля. У esp-01 они все уже должны быть на месте (кроме двух кнопок). Для esp-01 (без «s») вам необходимо добавить подтягивания для gpio0 и «chip Enable». прикрепи себя.
Существует также последовательность автоматического программирования (которая используется по умолчанию для esptool), также иногда называемая «методом сброса Nodemcu». или типа того. Идея состоит в том, что программное обеспечение для программирования будет включать и выключать дополнительные сигналы UART dtr и rts перед передачей данных. Если у вас есть небольшая схема между чипом UART и микроконтроллером esp8266, которая способна преобразовывать сигналы dtr/rts в состояния сброса/gpio0, чтобы заставить микросхему войти в режим самопрограммирования, тогда вам больше не понадобятся никакие кнопки.
Такая схема может быть изготовлена всего из двух npn-транзисторов и двух резисторов, и ее легко найти в Интернете. Некоторые платы (включая Nodemcu, конечно) могут иметь такую схему вместе с преобразователем USB-TTL, понижающим преобразователем постоянного тока и USB-разъемом на плате. Но они больше по размеру и немного дороже, чем esp-01, конечно.
Кроме того, специально для esp-01/esp-01s, вы можете приобрести готовый адаптер, который содержит именно те недостающие детали (штекер USB, понижающий преобразователь постоянного тока, двухтранзисторную автосхему, микросхему преобразователя TTL, некоторые подтяжки и гнездовой разъем для подключите модуль esp-01). Таким образом, вы можете прошивать свои модули с помощью этого адаптера, сохраняя при этом немного места в вашей схеме.
(Подсказка: о наличии функции автоматического программирования можно догадаться по фотографии продукта, обычно по двум транзисторам sot-23, расположенным близко друг к другу).
Или можно купить все эти детали и спаять такую плату-переходник самостоятельно. Для новичка это может показаться слишком сложным, но, с другой стороны, это тоже может стать интересной задачей.
Спасибо за ваш ответ! На моем ESP8266 нет gpio15., @Black
@Black esp8266 — это микроконтроллер, в котором есть этот и множество других. Esp-01 — небольшая плата, на которой уже имеется понижающий резистор между gpio15 и землей. Так что, если вы не заметили его, это не имеет большого значения, поскольку вам не следует ничего делать с этой булавкой самостоятельно. По крайней мере, для esp-01., @Matt
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Захват изображений с OV7670 (без FIFO) с использованием Arduino Uno?
если вы видите AT-команды, значит, он подключен правильно... ESP-01 предварительно запрограммирован прошивкой AT, и я не уверен, способен ли он принять программу, @jsotola
попробуйте это https://www.instructables.com/HOW-TO-UPLOAD-PROGRAM-TO-ESP-01-USING-ARDUINO/, @jsotola
Я следовал инструкциям. Загрузка прошла успешно после того, как я установил сброс моего Arduino на GND. Но теперь мой ESP8266 больше не работает, нет соединения WLAN и он перестал отвечать на AT-команды., @Black
Скетч заменил АТ прошивку. У тебя esp-01. Это не плата для разработки, а модуль Wi-Fi, поэтому у него нет USB-адаптера и автоматического сброса., @Juraj
@Юрай, вау, ок, как мне узнать, предназначена ли доска для разработки, я так и думал, что каждая из них предназначена? Я новичок в ардуино, извините. Что вообще можно сделать с таким модулем, как мой, если ты не умеешь его программировать?, @Black
Разъем USB является хорошим индикатором макетной платы. \ вы можете запрограммировать esp-01. ты сделал это. просто вам нужен способ подключить его к компьютеру, и вы должны знать, как перевести его в режим загрузчика. Самая простая плата разработки esp8266 — Wemos D1 mini., @Juraj
Хорошо, спасибо, значит, не существует безопасного способа узнать, поддерживает ли плата специальную разработку?, @Black