Проблемы при использовании SoftwareSerial
Я пытаюсь прочитать строку, отправленную с esp8266 esp01 на Arduino mega. Когда я использую обычные порты Rx и Tx, он работает правильно, но когда я инициализирую новый последовательный порт с помощью SoftwareSerial, на последовательном мониторе ничего не отображается.
Пожалуйста, помогите мне, так как я застрял и пытаюсь решить эту проблему уже несколько недель. Ниже приведен код для esp8266 и Arduino mega
Код для ARDUINO MEGA
#include<SoftwareSerial.h>
SoftwareSerial myS(4,5);
String data="true";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
myS.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if(myS.available()){
data=myS.readString();
}
Serial.println(data);
//Serial.write(data);
delay(2000);
}
Код для ESP8266
void setup() {
Serial.begin(9600); // Инициализируем последовательный интерфейс со скоростью 9600 бод
}
// функция цикла запускается снова и снова навсегда
void loop() {
if(Serial.available()>0) //Проверяем, есть ли данные в буфере
{
Serial.print("We got:");
Serial.print(char(Serial.read())); //Чтение байта последовательных данных и отправка обратно в последовательный монитор
}
else
{
Serial.println("Hello World..."); // Печатать слово Hello каждую секунду
delay(1000); // Подождем секунду
}
}
Более того, я также пробовал читать() вместо readString(), но это тоже не работает. Я также пробовал переключать контакты Rx и TX, что означает подключение Rx-> Tx, Tx-> Rx и наоборот, то есть Rx-> Rx и Tx-> Tx, но это не работает ни в одном случае. Любая помощь или предложение будут оценены. Спасибо
@Japjot singh, 👍0
Обсуждение1 ответ
SoftwareSerial работает только с несколькими выбранными контактами GPIO на Mega. В частности, те контакты, на которых есть PCINT.
Но это не имеет значения. Нет причин использовать SoftwareSerial
на Mega, за исключением исключительных обстоятельств. У вас есть четыре аппаратных UART на Mega, поэтому нет необходимости использовать SoftwareSerial
. Используйте настоящие выводы и объекты UART:
Serial -> RX(0) / TX(1)
Serial1 -> RX1(19) / TX1(18)
Serial2 -> RX2(17) / TX2(16)
Serial3 -> RX3(15) / TX3(14)
Просто замените все ссылки в коде на экземпляр SoftwareSerial
на Serial1
(удалите #include
и конструктор экземпляра объекта) и используйте TX1 и RX1 для подключения вашего модуля:
String data="true";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial1.available()){
data=Serial1.readString();
}
Serial.println(data);
//Serial.write(data);
delay(2000);
}
- Повреждение данных SoftwareSerial - поиск предложений
- AT-команда не отвечает на последовательный монитор
- Последовательная связь между ESP8266 и Arduino Uno
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Ошибка 'Serial' was not declared in this scope
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- Serial.availableForWrite против Serial.flush
- Arduino считывает состояние подключения устройства hc-05
Почему вы используете SoftwareSerial на Mega?!?!, @Majenko
Rx->Tx правильно, а не наоборот. Кроме того, у atmega2560 больше последовательных интерфейсов, поэтому softwareserial не лучший выбор., @Sim Son