Arduino Pro micro Serial communication проблема с узлом MCU

Недавно я купил Arduino Pro micro на базе ATmega32U4. Я использую библиотеку клавиатуры и взаимодействую с моим ПК через USB.

Я пытаюсь создать последовательную связь между Arduino Pro micro и NodeMCU через контакты Rx, Tx (0, 1), но это не работает, т.Е. Не дает никакого вывода с кодом ниже на Pro micro:

#include <Keyboard.h>

int incomingByte;
unsigned long lastTime;
    
void setup() {
  Serial.begin(115200);
  Keyboard.begin();
}
    
void loop() {
  if (Serial.available() > 0) {
    lastTime = millis();
    String payload = "";
    
    while (1) {
      if (millis() - lastTime > 1000)
        break;
    
      incomingByte = Serial.read();
      Serial.println(incomingByte);
    }
  }

На NodeMCU есть простой скрипт flashed, который только записывает на serial некоторые символы в задержанном цикле.

При использовании библиотеки SoftwareSerial с Pro micro она работает нормально, т.Е. я могу читать данные, отправленные NodeMCU на пользовательских контактах Rx, Tx (9, 10). Я попробовал это сделать, потому что подумал, что, поскольку Pro micro взаимодействует с ПК, оригинальные контакты Rx и Tx заняты. Но после некоторых исследований я узнал, что в отличие от других плат Arduino, таких как UNO, Pro micro не использует их для связи через USB.

Хотя пользовательский сериал с использованием библиотеки SoftwareSerial работает, он слишком медленный и ненадежный, т.е. передача строки длиной 10 занимает 2-3 секунды. Кроме того, это ненадежно, потому что при отправке строк большей длины строки поступают неполными или иногда данные повреждаются (символы перемешиваются).

Опять же, это не моя главная забота, если я могу использовать оригинальные контакты Rx, Tx, как обычно, на любых других платах Arduino, это решает мою проблему.

Вот моя принципиальная схема:

Circuit

, 👍0

Обсуждение

Проблема в вашем дурацком методе последовательного чтения. Вы предполагаете, что есть данные для чтения, когда их нет. Прочтите это: https://majenko.co.uk/blog/reading-serial-arduino, @Majenko

Я, наверное, что-то пропустил, но: почему вы вообще используете SoftwareSerial на pro micro?, @timemage

@timemage Да, ты это пропустил. Он объяснил почему - он предположил, что контакты 0/1 были взяты с USB, затем выяснил обратное и теперь пытается использовать их с Serial вместо SoftwareSerial., @Majenko

Последовательное устройство обычно представляет собой последовательное соединение USB, независимо от того, управляется оно контактами 0/1 или нет. Для контактов 0/1 с собственным USB-соединением необходимо использовать Serial1. Я думаю. Прошло много времени с тех пор, как я использовал Arduino с родным USB..., @Majenko

Меня не смущает, как Serial и Serial1 работают на Arduinos на базе 32u4. Я не вижу никаких признаков того, что используется что-то другое, кроме SoftwareSerial., @timemage

@Majenko спасибо, замена Serial на "Serial1" сработала для меня., @Rishabh


1 ответ


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

0

Контакты RX и TX Arduino Micro являются Serial1. Замените Serial в вашем скетче на Serial1 для связи с esp8266 по контактам RX и TX.

,

К счастью, я узнал об этом прошлой ночью, и это тоже сработало. Спасибо за ваш вклад @Juraj. Контакты Rx и Tx (0 и 1) на Arduino Pro Micro определены с помощью Serial1, поэтому замена "Serial" на Serial1 сработала для меня. Спасибо всем за проявленный интерес., @Rishabh