一个星期以来,我一直在我的 ESP32 项目(通过 Arduino IDE 开发)中寻找解决方案:在我的项目中,我执行以下步骤:
- 通过 BME280 读取温度
- 在 NTP 服务器上询问时间(通过 time.h)
- 将数据写入字符串
- 通过 mqtt 将字符串发送到 mqtt 代理(通过 PubSubClient)
一切正常,但前提是我不添加这样的时间戳(没有时间戳):
String jsonString="{\"temperature\":"+String(bme.readTemperature())+",\"humidity\":"+String(bme.readHumidity())+",\"pressure\":"+String(bme.readAltitude(SEALEVELPRESSURE_HPA))+",\"deviceID\":\""+deviceID+"\",\"@timestamp\":\"\"}";
但是,如果我添加时间戳,PubSubClient 就不会发送数据。:
String jsonString="{\"temperature\":"+String(bme.readTemperature())+",\"humidity\":"+String(bme.readHumidity())+",\"pressure\":"+String(bme.readAltitude(SEALEVELPRESSURE_HPA))+",\"deviceID\":\""+deviceID+"\",\"@timestamp\":\""+printFormattedTime()+"\"}";
函数printFormattedTime():
String printFormattedTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return String("Failed to obtain time");
}
char timeStringBuff[50]; //50 chars should be enough
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y-%B-%d %H:%M:%S", &timeinfo);
//print like "const char*"
Serial.println(timeStringBuff);
return String(timeStringBuff);
}
正如我所说:一切正常,直到我添加了返回带有时间格式的字符串的函数。
我还测试了另一个 NTPClient (NTPClient.h) 但没有成功。
任何的想法?
谢谢