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 ответ
Лучший ответ:
Наконец-то мне удалось заставить это сработать.
Окончательная проводка:
Комплект 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);
.
Фотография макета:
- Как прочитать входящие ШЕСТНАДЦАТИРИЧНОЕ значение из serial метод read ()?
- Ошибка чтения флэш-памяти, 1000
- Нужен ESP32 для использования 3 последовательных портов
- Не могу подключиться к плате ESP32 через последовательный порт
- Почему Serial.write() работает, а Serial.print() нет?
- Нужен пример того, как отправлять КОМАНДЫ AT на модуль SIm7000E GPS+LTE из ESP32 и читать эти ответы в последовательном мониторе
- ESP32 Arduino Bluetooth Serial не подключается повторно после отключения
- Управление потоком между устройством ESP32 и RS323
Но это не работает
- не является полезным описанием какой-либо проблемы... что вы ожидали, что произойдет? ... что происходит на самом деле?, @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