[英]On ESP32 how to retrieve wifi credentialsstored in SPIFFS json file
我需要你的幫助,因為即使我老了(65 歲),我也是 ESP32 的新手。 我想檢索 config.json 文件中的應用程序參數。 我正在使用 PlatformIO
這是代碼和文件。 配置.js:
{
"ssidName": "AP_001",
"ssidPassword": "**************"
}
這是main.cpp:
#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:
}
結果如下:
File: /config.json - 375 octets
Loading configuration...
ssidName:|
ssidPassword:|
[E][WiFiSTA.cpp:125] begin(): SSID too long or missing!
Connexion au Wifi............................................
如您所見,我從 config.json 文件中一無所獲。
我做錯了什么。 謝謝你的幫助
#include "Json.h"
#include "SPIFFS.h"
#include "TinyDB.h"
#include "WiFi.h"
TinyDB db;
void setup() {
Serial.begin(115200);
delay(1000); //Make sure Serial has been initialized
SPIFFS.begin(true);
db.begin(SPIFFS);
//Be careful, there is no directory in SPIFFS.
//If you've saved the file as "config.json", you should use "config.json" instead of "/config.json"
String cfgStr = db.getString("/config.json");
Serial.println("Config: " + cfgStr); //Check if the file exists
//If the file exist, just pass the string to Json object
Json config = Json(cfgStr);
//Print Json object into Serial
//This would be empty if the json format is invalid
JSUtil.prettyPrint(Serial, config);
//Get the value of "ssidName"
String ssidName = config["ssidName"];
Serial.println("SSID: " + ssidName);
//Get the value of "ssidPassword"
String ssidPassword = config["ssidPassword"];
Serial.println("Password: " + ssidPassword);
Serial.println("\nConnecting to WiFi...");
WiFi.begin(ssidName.c_str(), ssidPassword.c_str());
while (!WiFi.isConnected()) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
}
void loop() {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.