INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
WLAN Zugangsdaten von SD-Karte lesen
01.01.2021, 22:23
Beitrag #1
WLAN Zugangsdaten von SD-Karte lesen
Hi zusammen,

erstmal wünsch ich allen hier ein frohes und gesundes neues Jahr.
Möge uns Corona bald verlassen!

Nun zum Ernst der Lage (Vorab: Ich bin noch ein Anfänmger in Sachen Arduino, also habt Erbarmen ;-):

Ich möchte meine WLAN-Zugangsdaten gerne von einer Textdatei lesen, die sich auf einer SD-Karte befindet (wieso, weshalb und warum soll erstmal nicht Thema sein ;-)

Die Textdatei heißt "wlan.txt" und enthält die folgenden Zeilen:

ssid:meineSSID
pass:meinPasswort

Das Auslesen klappt auch wunderbar nur die Verbindung anschließend nicht.
Hier ist mein Code:

Code:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <SPI.h>
#include <SD.h>

// Ich weiß, dass char-Arrays die bessere Wahl wären, aber ich bin es bisher noch gewohnt (aus PHP-Zeiten) mit Strings zu hantieren...
// Ich werde mich aber bessern, versprochen.
String APssid = "APssid";
String APpassword = "APpass";
// Wenn ich SSID und PASS nachfolgend direkt setze (also nicht über die Funktion unten von SD einlese) klappt die Verbindung.
// Wenn ich die Strings aber noch leer lasse und unten in der Funktion fülle, klappt die Verbidnung nicht...
String ssid;
String pass;

File wlan_txt;

ESP8266WebServer server(80);

void setup(void) {
  Serial.begin(9600);
  if (!SD.begin(15)) {
    Serial.println("initialization failed!");
    return;
  } else {
    config_auslesen(); // Funktion, siehe unten....
  }
  
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(APssid, APpassword);

  Serial.print("Verbinden mit SSID:");
  Serial.print(ssid); // In dieser Zeile wird die SSID korrekt ausgegeben --> wurde also von der SD-Karte eingelesen
  Serial.print(" und Passwort:");
  Serial.println(pass); // In dieser Zeile wird das Passwort korrekt ausgegeben --> wurde also von der SD-Karte eingelesen

  WiFi.begin(ssid,pass);

  int i =0;
  while (WiFi.status() != WL_CONNECTED && i <15) {
    delay(500);
    Serial.print(".");
    i++;
  }
  
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP()); // Leider erscheint hier im Serial-Monitor die Ausgabe "IP unset"
  Serial.print("Accesspoint address: ");
  Serial.println(WiFi.softAPIP()); // Das funktioniert prima....

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started"); // Funktioniert
  }

  server.begin();
  Serial.println("HTTP server started");// Funktioniert
}

void loop(void) {
  server.handleClient();
}

void config_auslesen() {
  // re-open the file for reading:
  wlan_txt = SD.open("wlan.txt");
  if (wlan_txt) {
    while (wlan_txt.available()) {
      String zeile=wlan_txt.readStringUntil('\n');
      String parameter_name = getValue(zeile, ':', 0);
      String parameter_val = getValue(zeile, ':', 1);

      if (parameter_name=="ssid") {    
        ssid=parameter_val;
        Serial.print("SSID gesetzt auf:");
        Serial.println(ssid);
      } else if (parameter_name== "password") {
        pass=parameter_val;
        Serial.print("Passwort gesetzt auf:");
        Serial.println(pass);
      }  
      
    }
    // close the file:
    wlan_txt.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening wlan.txt");
  }
}

String getValue(String data, char separator, int index)
{
    int found = 0;
    int strIndex[] = { 0, -1 };
    int maxIndex = data.length() - 1;

    for (int i = 0; i <= maxIndex && found <= index; i++) {
        if (data.charAt(i) == separator || i == maxIndex) {
            found++;
            strIndex[0] = strIndex[1] + 1;
            strIndex[1] = (i == maxIndex) ? i+1 : i;
        }
    }
    return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}


Wäre super, wenn mir einer weiterhelfen könnte.
Später wird die Txt-Datei noch mehr Zeilen mit noch mehr Parametern enthalten.
D.h. es wird nicht bei SSID und Passwort bleiben.

LG Daniel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 22:39 (Dieser Beitrag wurde zuletzt bearbeitet: 01.01.2021 22:41 von Tommy56.)
Beitrag #2
RE: WLAN Zugangsdaten von SD-Karte lesen
Lass Dir die Zeile mal zeichenweise im HEX-Code ausgeben und Du wirst wohl merken, dass Du hinten am Passwort und an der SSID einen Zeilenvorschub dran hast.

Deswegen funktioniert die Anmeldung nicht.

Genaueres nur gegen Miiteilung des Sketches in in Codetags.

Welchen Prozessor benutzt Du?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 22:46
Beitrag #3
Sad RE: WLAN Zugangsdaten von SD-Karte lesen
(01.01.2021 22:39)Tommy56 schrieb:  Lass Dir die Zeile mal zeichenweise im HEX-Code ausgeben und Du wirst wohl merken, dass Du hinten am Passwort und an der SSID einen Zeilenvorschub dran hast.

Deswegen funktioniert die Anmeldung nicht.

