LOLIN C3 mini работа Serial

ты можешь попробовать Serial1 и/или Serial2 вместо Serial? и пощупать пины в соотв. со схемой что я приводил.
я просто плату найти не могу, чтоб тебе что то конкретно подсказать.

Так наверно, USB надо отключить?
А питание от БП?

а у меня остались только с CH343

найду плату скажу, а гадать или в конечном итоге сказать “мне так запомнилось”, не хочу.

@vasya00
вот поднял заказы, есть она у меня где то, аж две


завтра покопаю закрома, найду, чем смогу помогу.

В WOKWI на пине TX норм работает. USB , естесственно не подключено.

Спойлер

Спойлер

Спойлер
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello, ESP32-C3!");
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10); // this speeds up the simulation
}

если usb cdc on boot disabled то терминал в arduino ide виснет при попытке что то отправить туда…

Я о том , чтобы физически отсоединить USB. Один порт не может работать сразу на два устройства.

Попробуйте так

Спойлер
void setup() {

  Serial1.begin(9600, SERIAL_8N1, 0, 1);//
  Serial1.println("Hello, ESP32-C3!");
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10); // this speeds up the simulation
}

Включёна отладка через usb или пины тупо не припаяны, проверить.

собрал из большого проекта минимальный пример с двумя UART, попробуйте у себя.

Спойлер
static constexpr int maxSizeGPSbuf = 2048;
char bufGPSdata[maxSizeGPSbuf];
int posBufGPS = 0;
static constexpr char pinRSTmodem = 4;
constexpr int maxSizeRespBuf = 2048;
int posModemBuf;
char respBufModem[maxSizeRespBuf];  // входящий буфер модема

void clearRespBuf(void) {
  memset((char *)&respBufModem[0], '\0', maxSizeRespBuf);
  posModemBuf = 0;
}

void clearGPSbuf(void) {
  posBufGPS = 0;
  bufGPSdata[posBufGPS] = '\0';
}

void setup() {
  // put your setup code here, to run once:
  Serial1.begin(9600, SERIAL_8N1, 3, 1);
  Serial.begin(9600, SERIAL_8N1, 20, 21);  // GPS
}

void loop() {
  // gps device
  while (Serial.available()) {
    char inByte = Serial.read();
    if (inByte > 0) {
      //ESP_LOGD((const char *)"-gps-", "%d", inByte);
      if (posBufGPS >= maxSizeGPSbuf) {
        clearGPSbuf();
      }
      bufGPSdata[posBufGPS] = inByte;
      if (inByte == 10) {
        if ((posBufGPS > 0) && ((bufGPSdata[posBufGPS - 1]) == 13)) {
          bufGPSdata[posBufGPS + 1] = '\0';
          static int tmpShowLog = 0;
          if ((++tmpShowLog) >= 507) {
            ESP_LOGI((const char *)"Response GPS", "%s", (char *)&bufGPSdata);
            tmpShowLog = 0;
          }
          clearGPSbuf();
          return;
        }
      } else {
        ++posBufGPS;
      }
    }
  }
  // put your main code here, to run repeatedly:
  bool inRespLine = false;     // флаг пришла целая строка \r\n окончание
  if (Serial1.available()) {   // если что то пришло из модема
    char br = Serial1.read();  // читаем пришедший байт
    if (br > 0) {              // если он больше нуля
      //ESP_LOGD((const char *)"-", "%d", br);
      if (posModemBuf >= maxSizeRespBuf) clearRespBuf();
      respBufModem[posModemBuf] = br;  // добавляем пришедший байт в круговой буфер
      if (br == 10) {
        if ((posModemBuf > 0) && ((respBufModem[posModemBuf - 1]) == 13)) {
          inRespLine = true;
          respBufModem[posModemBuf + 1] = '\0';
          ESP_LOGD((const char *)"Response modem", "%s", (char *)respBufModem);
        }
      }
      if (!inRespLine) ++posModemBuf;
    }
  }
  // закончили обработку строки - очищаем буфер
  if (inRespLine) clearRespBuf();
  // restart modem
  static bool modon = true;
  static unsigned long timeron = 0UL;
  if ((millis() - timeron) >= 20000UL) {
    timeron = millis();
    if (modon) {
      ESP_LOGI((const char *)"modem", "OFF");
      // modem off
      digitalWrite(pinRSTmodem, HIGH);
      pinMode(pinRSTmodem, OUTPUT);
      delay(3000);
      digitalWrite(pinRSTmodem, LOW);
      delay(3000);
      modon = false;
    } else {
      // modem on
      digitalWrite(pinRSTmodem, HIGH);
      pinMode(pinRSTmodem, OUTPUT);
      delay(1500);
      digitalWrite(pinRSTmodem, LOW);
      delay(3000);
      Serial1.print("AT\r");
      ESP_LOGI((const char *)"cmd", "AT");
      modon = true;
    }
  }
}
Спойлер

