问题描述
我想用 mqtt 发布大量传感器数据,但我不知道我的 ESP8266 是否支持它。我总共有 16 个传感器(temp、Hum、Lux、PIR)分布在 3 个楼层,每个传感器将提供 2 字节数据(PIR 仅 1 字节),我将用 1 秒的采样发布它。问题是我不知道 PubSubClient.h 究竟是如何工作的,它是同时发送所有数据还是分部分发送。
如果每次 esp8266 每个示例发布 4 个数据传感器时我都清除有效载荷字符,它会有所帮助吗?
这是代码的一部分,不要介意一些值,请它尚未完成。我只发布了这部分,所以整个代码非常大,因为它接收来自 4 个 Xbee 和其他东西的数据。
char msg[50]; // Not sure about the exact size of the payload,I don't kNow if it will publish all the data at the same time or what
// Dont mind please,it is not finihed yet
float tempC,Humidity,Lux = 0;
int pir_int = 0;
float tempC,Lux = 0;
int pir_int = 0;
// Declaració dels topics mqtt
// Soterrani
#define st_temp "casa/st/soterrani/temperatura"
#define st_hum "casa/st/soterrani/humitat"
#define st_pir "casa/st/soterrani/pir"
#define st_llums "casa/st/soterrani/llums" // per codi actuador
#define st_lux "casa/st/soterrani/lux"
#define st_rent "casa/st/soterrani/rentadora" // per codi actuador
#define st_cald "casa/st/soterrani/caldera" // per codi actuador
// Cuina
#define st_temp "casa/pb/cuina/temperatura"
#define st_hum "casa/pb/cuina/humitat"
#define st_llums "casa/pb/cuina/llums" // per codi actuador
#define st_co "casa/pb/cuina/co"
// Saló
#define st_temp "casa/pb/salo/temperatura"
#define st_hum "casa/pb/salo/humitat"
#define st_pir "casa/pb/salo/pir"
#define st_llums "casa/pb/salo/llums" // per codi actuador
#define st_alarma "casa/pb/salo/alarma" // per codi actuador
#define st_lux "casa/pb/salo/lux"
// Dormitori
#define st_temp "casa/pp/dormitori/temperatura"
#define st_hum "casa/pp/dormitori/humitat"
#define st_pir "casa/pp/dormitori/pir"
#define st_llums "casa/pp/dormitori/llums" // per codi actuador
#define st_lux "casa/pp/dormitori/lux"
// Oficina
#define st_temp "casa/pp/oficina/temperatura"
#define st_hum "casa/pp/oficina/humitat"
#define st_llums "casa/pp/oficina/llums" // per codi actuador
#define st_lux "casa/pp/oficina/lux"
void loop()
{
// Fem la primera connexió del client i les següents que siguin necessàries
if (!client.connected()) {
reconnect();
}
// Inicialitzem la funció de tractament de dades
parseData();
// Publiquem les dades dels sensors cada un cert temps
long Now = millis();
if (Now - lastMsg > 29000) {
lastMsg = Now;
// tractem les variables amb 2 enters i 2 decimals de precisió i les convertim a string
// Soterrani
String Pir_s = String(pir_int);
client.publish(st_pir,Pir_s);
client.publish(st_temp,dtostrf(tempC,4,2,msgbuf));
client.publish(st_hum,dtostrf(Humidity,msgbuf));
client.publish(st_lux,dtostrf(Lux,msgbuf); // revisar
// Not finished yet,here are the other sensor data I wanna publish
String Pir_s = String(pir_int);
client.publish(st_pir,msgbuf); // revisar
String Pir_s = String(pir_int);
client.publish(st_pir,msgbuf); // revisar
}
// Fem una connexió en cada loop amb client per refrescar dades per publicar i mantenir la connexió
client.loop();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)