Genaueres nur gegen Miiteilung des Sketches in in Codetags.

Welchen Prozessor benutzt Du?

Gruß Tommy

Hey Tommy,

ich hab den Sketch doch in Codetags gesetzt ? Oder blick ichs jetzt ned?
Wie krieg ich denn den Zeilenvorschub weg? Wie gesagt bin ich grad noch im Anfängerstadium, wäre supi wenn du mir noch einen Hilfestupser geben könntest ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 23:00
Beitrag #4
RE: WLAN Zugangsdaten von SD-Karte lesen
(01.01.2021 22:46)basementmedia schrieb:  ich hab den Sketch doch in Codetags gesetzt ? Oder blick ichs jetzt ned?
Ok, habe ich übersehen - mein Fehler.
mache mal nach dem Einlesen (ungetestet):

Code:
....
String parameter_val = getValue(zeile, ':', 1);
Serial.print("Val>");
Serial.print(parameter_val);
Serial.print("<   Len: ");
Serial.println(parameter_val.lentgh());

// und dann
parameter_val = paramter_val.substring(0,parameter_val.lentgh() -1);
Serial.print(parameter_val);
Serial.println("<");

Dann siehst Du den Zeilenvorschub und das Ergebnis der Verkürzung. Da ich nicht weiß, ob Du nur '\n' oder auch '\r' dran hast, musst Du da probieren und zählen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 23:15
Beitrag #5
RE: WLAN Zugangsdaten von SD-Karte lesen
Hi,

Mein WLAN Name lautet (in der Textdatei):
WLAN1-YNY23B

in der Ausgabe kommt:

Code:
Val>WLAN1-YNY23B
<   Len: 13
WLAN1-YNY23B<

Geht leider trotzdem nicht (auch nach *.substring(0,ssid.length() -1);

Und wenn ich 2 Zeichen abziehe, hab ich nur noch "WLAN1-YNY23" in der seriellen Ausgabe ;-(

I bliggs ned!

Hast du noch n Tipp?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 23:32
Beitrag #6
RE: WLAN Zugangsdaten von SD-Karte lesen
Dann mach das gleiche mal für die SSID und Passwort.

Ich kann nicht auf Deinen Rechner schauen. Das musst Du selbst machen.

Code:
outHex(String s) {
  int len = s.length();
  char *st = s.c_str();
  for(int i=0; i<len;i++) {
    Serial.print(st[i],HEX);
    if (st[i] >=32 && st[i] < 128) Serial.print
    Serial.print(" ");
    if (st[i] >=32 && st[i] < 128) Serial.print(st[i]);
    else Serial.print(".");
    Serial.print(" ");
  }
  Serial.println();
}

Gib mal diese Funktion in den Code ein und lass Dir damit die SSID und das Passwort anzeigen. Poste das Ergebnis hier.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 23:48
Beitrag #7
RE: WLAN Zugangsdaten von SD-Karte lesen
(01.01.2021 23:32)Tommy56 schrieb:  Ich kann nicht auf Deinen Rechner schauen. Das musst Du selbst machen.

Schade eigentlich, das würde vieles einfacher machen ;-)

Die Ausgabe mit der Funktion für "WLAN1-YNY23B" ist

Code:
57 W 4C L 41 A 4E N 31 1 2D - 59 Y 4E N 59 Y 32 2 33 3 42 B D.

Grüßle
Daniel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2021, 00:29
Beitrag #8
RE: WLAN Zugangsdaten von SD-Karte lesen
Moin basementmedia,

wenn ich das richtig verstehe, suchst du in deiner Ausleseroutine nach ":" in der wlan.txt "yxy-yxz". Sprich Bindestrich.

nur mal so...

73 de Bernd
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Programm für WLAN Relais-Steuerung DO3GE 3 608 22.06.2021 09:13
Letzter Beitrag: hotsystems
  ESP32 Datei auf SD Karte durch Variable erstellen? Lor56 17 1.628 16.06.2021 13:40
Letzter Beitrag: hotsystems
  ESP8266 NodeMCU aus verbundenem WLan löschen Faultier_1982 21 2.646 13.05.2021 08:03
Letzter Beitrag: Faultier_1982
  ESP8266 SPIFF Daten schreiben und zeilenweise lesen? foto2004 10 1.360 15.04.2021 14:26
Letzter Beitrag: hotsystems
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 23 5.724 09.04.2021 16:15
Letzter Beitrag: amshh
  Wie Zeitstempel einer auf SD Karte geschriebenen Datei setzen? Triax16 64 12.268 22.03.2021 11:58
Letzter Beitrag: michar
  Abgespeckter Sketch für ESP8266 -WLAN Anbindung / Anfänger mizieg 7 1.214 26.02.2021 17:45
Letzter Beitrag: N1d45
  D1 Mini - WLAN bei Frost nicht möglich? KlaRa 45 4.636 10.02.2021 11:24
Letzter Beitrag: hotsystems
  Pumpensteuerung über WLAN DanielK 69 6.741 11.12.2020 18:27
Letzter Beitrag: DanielK
  Nano ESP8266 Prezelboard WLAN Problem DanielK 22 3.328 03.12.2020 18:28
Letzter Beitrag: DanielK

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste