Serial "Arduino-ESP-Arduino"
- Войдите на сайт для отправки комментариев
Добрый вечер уважаеммые ардуинщики. Возникла необходимостьв обмене информацией между Arduino UNO и ESP8266 по UART. Начал пробоватьс малого, отправляя текст с ESP8266 на ардуинку и там его выводя через HardwareSerial в IDE. Все прекрасно работало. Но когда усложнил задачу: теперь нужно отправлятьс ардуинку на ESP там читать запрос и отправлять ответ назад. Возникла проблемка. Ломаются сообщения.
Приведу примеры скетчей: Это скетч на Ардуине, он отправляет сообщение и ждет ответа:
#include <SoftwareSerial.h>
String inString;
bool waitResponse = false;
SoftwareSerial esp8266(3, 4);
void setup() {
Serial.begin(115200);
esp8266.begin(115200);
esp8266.flush();
Serial.flush();
}
void loop() {
if (!waitResponse) {
esp8266.println("Hello ESP!");
esp8266.flush();
Serial.println("Hello ESP!");
waitResponse = true;
}
delay(2000);
if (esp8266.available() > 0) {
waitResponse = false;
inString = esp8266.readStringUntil('\r\n');
Serial.println(inString);
}
}
Это скетч на ESP:
void setup() {
Serial.begin(115200);
}
void loop() {
String inString = "";
if (Serial.available() > 0) {
inString = Serial.readStringUntil('\r\n');
delay(2000);
if (String(inString) == String('Hello ESP!')) {
Serial.println("Hello Arduino!");
} else {
Serial.println("I`m sorry! I don`t uderstand!");
}
Serial.flush();
}
}
Сдесь мы просто читаем и отправляем назад ответ в зависимости от того правильно ли мы прочитаели его. И вот тут начинаются проблемы. Во превых всегда приходит "I`m sorry! I don`t uderstand!", а во вторых, в мониторе порта я вижу:
Нашел эту темку: http://arduino.ru/forum/programmirovanie/softwareserial-ne-rabotaet-na-115200
Проблемку c передачей данных решил перевев все на 9600 бод. Однако по прежнему срабатывает ответ только I`m sorry! I don`t uderstand!
I`m sorry! I don`t uderstand!
Вот правильный скетч для ESP:
void setup() { Serial.begin(9600); } void loop() { String inString = ""; if (Serial.available() > 0) { inString = Serial.readStringUntil('\r\n'); inString.trim(); delay(2000); if (inString.equals("Hello ESP!")) { Serial.println("Hello Arduino!"); } else { Serial.println("I`m sorry! I don`t uderstand!"); } Serial.flush(); } }