Время ожидания соединения Wi-Fi истекло, если учетные данные получены через последовательный терминал

Я внедрил небольшую процедуру подключения к Wi-Fi в свой проект ESP32. Доступные сети печатаются с индексом, затем я ввожу индекс и получаю из него имя сети. Пароль вводится по серийному номеру в виде открытого текста.

Перед подключением я распечатываю учетные данные и, таким образом, могу убедиться, что они правильно прочитаны в строки const char *.

К сожалению, при использовании этой процедуры время соединения с моей точкой доступа истекает. Я также попытался переопределить строки жестко закодированными значениями, и тогда соединение работает как положено.

while (!Serial.available()) {
    // (здесь реализован таймаут)
}
String index_s = Serial.readStringUntil('\n');
long index = index_s.toInt();

// { то же самое, что и выше }
String passw = Serial.readStringUntil('\n');

const char *ssid = WiFi.SSID(index).c_str();
const char *pass = passw.c_str();

// с этим это работает:
// ssid = "my_network";
// pass = "мой_пароль";

Serial.printf("connecting to %s using %s", ssid, pass);
WiFi.begin(ssid, pass);

, 👍0

Обсуждение

удаляю комментарии сейчас, так как они не нужны :p, @Jaromanda X

Возможный дубликат Сравнение строк при использовании последовательного порта, @Juraj

Как видите, я не сравниваю строки. Как вы думаете, как я мог найти упомянутый вами вопрос? Да, это та же причина. Нет, это не та же самая проблема., @Julian F. Weinert


1 ответ


1

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

passw.trim();

Сделал свое дело. String.trim() удаляет \r и, таким образом, пароль принимается.

,