最近,笔者在倒腾MQTT相关的东西,但是不过基本上都是在mqttfx上玩的,因此呢,现在笔者需要在Liunx下实现MQTT数据的收发问题了。python实现挺方便的,后续可以重新补写一篇。本篇呢就分享一下用C语言实现的亲测可行的办法。
笔者是在Jetson Nano下的Ubuntu系统进行测试。
环境准备
安装paho c库:GitHub - eclipse/paho.mqtt.c at v1.3.0
下载git库到LIUNX本地后,进入到库目录下
cd paho.mqtt.c-1.3.0
对库进行编译操作
make
这时候可以发现,在paho.mqtt.c-1.3.0/build/output下可以找到很多.so的文件。
回到库目录下,对库进行安装操作
make install
库将被安装到/usr/local/lib中,同时会报些文件不存在的错,这些错可以忽略,笔者暂时未发现这些文件的用处和影响。
MQTT测试
Paho自带有示例程序,在paho.mqtt.c-1.3.0/src/samples下的。我们需要更改MQTTClient_subscribe .c文件和MQTTClient_publish.c文件中的宏定义部分
#define ADDRESS "tcp://localhost:1883"
#define CLIENTID "ExampleClientPub"
#define TOPIC "MQTT Examples"
#define PAYLOAD "Hello World!"
一般不会把本地作为MQTT服务器(MQTT broker),所以小白可以找找那些共享的MQTT服务器,例如:tcp://test.ranye-iot.net:1883
TOPIC就是要订阅的话题,PAYLOAD为默认要发送的字符
如果你的MQTT服务器不允许匿名访问,则还需要添加姓名和密码:
char *username= "user"; //用户名
char *password = "test"; //密码
并将用户名和密码写入连接选项中(在main函数下的):
conn_opts.username = username; //将用户名写入连接选项中
conn_opts.password = password; //将密码写入连接选项中
更改完成之后保存回到库目录下,再次make编译
make
进入paho.mqtt.c-1.3.0/build/output/samples,看到重新编译生成的MQTTClient_subscribe和MQTTClient_publish文件
先开启一下
./MQTTClient_subscribe
再开一个终端,开启一下发送端
./MQTTClient_publish
回到接收端,看看是不是有接收到内容啊。有收到内容就是成功啦,接下来就好好研究一下这两.c文件是怎么写的吧!
不过呢,本文仅仅是在库环境下运行的,咱们在项目实际使用中,肯定是要从库环境下分类的,将库环境分类开来,后续笔者会再写一篇来讲述。