Подключение NodeMCU для Serial1

Я пытаюсь получить данные телеметрии для отправки Serial1 на плате NodeMCU. Я читал, что TX (по умолчанию) сопоставлен с выводом D4.

В конечном счете, появится Raspberry, который будет прослушивать эти сообщения, но у меня его пока нет. Поэтому, чтобы быстро проверить это, я подключил осциллограф с последовательным декодированием к D4, а GND зонда - к GND на NodeMCU. Проблема в том, что я не получаю никаких указаний на активность из D4, когда я запускаю следующий код:

Serial1.begin(9600);
Serial1.printf("some text");

Правильно ли я подключаю датчик? Я пропустил еще одну последовательную команду в скетче?

Когда я перехожу к RPi, должен ли я объединить обе платы вместе, а затем записать TX (D4) в RX на RPi?

, 👍5

Обсуждение

https://community.blynk.cc/t/how-to-use-2-serial-ports-or-more-in-nodemcu/20282/2 . один из ответов настаивает на том, что NodeMCU не должен быть подключен к компьютеру, чтобы иметь возможность использовать serial1, @Tirdad Sadri Nejad


2 ответа


Лучший ответ:

3

Вы можете выполнить Serial.swap() в setup(), чтобы заменить Serial на вывод RX / TX. Затем Serial отображается на D7 как RX, а D8 - как TX (и вы можете подключить туда какой-нибудь последовательный модуль).

Мост с перемычкой провода D4 pin с выводом TX. вывод Serial1 будет передан через USB-чип на последовательный монитор, и вы увидите отпечатки на Serial1.

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

,

0

Этот код работал у меня как ведомый Modbus

Требуется эта библиотека <ModbusRtu.h>

#include <ModbusRtu.h>
unsigned long TIME = 0;
unsigned long LASTTIME = 0;
unsigned long INTERVAL = 5000; 

int i = 0;
// массив данных для общего доступа к сети Modbus
uint16_t au16data[16] = {
  3, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, 11 };

/**
 *  Modbus object declaration
 *  u8id : node id = 0 for master, = 1..247 for slave
 *  port : serial port
 *  u8txenpin : 0 for RS-232 and USB-FTDI 
 *               or any pin number > 1 for RS-485
 */
Modbus slave(1,Serial,0); // это slave @1 и RS-232 или USB-FTDI

void setup() {
  Serial.swap();
  Serial.begin( 19200 ); // скорость передачи 19200
  Serial1.begin( 19200 );
  slave.start();
}

void loop() {

  if ((millis() - TIME) > INTERVAL) { 
    i++;

    if(i == 16){
      i = 0;

      for (int ii = 0; ii < 16; ii++)
      {
        au16data[ii] = 0;
      }
    }

    au16data[i] = 1;

    TIME = millis();
  }

  slave.poll( au16data, 16 );
}
,

Я не уверен, как это отвечает на вопрос., @StarCat

Поскольку вышеупомянутый тип проводки я сделал, но не могу найти правильную библиотеку кода, после некоторых исследований я нашел подходящую библиотеку. Поэтому я делюсь этой платформой, чтобы помочь другим. Спасибо!, @KATHEESKUMAR