Hola a tod@s,
Tengo un archivos "config.h" en donde declaro la mayoría de las variables que usare.
También otro archivo que contiene funciones en donde se usan algunas de esas variables si es que no son todas.
El problema es de la siguiente forma :
- Se cargan los #includes
-
setup(), aquí ejecuta una función que, carga un archivo inicial en json que se encuentra en el ESP01, este archivo se lee sin problemas, al leer este archivo, transfiero los datos de este a las variables globales. A modo de depuración, imprimo por serial algunas de variables para seguir el flujo y ver que desde eso todo sigue bien. Pero es aquí en donde empieza la magia...
... después de pasar el json a las variables, al intentar usar estas variables en otra función, llegan vacías y es ahí mi piedra de tope.
**config.h**
const char* ssid_srv="ESPServer";
const char* pswd_srv="12345678";
const char* ssid_sta="";
const char* pswd_sta="";
**ESP_Utils.hpp**
// Funcion que usa LittleFS para llamar un json
void CargaBoot(){
String json = readFile("/json/boot.json");
delay(500);
if(json!=""&&json!=NULL){
DynamicJsonDocument doc(350);
DeserializationError error = deserializeJson(doc, json);
delay(500);
if (error){return;}
ssid_srv=doc["srv_ssid"].as<const char*>();
pswd_srv=doc["srv_pswd"].as<const char*>();
ssid_sta=doc["sta_ssid"].as<const char*>();
pswd_sta=doc["sta_pswd"].as<const char*>();
dataFile = String(ssid_srv)+";"+String(pswd_srv)+";"+String(ssid_sta)+";"+String(pswd_sta));
Serial.println("["+dataFile+"]");
delay(1000);
}else{
// Valores por defecto
ssid_srv="ESPServer";
pswd_srv="12345678";
ssid_sta="";
pswd_sta="";
}
}
// Coneccion a WiFi
void ConnectWiFi_STA(bool useStaticIP = false){
int linea = 0;
WiFi.mode(WIFI_STA);
Serial.println("");
Serial.print("Conectando a WIFI Externa SEÑAL ");Serial.print(String(ssid_sta));Serial.print("/");Serial.print(String(pswd_sta));Serial.println("");
delay(1000);
WiFi.begin(ssid_sta, pswd_sta);
if(useStaticIP) WiFi.config(ip, gateway, subnet); // Si es que usa una IP Statica
// Ciclo de coneccion a WIFI
while (WiFi.status() != WL_CONNECTED&&linea<3){
linea++;
for(int i=0;i<10;i++){
Serial.print(".");
delay(500);
}
Serial.println("");
}
if(WiFi.status() == WL_CONNECTED){
ip_actual =IpAddress2String(WiFi.localIP());
modo_sta = 1;
if (!MDNS.begin("esp01")) {
}else{
MDNS.addService("http", "tcp", 80);
}
Serial.println("Conectado a "+String(ssid_sta));
}else{
Serial.println("Pasando a modo AP "+String(ssid_srv)+"/"+String(pswd_srv));
modo_sta = 0;
}
}
**Setup()**
delay(300);
Serial.begin(9600);
while(!Serial);
LittleFS.begin();
// Start server
server.begin();
CargaBoot();
delay(1000);
ConnectWiFi_STA(); // Iniciamos coneccion a wifi
delay(1000);
Serial.println("Modo "+String(modo_sta)+" / "+modo_esp+" Server "+String(ssid_srv)+"/"+String(pswd_srv));
if (modo_sta == 0) {
ConnectWiFi_AP(); // Iniciamos el modo AP
}
LoadWebServerFiles(); // Carga de archivos WebServer
El resultado del monitor SERIAL es
variables ssid_srv pswd_srv ssid_sta pswd_sta
14:56:55.062 -> [ESPServer;12345678;MyWifi;87654321]
14:56:57.059 ->
14:56:57.059 -> Conectando a WIFI Externa SEÑAL [ ]/[ ]
14:56:58.059 -> ..........
14:57:03.029 -> ..........
14:57:08.055 -> ..........
14:57:13.068 -> Pasando a modo AP [ ]/[ ]
14:57:14.074 -> Modo 0 / SERVER Server modo AP [ ]/[ ]/[ ]
14:57:14.578 -> Servidor([ ]) AP Activado
Como se puede apreciar el donde he puesto corchetes, se debería ver el dato, sin embargo esto no ocurre y he intentado varias formas y maneras y el resultado sigue siendo el mismo.
La primera linea del monitor, es un print dentro de la función ("CargaBoot()") que lee el json, y si, realizo otra impresión después de esta ejecución, me imprime sin problemas los valores, pero no en la funcion siguiente (ConnectWiFi_STA()) .
Alguna idea de puede ser lo que este ocurriendo?