ты можешь попробовать 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
Отлично, настроил как вы сказали, и получил осциллограмму на 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");
}