Как использовать 2 последовательных порта, когда библиотека WifiEsp использует один из обоих

Я безуспешно пытаюсь получить данные от DataPort и передать их на свой компьютер через WifiPort, используя модуль Wi-Fi ESP8266. Каждую секунду последовательные данные поступают на DataPort с другого устройства.

Инициализация следующим образом:

#include <SoftwareSerial.h>
#include "WiFiEsp.h"
SoftwareSerial DataPort(10, 11); // RX, TX
SoftwareSerial WifiPort(8, 9); // RX, TX

В настройках:

Serial.begin(9600); 
DataPort.begin(9600); 
WifiPort.begin(9600); 
WiFi.init(&WifiPort);

В цикле я делаю:

//ЧАСТЬ WIFI
WifiPort.listen();
WiFiEspClient client = server.available();
if (client) {
 //.... бла... бла... бла...
}


//ВХОДЯЩАЯ СЕРИЙНАЯ ЧАСТЬ
DataPort.listen();
while (DataPort.available() > 0)
{
   char c = DataPort.read();
   str += c;
   if(c == '/')
   {
      Serial.println(str);
      str="";
      break;
   }
}

ЧАСТЬ WIFI работает нормально, если я изолирую ВХОДЯЩУЮ ПОСЛЕДОВАТЕЛЬНУЮ ЧАСТЬ, а ВХОДЯЩАЯ ПОСЛЕДОВАТЕЛЬНАЯ ЧАСТЬ работает нормально без ЧАСТИ WIFI. Итак, как я могу получать данные на DataPort и передавать их, когда мой компьютер запрашивает их через ESP8266 на WifiPort?

, 👍0

Обсуждение

пожалуйста, выкладывайте код одним блоком, а не кусками, @jsotola

Да Юрай, а как включить DataPort из WiFiPort или получить через вайфай последовательные входящие данные? Что такое хороший код?, @Teddol

DataPort получает только последовательные данные каждую секунду. Тх не используется. И я хочу получить эти данные с помощью ESP8266., @Teddol


1 ответ


1

Прошивка esp8266 AT не ждет, пока вы прослушаете экземпляр SoftwareSerial. Если есть соединение с сервером, он отправляет +IPD и данные. Если экземпляр SoftwareSerial не слушает, информация о клиентском соединении теряется.

Вы должны постоянно прослушивать esp8266, поэтому вы не можете использовать два экземпляра SoftwareSerial.

Вы можете использовать контакт RX Uno для получения данных через аппаратный последовательный порт, если вы принимаете данные только через DataPort и печатаете только в SerialMonitor.

,

Я видел пример экземпляра SoftwareSerial здесь: https://www.arduino.cc/en/Tutorial/TwoPortReceive. Я думаю, что я мог бы сделать это с Esp8266..., @Teddol

это то, что у вас есть сейчас. Вы должны постоянно слушать esp8266, поэтому вы не можете использовать два экземпляра SoftwareSerial., @Juraj

Извините, но я не понимаю и не вижу, как я могу решить свою проблему., @Teddol

подключите устройство DataPort к контакту RX Uno, удалите SoftwareSerial для DataPort и прочитайте данные с устройства с помощью Serial.read(), @Juraj