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

, 👍0


2 ответа


1

Первая проблема заключается в том, что io 0 esp8266 должен быть выставлен на ВЫСОКИЙ уровень для нормальной загрузки. Если io 0 не HIGH, esp8266 запускается в режиме мигания.

Еще одна проблема связана с контактным соединением для сброса. Он должен быть подключен с подтягивающим резистором или не подключен.

См. Руководство по проектированию оборудования ESP8266.

Контакт 32 служит контактом RST, который можно оставить плавающим, если он не использовал. Контакт сброса удерживается низким, когда микросхема включена. Для того, чтобы избегайте сбросов, вызванных внешними помехами, провод, как правило, должен быть коротким, и внешний подтягивающий резистор не требуется

Я подозреваю, что "контакт сброса удерживается низким, когда чип включен". это плохой перевод. В описании вывода написано "32 EXT_RSTB I Внешний сигнал сброса (Низкий уровень напряжения: Активный)". Они означают, что чип сбрасывается, когда на выводе сброса установлен НИЗКИЙ уровень.

,

Отключение ничего не изменило ., @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


1

Итак:

  • Подключите 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