Bonjour,
Je découvre l'ESP32. J'utilise platformio pour développer.
Mon souhait :
stocker en mémoire flash (SPIFFS) un fichier config.json avec les paramètres de l'application.
les récupérer pour configurer le wifi entre autre.
Je n'y arrive pas.
Voici le config.json:
{
"ssidName": "AP_001",
"ssidPassword": "**************"
}
Voici mon main.cpp (simplifié)
#include <Wire.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <SPIFFS.h>
#include <ArduinoJson.h>
struct SSIDConfig
{
char ssidName[32];
char ssidPassword[64];
};
const char *filename = "/config.json";
SSIDConfig config;
// ----- Create AsyncWebServer object on port 80
AsyncWebServer server(80);
// ------------------------------------------------
// ------ Loads the configuration from a file
void loadConfiguration(const char *filename, SSIDConfig config)
{
// Open file for reading
File configFile = SPIFFS.open(filename, "r");
if (configFile)
{
size_t size = configFile.size();
// ------ Allocate a buffer to store contents of the file.
std::unique_ptr<char[]> buf(new char[size]);
configFile.readBytes(buf.get(), size);
StaticJsonDocument<512> doc;
// ------ Deserialize the JSON document
DeserializationError error = deserializeJson(doc, buf.get());
if (error)
Serial.println(F("Failed to read file, using default configuration"));
// ------ Copy values from the JsonDocument to the Config
strcpy(config.ssidName, doc["ssidName"]);
strcpy(config.ssidPassword, doc["ssidPassword"]);
// ------ Close the file
configFile.close();
}
else
Serial.println("Echec ouverture config.json");
}
void setup() {
// ------------------------------------------------ Serial
Serial.begin(115200);
Serial.println();
// ------------------------------------------------ SPIFFS
if(!SPIFFS.begin())
{
Serial.println("Erreur SPIFFS");
return;
}
File root = SPIFFS.open("/");
File file = root.openNextFile();
while (file)
{
Serial.print("File: ");
Serial.print(file.name());
Serial.print(" - ");
Serial.print(file.size());
Serial.println(" octets");
file.close();
file = root.openNextFile();
}
// ------------------------------------------------ Load Config
Serial.println(F("Loading configuration..."));
loadConfiguration(filename, config);
// ------------------------------------------------ WIFI
Serial.print("ssidName:");
Serial.print(config.ssidName);
Serial.println("|");
Serial.print("ssidPassword:");
Serial.print(config.ssidPassword);
Serial.println("|");
WiFi.begin(config.ssidName, config.ssidPassword);
Serial.print("Connexion au Wifi...");
while(WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
Serial.println("\n");
Serial.println("Connexion établie!");
Serial.print("Adresse IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
// put your main code here, to run repeatedly:
}
Voici le résultat :
File: /config.json - 375 octets
Loading configuration...
ssidName:|
ssidPassword:|
[E][WiFiSTA.cpp:125] begin(): SSID too long or missing!
Connexion au Wifi............................................
Je ne récupère pas les informations du json.
Quelles sont mes erreurs.
Merci de votre aide.