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), чтобы проверить, не сломался ли мой, но получаю ту же ошибку.

, 👍1

Обсуждение

если вы видите 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


1 ответ


1

Модуль построен на базе микроконтроллера esp8266ex. Чтобы войти в режим программирования флэш-памяти, необходимо выполнить следующие шаги.

  1. Переведите микроконтроллер в состояние сброса, переведя линию сброса на низкий уровень.

  2. Переведите gpio15 на низкий уровень и gpio0 на низкий уровень, удерживая при этом низкий уровень сброса.

  3. Выполните сброс, чтобы он поднялся до высокого уровня и микроконтроллер перезапустился.

  4. При запуске микроконтроллер проверит состояние контактов (gpio15 low = используйте SPI Flash серии 25xx, предварительно подключенный к gpio6-11, gpio0 low = режим самопрограммирования, gpio2 НЕ имеет низкий уровень) и перейдет в состояние ожидания в несколько миллисекунд.

  5. Отпустите 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