Подключение к WiFi на ESP32 с использованием учетных данных с SD-карты
Я хочу использовать SD-карту для предоставления учетных данных для входа в ESP32. У меня уже есть ESP32, который считывает относительные данные с SD-карты и сохраняет их в виде массива символов на ESP, но когда я использую эти массивы в функции WiFi.begin, он никогда не подключается.
Это как-то связано с тем, как работают массивы, или я делаю что-то не так?
Соответствующий код:
if (dataFile) {
Serial.println("File is available");
while (dataFile.available()) {
byte currbyte = dataFile.read();
if (currbyte == 58) {
reading = 1; //Начнем чтение данных
i = 0;
}
while (reading == 1 and s == 0) {
byte currbyte = dataFile.read();
//Serial.print(currbyte);
//Serial.println(char(currbyte));
if (currbyte == 13) {
s = 1;
reading = 0 ;
}
ssid[i] = char(currbyte);
i++;
//Serial.println(ssid);
}
while (reading == 1 and s == 1) {
byte currbyte = dataFile.read();
//Serial.print(currbyte);
//Serial.println(char(currbyte));
if (currbyte == 13) {
s = 2;
reading = 0 ;
}
password[i] = char(currbyte);
i++;
//Serial.println(пароль);
}
}
dataFile.close();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED and count < 20) {
Serial.println("Connecting to WiFi..");
delay(1000);
count++;}
@Tanenthor, 👍0
Обсуждение1 ответ
▲ 1
вы добавляете '\13' в строку SSID и пароль вместо завершающего нуля, потому что ssid[i] = char(currbyte);
работает и для 13
используйте readBytesUntil()
char ssid[33];
int l = file.readBytesUntil('\n', ssid, sizeof(ssid));
if (l > 0 && ssid[l-1] == '\r') {
l--;
}
ssid[l] = 0;
,
@Juraj
Смотрите также:
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Контакты RX и TX на esp32
- Почему OTA не работает с платой ESP32-CAM Ai-Thinker?
- ESP32 открывает "captive portal" при подключении
- Аналоговое чтение не работает при использовании WiFi
- Автоматическая веб-страница ESP32 AP
- Чтение данных из Google Таблиц с помощью Nodemcu
- WiFiClient::connected() не работает
Привет, у меня есть данные SD-карты без проблем, однако я не могу подключиться к Wi-Fi, когда эти данные хранятся в виде массивов., @Tanenthor
Хорошо, я знаю, что код работает, если я вручную ввожу SSID и пароль . Последовательная печать массивов показывает, что они визуально кажутся правильными и правильно вызываются для функции., @Tanenthor
это проясняет ... один из способов отладки этой проблемы - записать данные обратно на SD-карту и изучить результат (я предполагаю, что вы использовали Mac или ПК для записи данных на SD-карту) .. ... возможно, используйте отдельное имя файла для каждого поля данных .... также обновите свой вопрос, указав информацию в своем последнем комментарии., @jsotola
Запись массивов для SSID и пароля в файл на SD-карте возвращает правильные результаты. Итак, как я и спросил, это как-то связано с массивами или я делаю что-то еще?, @Tanenthor
не записывайте массив на SD-карту... записывайте содержимое массива....строки SSID и пароля...проверьте, что в строках нет скрытых символов, @jsotola
я использовал файл данных.println(ssid); dataFile.println(пароль); Который, когда я проверил файл на своем компьютере, показал точную правильную строку символов ASCII., @Tanenthor
вы добавляете «\ 13» в строку SSID и пароль вместо завершающего нуля, @Juraj
Где именно это добавить? В моем wifi.begin или когда я закончу читать SSID с SD-карты?, @Tanenthor
ssid[i] = char(currbyte);
работает и для 13, @Juraj