Arduino Nano и ESP32 считывают разные значения по последовательному интерфейсу

Я пытаюсь использовать лидар Neato xv11 с ESP32. Это должно выводить пакеты по 22 байта с начальным байтом 0xFA. Связь-8N1, а скорость передачи данных-115200 бод.

Когда я подключаю Lidar TX к контакту ESP32 RX2, я получаю данные, которые не имеют смысла, поскольку я получаю начальный байт каждые 9 (а иногда и 8) байтов. Однако, когда я запускаю тот же код на Arduino Nano, я получаю правильные 22-байтовые пакеты. Я даже подключил оба сразу и записал результаты в Putty. Это те данные, которые я получил.

// Arduino Nano Code
void setup() {
  Serial.begin(115200);
  Serial1.begin(115200);
}
void loop() {
  while (Serial1.available()) {
    Serial.println(Serial1.read(),HEX);
  }
}
// ESP32 Code
void setup() {
  Serial.begin(115200);
  Serial2.begin(115200, SERIAL_8N1, 16, 17);
}

void loop() {
  while (Serial2.available()) {
    Serial.println(Serial2.read(),HEX);
  }
}

ESP32

FA
A8
0
35
6D
11
17
71
3D
FA
A9
0
3D
12
97
12
10
D1
41
FA
AA
0
E1
E
14
12
E7
1F
FA
AB

Arduino Nano

FA
D8
74
35
6B
3
3D
1
7B
3
3B
1
8C
3
2B
1
9F
3
1C
1
A
1D
FA
D9
74
35
B2
3

, 👍1

Обсуждение

попробуйте запустить Serial с более высокой скоростью передачи данных ... также попробуйте использовать if вместо "while"., @jsotola

вы проверяли напряжение связи?, @Abel

Я проверил напряжение и попробовал преобразователи напряжения. ESP32 по-прежнему получает странные данные. Я также попытался использовать оператор if вместо while, но это не исправило ситуацию. Это очень странное поведение., @the electronics show


1 ответ


0

Arduino nano имеет только один аппаратный последовательный порт.

Таким образом, Serial1 должен быть программным сериалом, о котором вы не упомянули в своем сегменте кода.

Программное обеспечение serial не может надежно работать со скоростью 115200 бод.

Я бы ограничил последовательный программный код максимум 19200 бод.

Попробуйте использовать Arduino Mega с двумя аппаратными последовательными портами.

,

Нано работает исправно., @Gil

Если у вас есть прицел, проверьте уровни, чтобы убедиться, что они правильные. Возможно, вам не хватает инверсии. Мы знаем, что данные верны, поскольку Nano правильно их получает. Он имеет три аппаратных последовательных интерфейса, убедитесь, что вы используете правильный интерфейс и контакты., @Gil