Serial sniffer: чтение журналов Serial.print комплекта разработки Arduino esp32 из другого

(Я использую комплекты разработки ESP32 с API Arduino.)

На моем dev kit 1 установлена моя прошивка; и я хочу измерить потребляемый им ток, поэтому мне не нравится подключать USB.

Поскольку мне нужно прочитать журналы из dev kit 1, я хочу подключить другой dev kit, который собирает журнал из первого через UART.

Прошивка dev kit 1 такая, какая она есть, но на dev kit 2 я написал такую вещь:

#include <Arduino.h>
#include <Hardware.h>

HardwareSerial Reader();

void setup() {
    Serial.begin(115200);
    Reader.begin(115200, SERIAL_8N1, 16, 17); 

}

void loop() {
    while(Reader.available()) { 
        Serial.print(Reader.read());
    }
}

Проводка выглядит следующим образом:

Комплект разработчика 1 Электропроводка Комплект разработчика 2 (сниффер)
TXD <=> RXD (16)
RXD <=> TXD (17)
ВНД <=> ВНД

Но это не работает, то есть я ничего не вижу в серийном выпуске dev kit 2 на компьютере. Есть какие-нибудь идеи?

[ОБНОВЛЕНИЕ] Как было предложено @juraj, я просто подключил TX к TX, RX к RX и GND к GND и удалил Serial.begin (115200) из прошивки, запущенной в dev kit 1. Прошивка Dev kit 2 так же проста, как:


void setup() {
  Serial.begin(115200);
  //Serial.printf("Serial2 logger RX (%d)<=>TX & TX(%d)<=>RX @ 115200 bauds", RX, TX); Serial.println();
}

void loop() {
  static unsigned lastHeartbeat = 0;

  const unsigned now =millis();
  if (now-lastHeartbeat > 4000) {
    lastHeartbeat = now;
    Serial.println("Heartbeat");
  }
}

Обратите внимание, что в dev kit 1 я закомментировал строку Serial.begin(115200).

На компьютере не отображаются журналы kit 1.

Схема подключения этой установки:

, 👍1

Обсуждение

Но это не работает - не является полезным описанием какой-либо проблемы... что вы ожидали, что произойдет? ... что происходит на самом деле?, @jsotola

Поскольку вы просто хотите переслать последовательные данные, используйте в скетче не "print ()", а "write()". В противном случае `print ()' будет интерпретировать данные перед отправкой, и вы просто захотите переслать необработанные данные. С TXD и RXD, я полагаю, вы имеете в виду (в зависимости от обозначения) TX0 и RX0 (или U0_TXD и U0_RXD), поэтому GPIO1 и GPIO3 на плате прошивки?, @chrisl

да, TXD - это TX0, это GPIO1, а RXD - это RX0, это GPIO3. Я мог бы создать макрос для преобразования отпечатков при записи, но тогда было бы проще подключить ISR и записать на контакты самостоятельно. А ты как думаешь?, @Stéphane de Luca

Serial.write(Reader.read());, @Juraj

если вы просто подключите RX к RX и TX к TX, CH340 на плате разработчика будет считывать его напрямую и отправлять на USB. загрузите Blink или любой другой скетч без Serial.begin в esp32, @Juraj

HardwareSerial Reader(); должно быть HardwareSerial Reader;, @Majenko

@juraj Я пробовал это, но ничего не получил. USB-регистратор не показывает никаких журналов. Я обновляю вопрос простой фотографией подключения платы, на всякий случай, если я сделал что-то не так., @Stéphane de Luca


1 ответ


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

0

Наконец-то мне удалось заставить это сработать.

Окончательная проводка:

Комплект 1 комплект 2
Прошивка для шпионажа Фирма, которая шпионит
RXD 17
TXD 16
ВНД ВНД

Шпионская прошивка использует Serial2


#define USE_READER true


#if USE_READER
#define USE_SERIAL2 true

#if USE_SERIAL2
    #define TX 17
    #define RX 16
    #define Reader Serial2
#else
    #include "SoftwareSerial.h"
    #define TX 12
    #define RX 13
    SoftwareSerial Reader;
#endif
#endif

void setup() {
  Serial.begin(115200);

#if USE_READER
  Serial.printf("Serial logger RX (%d)<=>TX & TX(%d)<=>RX @ 115200 bauds", RX, TX); Serial.println();

  #if USE_SERIAL2
  Reader.begin(115200);
  #else
  Reader.begin(115200, SWSERIAL_8N1, RX, TX, false);
  #endif
  #endif
}

void loop() {
  static unsigned lastHeartbeat = 0;

  const unsigned now =millis();
  if (now-lastHeartbeat > 4000) {
    lastHeartbeat = now;
    Serial.println("Heartbeat");
  }

  #if USE_READER
  if (Reader.available()) {
    
    Serial.write(Reader.read());  
  }
  else {
    #endif
    
    //Serial.print(".");
    delay(500);
    
    #if USE_READER
  }
  #endif
}

Подсмотренная прошивка

Вы оставляете все как есть. Не удаляйте Serial.begin(115200);.

Фотография макета:

,