陈拓 2021/11/07-2021/11/08
本文我们下载最新的mosquitto 2.x源码进行编译安装。并且用源码编译安装后系统中就有了用C语言进行MQTT开发相关的头文件和库文件。
首先登录树莓派。见《在树莓派计算模块CM4上安装Ubuntu Server 20.04》https://blog.csdn.net/chentuo2000/article/details/121419415
查看操作系统版本:
https://mosquitto.org/download/
右击mosquitto-2.0.14.tar.gz,复制链接地址:
https://mosquitto.org/files/source/mosquitto-2.0.14.tar.gz
mkdir ~/ct
cd ~/ct
wget https://mosquitto.org/files/source/mosquitto-2.0.14.tar.gz --no-check-certificate
tar -zxvf mosquitto-2.0.14.tar.gz
安装全家桶build-essential(C/C++ toolchain包括make、gcc等)
sudo apt install build-essential
cd mosquitto-2.0.14
make
出错,找不到openssl/opensslconf.h
安装opensslconf.h
sudo apt-get install libssl-dev
make
出错,找不到cjson/cJSON.h
安装libcjson libcjson-dev
sudo apt-get install libcjson1 libcjson-dev
make
成功。
sudo make install
sudo reboot
mosquitto -h
mosquitto是一个MQTT v5.0/v3.1.1/v3.1代理。
用法:
Usage: mosquitto [-c config_file] [-d] [-h] [-p port]
参数说明:
-c : 指定代理配置文件
-d : 代理启动之后进入后台运行
-h : 显示帮助
-p : 以指定的端口启动代理监听。不建议与-c选项一起使用
-v : 详细模式 - 启用所有日志类型,并在终端打印调试信息。此参数覆盖在配置文件中给出的任何日志记录选项。
更多信息见https://mosquitto.org/
下面开三个终端窗口进行测试。
先打开一个终端窗口,输入mosquitto -v
使用默认配置,以本地模式启动,只能从运行在本机上的客户端连接。如果要从远程访问,需要创建一个配置文件,我们将在后面创建这个配置文件并测试远程连接。
mosquitto_sub -d -v -t test_topic
出错,原因是libmosquitto.so.1安装在/usr/local/lib/目录下,默认的库文件在目录/usr/lib/下,创建一个软链接:
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
mosquitto_sub -d -v -t test_topic
订阅主题test_topic,等待接收消息。
参数说明查看帮助:mosquitto_sub --help
-d : enable debug messages.
-v : print published messages verbosely.
-t : mqtt topic to subscribe to. May be repeated multiple times.
mosquitto_pub -t test_topic -m "hello!"
发布主题为test_topic的消息Hello!
参数说明查看帮助:mosquitto_pub --help
-m : message payload to send.
使用默认配置,如需修改服务器的配置信息需要修改:
上面的测试使用默认配置,只能从运行在本机上的客户端连接。如果要从远程访问,需要创建一个配置文件。
sudo reboot
或者杀掉在后台运行的进程mosquitto服务和订阅进程:
sudo cp /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
sudo nano /etc/mosquitto/mosquitto.conf
我们修改下面几处,去掉注释符号,修改默认值(注意和1.x旧版本不完全相同):
user mosquitto
max_queued_messages 1000
max_packet_size 1024
allow_zero_length_clientid true
listener 1883
autosave_interval 1800
autosave_on_changes false
persistence false
persistence_file mosquitto.db
allow_anonymous false
Password_file /etc/mosquitto/passwd.conf
设置密码文件passwd.conf
为mosquitto_passwd命令创建软链接:
sudo ln -s /usr/local/bin/mosquitto_passwd /usr/lib/mosquitto_passwd
创建密码文件
sudo mosquitto_passwd -c /etc/mosquitto/passwd.conf ct
创建一个名为ct用户。
输入两遍密码
需要调试时执行命令:
mosquitto -c /etc/mosquitto/mosquitto.conf -v
可以在窗口查看mosquitto运行时的信息。
正式运行时执行命令:
mosquitto -d -c /etc/mosquitto/mosquitto.conf
-d后台运行。
ps -ef | grep mosquitto
打开两个终端,测试publish 和subscribe。
mosquitto_sub -p 1883 -u ct -P 12345678 -t "test"
等待接收消息。
mosquitto_pub -p 1883 -u ct -P 12345678 -t test -m "Hello!"
详细说明见《树莓派MQTT服务远程测试MQTT.fx》
https://zhuanlan.zhihu.com/p/363373024
https://blog.csdn.net/chentuo2000/article/details/115539377
用C语言开发MQTT应用程序所需的头文件和库文件现在都有了。
C/C++ libraries for creating MQTT clients.
find ~ -name mosquitto.h
find ~ -name mqtt_protocol.h
查看默认目录:
find ~ -name libmosquitto.so.1
find ~ -name libmosquittopp.so.1
在默认目录下查看:
ls -l /lib/systemd/system/rc-local.service
sudo nano /lib/systemd/system/rc-local.service
将下列内容复制进 rc-local.service文件的最后面加上:
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
sudo nano /etc/rc.local
#!/bin/sh
mosquitto -d -c /etc/mosquitto/mosquitto.conf
exit 0
sudo chmod +x /etc/rc.local
sudo reboot
systemctl status rc-local.service
服务已启动。
ps -ef | grep mosquitto
进程已启动。