微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于发布多个 mqtt 主题和传感器值的缓冲区大小

如何解决用于发布多个 mqtt 主题和传感器值的缓冲区大小

我想用 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 举报,一经查实,本站将立刻删除。