[ 91202][D][testuart.ino:63] loop(): [Response modem] SMS Ready

[ 96257][I][testuart.ino:40] loop(): [Response GPS] $GPGSV,***********************************7*71

[104500][I][testuart.ino:93] loop(): [cmd] AT
[104528][D][testuart.ino:63] loop(): [Response modem] 

[104532][D][testuart.ino:63] loop(): [Response modem] NORMAL POWER DOWN

[ 20000][I][testuart.ino:77] loop(): [modem] OFF
[ 44500][I][testuart.ino:93] loop(): [cmd] AT
[ 48699][I][testuart.ino:40] loop(): [Response GPS] $GPGSV,4,4,13,32,15,328,23*46

[ 60000][I][testuart.ino:77] loop(): [modem] OFF
[ 84500][I][testuart.ino:93] loop(): [cmd] AT
[ 97242][I][testuart.ino:40] loop(): [Response GPS] $GNRMC*********************************424,,,A*67

[100000][I][testuart.ino:77] loop(): [modem] OFF
[124500][I][testuart.ino:93] loop(): [cmd] AT

так должны быть настройки

Itegrated USB JTAG тоже включить.

Отлично, настроил как вы сказали, и получил осциллограмму на 20 пине, ура!!

void setup() {
  Serial.begin(9600);//
}

void loop() {
  delay(100);
  Serial.println("Hello, ESP32-C3!");
}

Но при этом я не вижу ничего в терминале, до этого было наоборот. Как я понял, получить сообщение в терминале и на 20 пине, одновременно, не возможно.
Таким образом, как я понял, что бы оставить вывод и в терминал и на какой-нибудь пин, нужно задействовать два порта, например так?

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  delay(100);
  Serial.println("Hello, for arduino IDE terminal");
  Serial1.println("Hello, for PIN0");
}

Но с таким скетчем плата просто перестает определяться.

Да, я тут не совсем прав. Пин 0 не работает. Работает пин 3.
Не заметил, потому что на передачу только проверил.

У andycat всё верно

Спойлер
void setup() {

  Serial1.begin(9600, SERIAL_8N1, 3, 1);
  Serial.begin(9600, SERIAL_8N1);
}

void loop() {
  static byte ind = '0';
  static bool space = false;

  if (!space) {
    Serial1.write(ind);//посылаем символ
    space = true;
    ind++;
  }
  else {
    Serial1.write(' '); //пробел
    space = false;
  }
  while (!Serial1.available());

  Serial.write(Serial1.read());//читаем вернувшийся символ,
  delay(300);   // и выводим в Serial в IDE
  if (ind > '9')
    ind = '0';
}
Спойлер

Спойлер

У меня ругается на указания пинов сериала

no matching function for call to ‘HWCDC::begin(int, SerialConfig, int, int)’

Если их не указывать компилируется, но плата перестает определяться

Указать надо только в Serial1. Serial только

 Serial.begin(9600, SERIAL_8N1);

В serial не позволяет указывать ничего кроме скорости. Но в результате сработал вариант

void setup() {
  Serial1.begin(9600, SERIAL_8N1, 3, 1);
  Serial.begin(9600);
}

void loop() {
  delay(100);
  Serial.println("Hello, for arduino IDE terminal");
  Serial1.println("Hello, for PIN1");
}