我的 ESP32 项目从 SD 卡读取 JSON 网络配置,并将凭据传递到 MQTT 函数以连接到我的代理。没有错误,程序编译也没有问题。但由于某种原因,MQTT 连接始终失败,并且无法从 JSON 文件读取凭据。当我手动分配凭据时,它再次正常运行。我不明白这里有什么问题。
代码如下:https://github.com/phamcongchung/ModbusRTU-Master-Log.git。 第392行的函数:
void getNetworkConfig(){
File file = SD.open("/config.json");
if (!file) {
Serial.println("Failed to open file for reading");
return;
}
// Allocate a JSON document
StaticJsonDocument<128> config;
// Parse the JSON from the file
DeserializationError error = deserializeJson(config, file);
if (error) {
Serial.print("Failed to parse file: ");
Serial.println(error.f_str());
return;
}
file.close();
JsonObject networkConfig = config["NetworkConfiguration"];
apn = networkConfig["Apn"].as<const char*>(); Serial.println(apn);
gprsUser = networkConfig["GprsUser"].as<const char*>(); Serial.println(gprsUser);
gprsPass = networkConfig["GprsPass"].as<const char*>(); Serial.println(gprsPass);
topic = networkConfig["Topic"].as<const char*>(); Serial.println(topic);
broker = networkConfig["Broker"].as<const char*>(); Serial.println(broker);
clientID = networkConfig["ClientId"].as<const char*>(); Serial.println(clientID);
brokerUser = networkConfig["BrokerUser"].as<const char*>(); Serial.println(brokerUser);
}
将凭证类型更改为
String
,然后使用 c_str()
将其转换为 char
。
// GPRSS credentials
String apn;
String gprsUser;
String gprsPass;
// MQTT credentials
String topic;
String broker;
String clientID;
String brokerUser;
String brokerPass;
示例:
modem.gprsConnect(apn.c_str(), gprsUser.c_str(), gprsPass.c_str())
mqtt.setServer(broker.c_str(), port)