Для электронщиков и радиолюбителей

Как организовать обмен данными между Arduino и NodeMCU на основе ESP8266

Как организовать обмен данными между Arduino и NodeMCU на основе

В рамках данного проекта мы узнаем, как установить последовательную связь между 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 с делителем напряжения представлена далее.

Как организовать обмен данными между Arduino и NodeMCU на основе

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

Как организовать обмен данными между Arduino и NodeMCU на основе ESP8266

Код для 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.

Как организовать обмен данными между Arduino и NodeMCU на основе ESP8266

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

Как организовать обмен данными между Arduino и NodeMCU на основе ESP8266

Код для 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 и NodeMCU на основе ESP8266

Вот так можно просто наладить связь между Arduino и ESP8266 (NodeMCU).