Ciao a tutti,
sto realizzando un piccolo display a batteria con un modulo esp8266 (wemos d1 mini per la precisione) per visualizzare alcuni dati provenienti dal mio sito meteorologico.
Siccome questo oggetto che devo fare dovrà collegarsi a diverse reti wifi perché verrà in giro con me avevo intenzione di inserirgli le credenziali d'accesso al wifi man mano che mi serviva e poi eventualmente salvarle nella "EEPROM". Allora mi sono messo a fare alcune prove utilizzando il monitor seriale perché non ho ancora i display e anche perché così sono più veloce a fare uno schizzo di prova e il problema che sto avendo riguarda l'inserimento delle variabili all'interno di WiFi.begin();
Se io inserisco le credenziali nello sketch negli array ssid e pw
char ssid[20] = "SSID ROUTER"; //inserire l'ssid del router
char pw[20] = "PASSWORD ROUTER"; //inserire password del router
mettendole all'interno di WiFi.begin(ssid, pw);WiFi.begin(ssid, pw);
e ignoro quelle che mi chiede via monitor seriale, il modulo si collega correttamente.
Se invece non do alcuna credenziale sullo sketch, ma voglio aggiungere le credenziali via monitor seriale
utilizzando un altra variabile, ma uguale
char str_ssid[20]; //variabile dove viene salvata l'ssid inserita dal monitor seriale
char str_pw[20]; //variabile dove viene salvata la password inserita dal monitor seriale
e le inserisco dentro al comando, il modulo non si connette non ostante le credenziali siano le stesse.
Ecco il codice completo, sia con le credenziali inserite sullo sketch, sia quello con le credenziali inviate dal monitor seriale ( basta cambiare le variabili su WiFi.begin(); ).
Qua vengono utilizzate le credenziali inserite nello sketch
#include <ESP8266WiFi.h>
/*VARIABILI*/
String show_ssid;
String show_pw;
char ssid[20] = "Pinco123"; //inserire l'ssid del router
char pw[20] = "passworddipinco123"; //inserire password del router
char c;
char str_ssid[20]; //variabile dove viene salvata l'ssid inserita dal monitor seriale
char str_pw[20]; //variabile dove viene salvata la password inserita dal monitor seriale
uint8_t cont_str_ssid; //contatore per l'array str_ssid
uint8_t cont_str_pw; //contatore per l'array str_pw
void setup() {
Serial.begin(9600);
Serial.println("Avvio");
//RICHIESTA CREDENZIALI PER IL ROUTER
Serial.println("Inserire SSID");
while(c != '\n'){
if(Serial.available()>0){
c = Serial.read();
cont_str_ssid++;
str_ssid[cont_str_ssid] = c; //inserisco i singoli caratteri nell'array dell'ssid
show_ssid += c; //creo una stringa con il nome dell'ssid, ma non è neccessario
}
}
c = ' ';
Serial.println(show_ssid);
Serial.println("Inserire password");
while(c != '\n'){
if(Serial.available()){
c = Serial.read();
cont_str_pw++;
str_pw[cont_str_pw] = c; //inserisco i singoli caratteri nell'array della password
show_pw += c; //creo una stringa con il nome dell'ssid, ma non è neccessario
}
}
c = ' ';
Serial.println(show_pw);
delay(200);
//verifico che gli array dell'ssid e della password siano corretti
for(int i=0;i<sizeof(str_ssid);i++){
Serial.print(str_ssid[i]);
}
for(int i=0;i<sizeof(str_pw);i++){
Serial.print(str_pw[i]);
}
//Avvio la connessione
WiFi.begin(ssid, pw);
Serial.println("Recupero i dati");
while(WiFi.status() != WL_CONNECTED){
Serial.print(WiFi.status());
Serial.print(".");
delay(500);
}
Serial.println("Connesso");
}
void loop() {
}
qua vengono inserite le credenziali ricevute dal monitor seriale
#include <ESP8266WiFi.h>
/*VARIABILI*/
String show_ssid;
String show_pw;
char ssid[20] = "SSID ROUTER"; //inserire l'ssid del router
char pw[20] = "PASSWORD ROUTER"; //inserire password del router
char c;
char str_ssid[20]; //variabile dove viene salvata l'ssid inserita dal monitor seriale
char str_pw[20]; //variabile dove viene salvata la password inserita dal monitor seriale
uint8_t cont_str_ssid; //contatore per l'array str_ssid
uint8_t cont_str_pw; //contatore per l'array str_pw
void setup() {
Serial.begin(9600);
Serial.println("Avvio");
//RICHIESTA CREDENZIALI PER IL ROUTER
Serial.println("Inserire SSID");
while(c != '\n'){
if(Serial.available()>0){
c = Serial.read();
cont_str_ssid++;
str_ssid[cont_str_ssid] = c; //inserisco i singoli caratteri nell'array dell'ssid
show_ssid += c; //creo una stringa con il nome dell'ssid, ma non è neccessario
}
}
c = ' ';
Serial.println(show_ssid);
Serial.println("Inserire password");
while(c != '\n'){
if(Serial.available()){
c = Serial.read();
cont_str_pw++;
str_pw[cont_str_pw] = c; //inserisco i singoli caratteri nell'array della password
show_pw += c; //creo una stringa con il nome dell'ssid, ma non è neccessario
}
}
c = ' ';
Serial.println(show_pw);
delay(200);
//verifico che gli array dell'ssid e della password siano corretti
for(int i=0;i<sizeof(str_ssid);i++){
Serial.print(str_ssid[i]);
}
for(int i=0;i<sizeof(str_pw);i++){
Serial.print(str_pw[i]);
}
//Avvio la connessione
WiFi.begin(str_ssid, str_pw);
Serial.println("Recupero i dati");
while(WiFi.status() != WL_CONNECTED){
Serial.print(WiFi.status());
Serial.print(".");
delay(500);
}
Serial.println("Connesso");
}
void loop() {
}
Ho osservato che mentre tenta di collegarsi con le credenziali inserite nello sketch, WiFi.status() corrisponde a 6 che dovrebbe essere WL_DISCONNECTED, mentre quando tenta di collegarsi usando le credenziali ricevute dal monitor seriale, WiFi.status() corrisponde a 0 che è WL_IDLE_STATUS.
Io penso che il problema sia su come vengono salvati i caratteri ricevuti dal monitor seriale, ma non riesco a capire dove sia il problema visto che quando ho provato a stampare sul monitor seriale l'array dove vengono salvate le credenziali, mi viene mostrato tutto correttamente.
Grazie mille per l'aiuto.