Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
Я могу отправлять AT-команды при подключении к программному обеспечению через контакты TX/RX (1, 0), и ESP01 прекрасно взаимодействует. Однако, как только я начинаю делать то же самое с кодом, я не могу заставить ESP01 вообще реагировать. Все, что я пытаюсь сделать, это получить подтверждение от последовательного монитора. Я изменил скорость передачи на ESP01, а также на моем последовательном мониторе с 115200 до 9600, 19200 с помощью этой команды:
AT+UART_DEF=9600,8,1,0,0
Предпринятые шаги по устранению неполадок:
- Пытался поднять напряжение на случай, если ток будет недостаточным.
- Пробовал разные ESP01.
- Пытался поменять местами контакты TX и RX.
- Пытался использовать разные контакты на Uno (2 и 3, 10 и 11, 7 и 8).
- попытался изменить
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
@exloser, 👍0
3 ответа
Хорошо, я разобрался со своей проблемой. Вот ответ для тех, кто столкнется с этой проблемой в будущем.
- Удалить
pinMode(RX, INPUT);
иpinMode(TX, OUTPUT);
. - SoftwareSerial не собирается передавать ответ обратно, поэтому вам нужно запрограммировать ответ, поэтому отправка "AT" сама по себе на последовательный порт бессмысленна.
Как насчет этого:
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
RX от Arduino идет к TX на EXP, и TX от Arduino идет к RX на ESP, НО
Почему бы просто не перевести ESP01 в программный режим и не загрузить код adruino прямо в него, избавившись от AT-команд
- AT-команда не отвечает на последовательный монитор
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- Повреждение данных SoftwareSerial - поиск предложений
- Можно ли использовать SoftwareSerial в ESP01
- Проблемы с последовательной связью между Arduino и ESP8266.
- Ошибка отправки данных из ESP8266 в Uno
- Исправление последовательной связи, условие доступности последовательных данных проверяется даже после считывания всех отправленных данных.
- Как использовать 2 последовательных порта, когда библиотека WifiEsp использует один из обоих
«SoftwareSerial не собирается передавать ответ обратно»? Непонятно, чего вы ожидали, но пример @jdwolf с двумя циклами while — это правильный способ связи с терминала Uno на последовательном устройстве, подключенном к Uno. ESP действительно отвечают, и SoftwareSerial собирает этот ответ для вас. Что вы подразумеваете под «вы должны запрограммировать ответ»?, @JRobert