Отправка данных из одного узла NodeMCU в другой узел NodeMCU с использованием последовательной связи

я использую NodeMCU (ESP8266) для связи с другим NodeMCU (ESP8266) с помощью последовательной связи. Потому что я использую ESP-NOW для связи, а ESP-NOW и Wi-Fi не могут работать вместе очень хорошо, поэтому я пытаюсь использовать этот вариант последовательной связи.

Вот как я соединил контакты:

   Slave ->   Master
    D1    ->   D2
    D2    ->   D1
    GND   ->   GND

Вот как выглядит мой скетч:

Отправитель.ino

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin(D1, D2); /* join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */
}

void loop() {
  // put your main code here, to run repeatedly:
   Wire.beginTransmission(5); /* begin with device address 8 */
   Wire.write("Hello ESP 2");  /* sends hello string */
   Wire.endTransmission();    /* stop transmitting */
  
   Wire.requestFrom(5, 4); /* request & read data of size 13 from slave */
   while(Wire.available()){
      char c = Wire.read();
    Serial.print(c);
   }
   Serial.println();
   delay(1000);
}

Приемник.ino

#include <Wire.h>

void setup() {
 Wire.begin(5);            
 Wire.onReceive(receiveEvent); /* register receive event */
 Serial.begin(115200);           /* start serial for debug */
}

void loop() {
 delay(100);
}

// function that executes whenever data is received from master
void receiveEvent(int howMany) {
 while (0 <Wire.available()) {
    char c = Wire.read();      /* receive byte as a character */
    Serial.print(c);           /* print the character */
  }
 Serial.println();             /* to newline */
}

Но связь вообще не работает, не уверен, где я ошибаюсь. Это может быть мудрым кодом или может быть связано с подключением, или может быть возможно, что соединение NodeMCU с NodeMCU вообще невозможно!

Спасибо!

, 👍-1

Обсуждение

Ваш код не отражает настройки вашего оборудования. I2C (проводная) связь по контактам SDA/SCL отличается от последовательной связи по скрещенным контактам RX/TX. Сначала вы должны решить, чего вы действительно хотите. Последовательная связь или I2C. Затем поищите примеры в Интернете. Поскольку вы уже используете Serial для отладки (SerialMonitor?), Вы можете использовать I2C для соединения двух ESP вместе. Но это не так просто, I2C использует специальный электрический режим передачи. Вы не можете просто соединить скрещенные пары контактов друг с другом. Вы также не должны использовать один и тот же адрес для обоих устройств., @Peter Paul Kiefer

Вы также использовали Wire.begin(D2,D3) для Отправителя и Wire.begin(5) для получателя. Я подозреваю, что это неправильно., @Peter Paul Kiefer

@Juraj на самом деле у меня есть отправка данных на мой сервер MQTT, подключенный к моей локальной сети. Которым нужен Wi-Fi доступ и с ESP-ТЕПЕРЬ я не могу сделать и то, и другое., @user3201500

@Peter можете ли вы предложить, как я могу это исправить?, @user3201500

проводная библиотека esp8266 не работает как подчиненная, @Juraj

@Juraj Ohk итак, я хочу отправить данные из одного nodemcu в другой, с проводным соединением, как я могу это сделать! Есть какие-нибудь предложения?, @user3201500

используйте только один esp8266, если они находятся так близко друг к другу, @Juraj

@Juraj Проблема, похоже, в том, что OP хочет использовать ESP-Now, который из описания звучит как другой протокол 2,4 ГГц от espressif, который также использует оборудование Wifi. Таким образом, первый NodeMCU не может подключиться к сети Wi-Fi, так как он уже занят протоколом ESP-Now., @chrisl

@chrisl, спасибо. теперь я понимаю. решение состоит в том, чтобы использовать только Wi-Fi, @Juraj


1 ответ


0

Как уже говорилось, ваш код использует интерфейс I2C (через проводную библиотеку), а не последовательный интерфейс (который является термином Arduino для UART). Они работают принципиально по-другому.

Поскольку вы общаетесь только между 2 устройствами, которые вы оба можете запрограммировать самостоятельно. Я бы отказался от интерфейса I2C. Это не дает вам здесь никаких преимуществ, но некоторые недостатки (например, то, что у вас не может быть реальной двунаправленной связи, так как подчиненный ничего не может сделать сам, только если об этом попросит хозяин).

Вместо этого вы должны использовать последовательный интерфейс (UART). Поскольку NodeMCU имеет только 1 полный аппаратный последовательный интерфейс, который вы уже используете для отладки, вы можете использовать библиотеку ESPSoftwareSerial для создания дополнительного последовательного интерфейса с помощью программного обеспечения. У него есть ограничения (в том, сколько интерфейсов может прослушиваться одновременно и как быстро может идти связь), но, скорее всего, это решит вашу проблему. Также Serial проще для начинающих, чем I2C.

,

Итак, не могли бы вы подсказать, что гораздо лучше обрабатывать быстрее и проще делать двустороннюю связь?, @user3201500

Кроме того, есть ли какой-либо пример, который вы можете предложить с помощью кода и схемы проводов для nodemcu в nodemcu, чтобы я мог лучше понять, @user3201500