Отправить AT-команды на ESP8266 с последовательного монитора Arduino Nano.
У меня есть Arduino nano и ESP8266-01.
Первое, что нужно сделать, это отправить AT-команды через последовательный монитор и посмотреть ответы.
ESP подключается следующим образом:
GND GND
GPIO2 not connected
GPIO0 not connected
RX to Arduino RX via level shifter
TX to Arduino TX via level shifter
CHPD 3.3V
RST 3.3V
VCC 3.3V
Изображение макетной платы (imgur отклоняет) https://www.dropbox.com/s/aif8afi29amy02h/20180807_135218.jpg?dl=0
При подключении загорается красный индикатор, а синий индикатор быстро мигает (и вместе с ним мигает индикатор Arduino RX), а затем гаснет.
Вот скетч, который я использую. (ESP8266 должен быть отключен от RX+TX для загрузки скетча для работы.)
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
digitalWrite(LED_BUILTIN, LOW);
delay(3000);
}
(Мне нравится мигать светодиодом, чтобы продемонстрировать, что загрузка прошла успешно.)
С последовательным монитором, установленным на 115200 (NL&CR), я отправил AT
, и ничего не произошло.
Что у меня не так? Я действительно не понимаю! Заранее благодарим за любые предложения.
(На самом деле это мой третий ESP8266. Первый работал нормально на 5 В, но перестал работать после того, как я установил скорость передачи данных 9600. Я предполагаю, что 5 В убили его, но странно, что он работал так долго. Второй, подключенный, как указано выше. , при включении блок питания раскалился докрасна и расплавил перемычки.)
2 ответа
Первая проблема заключается в том, что io 0 esp8266 должен быть выставлен на ВЫСОКИЙ уровень для нормальной загрузки. Если io 0 не HIGH, esp8266 запускается в режиме мигания.
Еще одна проблема связана с контактным соединением для сброса. Он должен быть подключен с подтягивающим резистором или не подключен.
См. Руководство по проектированию оборудования ESP8266.
Контакт 32 служит контактом RST, который можно оставить плавающим, если он не использовал. Контакт сброса удерживается низким, когда микросхема включена. Для того, чтобы избегайте сбросов, вызванных внешними помехами, провод, как правило, должен быть коротким, и внешний подтягивающий резистор не требуется
Я подозреваю, что "контакт сброса удерживается низким, когда чип включен". это плохой перевод. В описании вывода написано "32 EXT_RSTB I Внешний сигнал сброса (Низкий уровень напряжения: Активный)". Они означают, что чип сбрасывается, когда на выводе сброса установлен НИЗКИЙ уровень.
Итак:
- Подключите ESP8266 RX/TX напрямую к Arduino, а не через переключатель уровня.
- Нет необходимости подключать GPIO0.
- RST можно либо оставить плавающим, либо подключить к 3,3 В; это не имеет значения.
- Не нужно
Serial.begin
; пустой скетч будет работать.
Вот что вы хотите видеть в терминале:
AT
OK
AT+CWMODE?
+CWMODE:2
OK
AT+CWMODE=1
OK
AT+CWLAP
+CWLAP:(3,"SKY61611",-83,"90:21:06:79:fb:0a",1,110,0)
+CWLAP:(3,"SKY3CA89",-90,"60:38:e0:d4:7d:7d",6,96,0)
+CWLAP:(3,"PLUSNET-TS2H",-75,"a4:08:f5:ae:ab:c2",6,103,0)
+CWLAP:(3,"SKY3CA89",-79,"90:21:06:c6:1f:6d",6,120,0)
+CWLAP:(3,"MY WIFI 6739",-38,"18:e3:bc:2c:67:39",6,127,0)
+CWLAP:(3,"BTHub6-CF7H",-88,"88:a6:c6:27:53:a4",6,108,0)
+CWLAP:(3,"SKY7A62E",-79,"7c:4c:a5:1c:7f:59",11,130,0)
+CWLAP:(4,"EE-mce6kx",-86,"e4:3e:d7:71:35:f3",11,128,0)
OK
Следующее, что нужно сделать, это установить скорость передачи ESP8266 на 9600, чтобы его можно было использовать с SoftwareSerial
. Команда для этого
AT+UART_DEF=9600,8,1,0,0
Затем мы можем переместить ESP8266 с контактов RX/TX платы Arduino на другие контакты и перенаправить команды с терминала на ESP8266 и распечатать ответы.
#include <SoftwareSerial.h>
#define RX 10
#define TX 11
SoftwareSerial esp8266(RX, TX);
void setup() {
Serial.begin(9600);
esp8266.begin(9600);
Serial.println("setup() done");
}
// Проверяем наличие сообщений от ESP8266 и обрабатываем их.
void processEsp() {
while (esp8266.available() > 0) {
String line = esp8266.readStringUntil('\n');
processLine(line);
}
}
void loop() {
if (Serial.available() > 0)
{
String command = Serial.readStringUntil('\n'); // AT+CWLAP
Serial.println("Command Sent: " + command);
esp8266.println(command);
}
processEsp();
//Serial.println("...");
// задержка (1000);
// Мы ждем один раз.
// Во время этого ожидания буфер заполняется, и мы видим только то, что находится в буфере.
}
void processLine(String line) {
Serial.println(line);
}
Считыватель серийных номеров должен работать в тесном цикле; delay
приводит к заполнению буфера и потере символов, превышающих длину буфера. Включение delay
приводит к усечению ответа AT+CWLAP
.
Невозможно определить конец ответа на AT-команду. ESP8266 может отправить что угодно в любое время. То, что он отправляет, должно обрабатываться построчно; разделитель строки/записи - \r\n
.
библиотека WiFiEsp имеет стандартный сетевой API Arduino поверх AT-команд esp8266. библиотека может обнаружить конец ответа. (вы могли бы хотя бы проголосовать за мой ответ), @Juraj
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Arduino Nano, ESP8266-01 связь
- Использовать NodeMCU 12E (ESP8266) в качестве экрана Wi-Fi для Arduino Nano
- Питание модуля ESP8266 от arduino nano
- Подключение ESP 01 к Nano
- Как передать AT-команды Лоре из UART ESP32?
- Модули HC-12 перестали принимать, не могу понять почему
- HTTP POST/METHOD для Emoncms не работает
Отключение ничего не изменило ., @Richard Barraclough
удалите переключатель уровня с вывода TX esp8266, @Juraj
С TX, подключенным напрямую к Arduino TX: никаких изменений, за исключением того, что синий индикатор ESP8266 теперь не мигает при включении питания., @Richard Barraclough
важный! установите io0 esp8266 HIGH с подтягивающим резистором, @Juraj
Поставил GPIO0 через 3к3 на 3.3В и все равно ничего., @Richard Barraclough
удалите Serial.begin из скетча Nano или лучше включите Nano в постоянный сброс, подключив контакт сброса Nano к земле, @Juraj
Прогресс! С Arduino RST, подключенным к GND, питание ESP произвело мусор на терминале. Затем я перепробовал все разные скорости передачи, пока не нашел 74880. Подключенный или отключенный GPIO0 не имеет значения. TX через переключатель уровня не имеет значения. ESP RST на 3,3В не имеет значения. До сих пор нет ответа от
AT
., @Richard BarracloughЕсли я подключаю EXP TX и TX напрямую к Arduino TX и TX (соответственно), я получаю ответ от «AT», но это мусор. Скорость передачи изменена на 115200 и
AT
работает с прямым подключением. Итак, мой перевёртыш уровня провалился?, @Richard Barracloughзагрузочный журнал печатается на 74880 и содержит мусор (возможно, китайские иероглифы), @Juraj
AT
работает с TX, TX подключается напрямую безSerial.begin
., @Richard Barraclough