В рамках данного проекта мы узнаем, как установить последовательную связь между Arduino и ESP8266 и между ESP8266 и Arduino. Последовательная связь требуется, когда вы хотите передать данные датчика или любые данные с одного устройства на другое устройство. В нашем случае это NodeMCU на основе ESP8266 и Arduino.
Мы будем передавать данные датчика DHT22 с Arduino на NodeMCU и NodeMCU на Arduino. Помимо этого, мы также увидим, как использовать программную библиотеку последовательной передачи данных на Arduino и Serial1 на ESP8266 NodeMCU, чтобы вы могли передавать данные через другой последовательный порт, который нам будет полезен.
Как и в этом проекте, мы будем передавать данные датчика DHT с Arduino на NodeMCU и с NodeMCU на Arduino. Поэтому нам понадобится библиотека DHT22 для работы этого датчика. Помимо этого стоит позаботиться о преобразовании напряжения с помощью делителя напряжения. ESP8266 работает от 3,3 В, а контакт Arduino Tx подает 5 В, что может повредить ваш NodeMCU ESP8266. Используя делитель напряжения, вы уменьшаете 5 В на линии Arduino Tx до 3,3 В для линии Rx ESP8266.
Мы подключили датчик DHT22 к Arduino Uno. Он будет передавать данные датчика в NodeMCU через последовательный порт. Схема для отправки данных с Arduino на ESP8266 NodeMCU с делителем напряжения представлена далее.

Если с делителем напряжения то не работает. Вы можете попробовать прямое подключение Tx/Rx. Но есть риск повредить ваш NodeMCU, потому что Arduino обеспечивает 5 В, а NodeMCU нужно 3,3 В. Вот схема для отправки данных с Arduino на ESP8266 NodeMCU без делителя:

Код для Arduino:
#include "DHT.h"
#include <SoftwareSerial.h>
#define DHTPIN 2
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
SoftwareSerial espSerial(5, 6);
DHT dht(DHTPIN, DHTTYPE);
String str;
void setup(){
Serial.begin(115200);
espSerial.begin(115200);
dht.begin();
delay(2000);
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("H: ");
Serial.print(h);
Serial.print("% ");
Serial.print(" T: ");
Serial.print(t);
Serial.println("C");
str =String("coming from arduino: ")+String("H= ")+String(h)+String("T= ")+String(t);
espSerial.println(str);
delay(1000);
}
Код для NodeMCU на ESP8266:
void setup() {
Serial.begin(115200);
while (!Serial) {
;
}
}
void loop() {
if (Serial.available()) {
Serial.write(Serial.read());
}
}
Библиотека SoftwareSerial была разработана для обеспечения последовательной связи на других цифровых выводах Arduino с использованием программного обеспечения для воспроизведения функциональности. С помощью этой библиотеки мы можем активировать несколько последовательных портов на Arduino. Здесь мы используем цифровые контакты 5 и 6 для последовательной связи.
Выберите Последовательный порт, с которого вы хотите видеть данные. Поскольку мы подключили датчик к Arduino, мы можем видеть данные на ESP8266 через последовательную связь. Выберите порт ESP8266. Откройте последовательный монитор. Теперь вы сможете видеть данные, поступающие от Arduino.

Теперь подключите выводы датчика DHT22 на ESP8266. Он будет передавать данные датчика с NodeMCU на Arduino через последовательную связь.

Код для Arduino:
void setup() {
Serial.begin(115200);
while (!Serial) {
;
}
}
void loop() {
if (Serial.available()) {
Serial.write(Serial.read());
}
}
Код для NodeMCU на ESP8266:
#include "DHT.h"
#include <SoftwareSerial.h>
#define DHTPIN 4
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
String str;
void setup(){
Serial.begin(115200);
Serial1.begin(115200);
dht.begin();
delay(2000);
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("H: ");
Serial.print(h);
Serial.print("% ");
Serial.print(" T: ");
Serial.print(t);
Serial.println("C");
str =String("coming from ESP8266: ")+String("H= ")+String(h)+String("T= ")+String(t);
Serial1.println(str);
delay(1000);
}
Serial1 использует UART1, вывод TX – GPIO2. UART1 нельзя использовать для приема данных, потому что обычно его контакт RX занят для подключения чипа флэш-памяти. Чтобы использовать Serial1, вызовите Serial1.begin(baudrate). После загрузки программы вы увидите мигание синего светодиода из-за того, что данные отправляются на GPIO2 (TX).
Выберите последовательный порт, с которого вы хотите видеть данные. Откройте последовательный монитор. Теперь вы сможете видеть данные, поступающие от ESP8266.

Вот так можно просто наладить связь между Arduino и ESP8266 (NodeMCU).
NodeMCU ESP8266 CP2102
Модуль NodeMCU на основе беспроводного микроконтроллера ESP8266 (ESP-12F) и преобразователя интерфейсов CP2102