ESP8266 SoftwareSerial не получает ни одного символа

Я хочу использовать ESP8266 (ESP12) для получения данных от счетчика на скорости 9600 бод через SotwareSerial. Но моя программа не получает никаких данных. Я разбил это на код, который прикрепляю здесь. Я пробовал это, используя разные библиотеки (Arduino SoftwareSerial, а также espsoftwareserial), которые нашел. Я подключил и протестировал RX и TX в разных комбинациях имеющихся контактов 4/5/12/13/14. Но ни одна комбинация вообще не получает данные. Могу только отправлять данные - проверено осциллографом. Запустив прикрепленную тестовую программу, я соединил контакты RX и TX вместе, поэтому мне нужно вернуть данные из tx.

Надеюсь, я найду в сообществе кого-нибудь, кто сможет дать мне полезный совет. Заранее спасибо!

#include <SoftwareSerial.h>
SoftwareSerial mySerial1(14, 12, false, 256);  // прием, передача

void setup() {
mySerial1.begin(9600);   // Коммуникация с Zähler
mySerial1.setTimeout(5000);
mySerial1.listen();
//задержка(100);
//mySerial1.listen();

Serial.begin(9600);
delay(1000);
Serial.print(__DATE__);Serial.print(" ");Serial.println(__TIME__);

char ch;
while(1){
  wdt_reset();
  Serial.println("\nSoftware serial test started");
  Serial.print("Data sent: ");
  for (byte i = 32; i < 128; i++) { mySerial1.write(i);             
  Serial.print(char(i)); }
  Serial.println();
  mySerial1.println();
  ESP.wdtFeed();
  delay(100);
  Serial.print("Data recv: ");
  if(mySerial1.available()) {
    while(mySerial1.available()){
      ch = mySerial1.read();
      Serial.print(ch);
    }
    Serial.println("_");
  }
  delay(400);
}
}

void loop() {}

, 👍0

Обсуждение

Дорогой @fhpa, прежде чем ответить, я предлагаю вам удалить while(1) из функции setup() и переместить содержимое while(1) внутрь функции цикла(). Функция Loop(), как следует из ее названия, выполняет последовательный цикл. https://www.arduino.cc/en/Reference/Loop?setlang=en, @leoc7

Пожалуйста, будьте точнее, предоставьте схему. Вы уверены, что подключение правильное?, @leoc7

Спасибо, что комментируете. Да, соединения были правильными. Тем временем на мой вопрос был дан ответ, и проблема решена: SoftwareSerial не может отправлять и получать одновременно., @fhpa


1 ответ


2

Если серийный номер программного обеспечения ESP8266 похож на серийный номер программного обеспечения Arduino, он не сможет получать данные во время передачи. Это строго полудуплекс.

Чтобы протестировать вашу систему, вам необходимо протестировать передачу и прием совершенно отдельно, а это означает, что какое-то внешнее устройство отправляет данные, которые вы можете попытаться получить.

,

Спасибо Маженко за ваш ответ и решение проблемы. Вы правы, говоря, что SoftwareSerial работает строго в полудуплексном режиме. Я тестировал его со вторым ESP, только отправляя данные и получая со второго ESP. Кстати, мне нужно только получать данные. Я думаю, вы сэкономили мне много времени!, @fhpa