Последовательная связь между ESP8266 и Arduino Uno
Я хочу отправить данные с Arduino на ESP8266. Я сделал все соединения RX и TX. Проблема в том, что данные отправляются не каждую секунду, а останавливаются после одного байта. Когда я отсоединяю кабель Arduino, данные считываются.
Мой код Arduino:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.write("50");
delay(1000);
}
Мой код ESP8266:
void setup() {
Serial.begin(9600);
// подключаемся к вайфаю.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println("Connected !");
}
void loop() {
Serial.print(Serial.readString());
}
@, 👍1
2 ответа
Поскольку вы Arduino Uno, он имеет только один Serial
. Этот последовательный порт можно использовать для передачи данных в режиме USART на другое последовательное устройство, а также для просмотра любых данных отладки в последовательном терминале.
Однако обе функции нельзя использовать одновременно. Пара Tx Rx Arduino может быть подключена к одной паре другого устройства, то есть либо к компьютеру через кабель, либо к Tx Rx ESP8266.
Но если вам действительно нужно подключить Uno к компьютеру и одновременно отправить данные на ESP8266, вам придется использовать Библиотека SoftwareSerial для преобразования любого цифрового вывода в вывод Tx Rx и подключения их к ESP8266 для передачи данных.
Как объяснил goddland_16. Использование библиотеки Software Serial решит проблему. Код приведен ниже. При инициализации другого цифрового вывода в качестве коммуникационного контакта прерывание между Tx и Rx и ESP8266 отделяется.
Код Arduino UNO/Nano:
/*
* bismillah hir rahman nir raheem
* UNO/Nano = Pin 7 & Pin 8
* Note: Uno and ESP8266 cross connection
*/
#include <SoftwareSerial.h>
SoftwareSerial ArduinoUno(7,8);
String f;
void setup() {
Serial.begin(9600);
ArduinoUno.begin(115200);
}
void loop() {
float i = (random(100) + 1);
float j = (random(100) + 1);
f = String('H') + String(i) + String('T') + String(j);
ArduinoUno.println(f);
delay(2000);
}
Код ESP8266:
/*
* bismillah hir rahman nir raheem
* ESP8266 = Pin D7 & Pin D8
* Note: Uno and ESP8266 cross connection
*/
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
SoftwareSerial NodeMCU(D7,D8);
void setup() {
Serial.begin(9600);
NodeMCU.begin(115200);
pinMode(D7,INPUT);
pinMode(D8,OUTPUT);
}
void loop() {
String content = "";
char character;
while (NodeMCU.available()) {
character = NodeMCU.read();
content.concat(character);
}
if (content != "") {
Serial.println(content);
}
Serial.println("Temperature");
Serial.println(content.substring(1, 6));
Serial.println("Humidity");
Serial.println(content.substring(7, 12));
delay(2000);
}
- Плохие данные : Последовательная связь Arduino Mega и NodeMCU
- Проблемы при использовании SoftwareSerial
- AT-команда не отвечает на последовательный монитор
- Последовательная связь ESP8266 с ATMega328P
- ESP8266 12e Arduino IDE выводит мусорные значения на serial monitor
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Как связаться с датчиком через порты RX/TX Arduino?
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
Привет и добро пожаловать на биржу стека Arduino. Пожалуйста, улучшите свой ответ, объяснив всем, что делает ваш код и как он решает проблему., @sa_leinad