PubSubClient个人很喜欢,简单粗暴,占用小,功能足够用。
安装办法,Arduino IDE库管理直接下载。
需要发送大数据的可以关心一下这个,看PubSubClient.h文件 有个缓冲区大小的定义,如果偷懒可以直接修改,就能发送和接收大文本了。
#define MQTT_MAX_PACKET_SIZE 128
但我不建议这样做
1、因为这样是静态分配stack区内存给你的,实际最大可以分配也最多100k左右,这是以ESP32举例,因为可以分配的320RAM中只有一半可以分配给stack,另一个要留给heap,所以在代码中可以分配的stack内存有限。
2、实际运行中可能会出现不稳定的情况,这是官方说的。
官方例程内有说明怎么发送大文本数据,但写的有些乱,现在稍微整理一下:
String json_str = "你要发送的长文本...";
//拆分字符串发送
int cut = 128;
//要拆分发送的实际大小
int json_str_len = json_str.length();
//总数据长度if (json_str_len > cut)
{
//开始发送长文件参数分别为主题,长度,是否持续
client.beginPublish(MQTT_PUB_SELF, json_str_len, true);
int count = json_str_len / cut;
for (int i = 0;
i < (count-1);
i++)
{
client.print(json_str.substring(i * cut, (i * cut + cut)));
}
client.print(json_str.substring(cut * (count - 1)));
//结束发送文本
client.endPublish();
}
else
{
client.publish(MQTT_PUB_SELF, json_str.c_str());
}
【Arduino|Arduino MQTT库PubSubClient的大文本发送与接收方法】测试过20K左右的数据,也能顺利发出,heap内存随用随放,不用去抢stack区的内存分配了。
至于接收的数据长度,我就偷懒了,修改了一下缓冲区长度到256字节,这样应该足够用,毕竟控制命令都不会太长。
#define MQTT_MAX_PACKET_SIZE 256
有什么疑问欢迎交流
推荐阅读
- stm32|基于STM32和freeRTOS智能门锁设计方案
- 日常分享|共享充电宝方案原理,具体部件组成以及主控MUC参数
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- 物联网|从零开始开发物联网项目(8)——云服务器初体验
- 那些卖物联网卡起家的公司,为什么大都撑不过三年()
- RXTX|Java调用RXTX库与Arduino进行串口通讯需注意的编程问题
- 物联网|无线WIFI“信道”