ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MQTT-C 快速上手:两千行 C 代码的 MQTT 客户端,一小时跑通传感器上报

MQTT-C 快速上手:两千行 C 代码的 MQTT 客户端,一小时跑通传感器上报 MQTT-C 快速上手两千行 C 代码的 MQTT 客户端一小时跑通传感器上报【免费下载链接】MQTT-CA portable MQTT C client for embedded systems and PCs alike.项目地址: https://gitcode.com/gh_mirrors/mq/MQTT-C周末晚上我盯着桌上那块闲置的 STM32 开发板。温湿度传感器每五秒吐一个数据我想把它发到树莓派上的 MQTT broker让手机随时看到客厅温度——此刻我需要的正是一个轻量级 MQTT C 客户端。而 MQTT-C就是我在那一刻遇到的答案。一块开发板和一个想省事的晚上我一开始选了个功能很全的 MQTT 库。交叉编译、依赖配置、内存裁剪……光是让它在我那块小板上编译通过就用掉了一整晚。可我的需求明明很简单连上 broker、定时发一条消息、偶尔收一条下发的指令。为一个发布动作付出这么多代价不值。后来同事甩给我一个仓库说试试这个只有两个文件。我半信半疑地打开——确实只有两个源文件。这就是 MQTT-C。️它是谁一个不添乱的 C 语言 MQTT 客户端MQTT-C 是一个用纯 C 实现的 MQTT v3.1.1 客户端定位很明确为嵌入式系统和普通 PC 提供可移植的 MQTT 通信能力。它最大的特点是不添乱够小核心代码只有src/mqtt.c和src/mqtt_pal.c两个文件加起来不到 2000 行够透明平台抽象层PAL把 socket、时间、锁这些系统依赖全部隔离换平台只改一个文件够灵活所有 API 线程安全但单线程裸机环境也能正常跑不偷偷 malloc、不悄悄起线程、不强制任何框架——这些不做的事恰恰是嵌入式开发者最看重的品质。第一次上手从 clone 到收到第一条消息拿到代码很简单git clone https://gitcode.com/gh_mirrors/mq/MQTT-C编译更简单。库本身不依赖第三方直接和你的源码一起编就行gcc -o my_app my_app.c src/mqtt.c src/mqtt_pal.c -Iinclude接着是初始化和连接。下面这段代码做了两件事把客户端绑定到已打开的 socket 上然后向 broker 发起连接请求。struct mqtt_client client; uint8_t sendbuf[2048], recvbuf[1024]; mqtt_init(client, sockfd, sendbuf, sizeof(sendbuf), recvbuf, sizeof(recvbuf), publish_callback); mqtt_connect(client, dev01, NULL, NULL, 0, NULL, NULL, MQTT_CONNECT_CLEAN_SESSION, 400);注意 sendbuf 和 recvbuf 是你自己提供的缓冲区库全程不自己分配内存——内存用在哪、用了多少你心里有数。这一点在 RAM 只有几十 KB 的板子上是救命级的设计。然后发布一条消息mqtt_publish(client, home/temperature, 25.5, 4, MQTT_PUBLISH_QOS_0);我第一次跑通时树莓派上的订阅端打出了25.5。那一刻的成就感比任何Hello World都实在。✅实际干活发布、订阅、QoS 和心跳上手之后我对照项目里的示例把核心能力挨个试了一遍每一样都有看得见的效果。发布与订阅。库实现了完整的发布/订阅模型订阅一个主题只要一行mqtt_subscribe(client, home/temperature, 0);之后 broker 推来的每条消息都会进你的回调函数你在里面解析主题和载荷就行。三种 QoS 按需选。项目提供 QoS 0、1、2 三档服务质量。我起初一律用 QoS 1后来发现温度数据丢一两条无所谓改成 QoS 0 后流量和内存都省了不少。选哪档取决于这条消息丢了会怎样。心跳与同步。库不会自己收发包你需要周期性地调用一次mqtt_sync让它处理进出站流量、维持心跳保活。官方示例里用 100ms 的间隔开一个刷新线程单线程板子上把mqtt_sync塞进主循环即可。这种你来决定何时干活的设计让库在任何调度模型里都安分。断线重连。我一度担心网络抖动。翻到examples/reconnect_subscriber.c发现注册一个 reconnect 回调断线时库会自动重新连接并恢复订阅。我故意重启了两次树莓派上的 broker订阅端都自己回来了省心。新手容易踩的坑几处我亲手踩过的坑提前写给你缓冲区别抠门。sendbuf 要能装下多条完整消息太小会直接报错。我第一次只给了 256 字节发布稍长的 payload 就翻车。回调里的 topic_name 不是字符串。它没有\0结尾直接printf会读到垃圾数据。官方订阅示例里先复制再补结尾照抄就行。忘了调mqtt_sync一切静悄悄。发不出去也收不到排查半天才发现是刷新循环没跑。想要加密连接直接看examples/openssl_publisher.c和examples/mbedtls_publisher.c别自己在 socket 上裸写 TLS那是给自己挖坑。它能用在哪儿我自己的项目是智能家居的温度上报但它的适用面比这宽得多嵌入式设备MCU、RTOS、单线程裸机换好 PAL 就能跑PC 端工具Linux 上写个状态上报的小服务几行代码的事工业场景设备状态、告警、遥测数据的低延迟上报加密方案OpenSSL、mbedTLS、BearSSL 三种示例齐全按平台选项目还自带基于 cmocka 的单元测试tests.cmake all能一键编译全部示例和测试再跑一遍./bin/tests就能验证你的移植是否正常——这在嵌入式库里算很贴心了。什么时候该选它回到开头那块开发板。第二天晚上它已经把客厅温度乖乖上报到树莓派手机 App 曲线平滑我再没为通信这件事操过心。如果你也在 C 工程里需要 MQTT尤其是要跑在资源受限的硬件上或者你只是想要一个代码量小、内存可控、行为透明的客户端——MQTT-C 值得你花一个小时试试。从 clone 到第一条消息我保证比你想象中快。【免费下载链接】MQTT-CA portable MQTT C client for embedded systems and PCs alike.项目地址: https://gitcode.com/gh_mirrors/mq/MQTT-C创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表