Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?

Я могу отправлять AT-команды при подключении к программному обеспечению через контакты TX/RX (1, 0), и ESP01 прекрасно взаимодействует. Однако, как только я начинаю делать то же самое с кодом, я не могу заставить ESP01 вообще реагировать. Все, что я пытаюсь сделать, это получить подтверждение от последовательного монитора. Я изменил скорость передачи на ESP01, а также на моем последовательном мониторе с 115200 до 9600, 19200 с помощью этой команды:

AT+UART_DEF=9600,8,1,0,0

Предпринятые шаги по устранению неполадок:

  1. Пытался поднять напряжение на случай, если ток будет недостаточным.
  2. Пробовал разные ESP01.
  3. Пытался поменять местами контакты TX и RX.
  4. Пытался использовать разные контакты на Uno (2 и 3, 10 и 11, 7 и 8).
  5. попытался изменить myESP.println("AT"); на myESP.write("AT\n\r");.

Ничего не работает. Я провел массу исследований и не нашел ничего плохого в том, что делаю. У вас есть какие-нибудь идеи?

#define TX 3
#define RX 2
String ssid = "*****";
String password = "******";

#include "SoftwareSerial.h"

SoftwareSerial myESP(RX,TX);

void setup() {
  pinMode(RX, INPUT);
  pinMode(TX, OUTPUT);
  myESP.begin(19200);
  Serial.begin(19200);
}

void loop() {
  myESP.println("AT");
  delay(5000);
}

Схема выглядит следующим образом: ТХ -> контакт 3 RX -> контакт 2 Vcc -> 3,3 В Земля -> Земля CH_PD -> Vcc

, 👍0


3 ответа


0

Хорошо, я разобрался со своей проблемой. Вот ответ для тех, кто столкнется с этой проблемой в будущем.

  1. Удалить pinMode(RX, INPUT); и pinMode(TX, OUTPUT);.
  2. SoftwareSerial не собирается передавать ответ обратно, поэтому вам нужно запрограммировать ответ, поэтому отправка "AT" сама по себе на последовательный порт бессмысленна.
,

«SoftwareSerial не собирается передавать ответ обратно»? Непонятно, чего вы ожидали, но пример @jdwolf с двумя циклами while — это правильный способ связи с терминала Uno на последовательном устройстве, подключенном к Uno. ESP действительно отвечают, и SoftwareSerial собирает этот ответ для вас. Что вы подразумеваете под «вы должны запрограммировать ответ»?, @JRobert


1

Как насчет этого:

void loop() {
  while(Serial.available() > 0) {
     myESP.write(Serial.read());
  }
  while(myESP.available() > 0) {
     Serial.write(myESP.read());
  }
}

Этот код будет продолжать загружать данные в software serial и из него, а не только один байт. Вы также можете использовать конкатенацию строк:

String data = "";
while(Serial.available() > 0) {
   data += Serial.read();
}

Или массивы:

int data_max = 4096;
int data_size = 0;
char data[data_max];
while(Serial.available() > 0) {
   if(data_size < data_max) data[data_size++] = Serial.read();
}
,

Пожалуйста, объясните в своем ответе, как это решает проблему. Таким образом, будущие зрители узнают, как решить эту проблему и почему это решает проблему., @sa_leinad


-1

RX от Arduino идет к TX на EXP, и TX от Arduino идет к RX на ESP, НО

Почему бы просто не перевести ESP01 в программный режим и не загрузить код adruino прямо в него, избавившись от AT-команд

,