Подключение к 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++;}

, 👍0

Обсуждение

Привет, у меня есть данные 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


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;
,