陈拓 2021/03/21-2021/03/23


1. 安装Mosquitto MQTT组件


  • 登录树莓派(网线连接)


  • 检查网络连通状态

pi@raspberrypi:~ $ ping www.baidu.com


如果网络不通



Win10找到这个设置界面:



先去掉勾选,确定,再重新如勾选,确定。


再测试:



网通了。


  • 更新apt的资源列表

sudo apt-get update


  • 搜索可安装的MQTT

apt search mqtt




MQTT分为服务器和客户端两部分。有很多MQTT软件包可选,我们选择比较流行的mosquitto


  • 安装mosquitto mosquitto-clients

sudo apt-get install mosquitto mosquitto-clients



说明:


mosquitto – the MQTT broker(MQTT代理,即MQTT服务)


mosquitto-clients – 命令行客户端,在调试时很有用。


  • 查看已经安装的mosquitto软件包

dpkg -l mosquitto



2. 配置Mosquitto


在使用Mosquitto之前,我们需要修改配置文件。配置文件位于/etc/mosquito。


  • 查看配置文件

cat /etc/mosquitto/mosquitto.conf



注释中说:


1) 将本地配置放在/etc/mosquitto/conf.d/目录中。


我们看看/etc/mosquitto/conf.d/目录:



里面有一个说明文件,打开看看:



放置在该目录中的任何扩展名为.conf的文件都会被代理作为配置文件加载,用作本地配置。


2) 有一个完全的配置文件说明在:/usr/share/doc/mosquitto/examples/



  • 复制配置文件mosquitto.conf.gz到/etc/mosquitto/conf.d/目录

sudo cp /usr/share/doc/mosquitto/examples/mosquitto.conf.gz /etc/mosquitto/conf.d/



  • 进入/etc/mosquitto/conf.d/目录


  • 解压mosquitto.conf.gz

sudo gzip -d mosquitto.conf.gz



  • 编辑mosquitto.conf

sudo nano /etc/mosquitto/conf.d/mosquitto.conf



这是一个很大的文件,有800多行,所有的行都被#符号注释掉了。


我们修改下面几处,去掉注释符号,修改默认值:


user mosquitto


max_queued_messages 200


message_size_limit 0


allow_zero_length_clientid true


allow_duplicate_messages false


 


port 1883


autosave_interval 900


autosave_on_changes false


persistence true


persistence_file mosquitto.db


allow_anonymous false


Password_file /etc/mosquitto/passwd.conf


  • 退回登录时的家目录


3. 生成账号密码


下面两种方法选一种。


  • 密文创建账户

sudo Mosquitto_passwd -c /etc/mosquitto/passwd.conf 用户名


输入两遍密码


我们的用户名为ct


sudo mosquitto_passwd -c /etc/mosquitto/passwd.conf ct




  • 明文创建账户

sudo Mosquitto_passwd -b /etc/mosquitto/passwd.conf 用户名 密码


我们不用明文账户。


4. 测试Mosquitto服务


4.1 查看帮助


mosquitto -h



4.2 测试mosquitto


需要开3个终端。


  • 装载指定配置,启动mosquitto服务

mosquitto -c /etc/mosquitto/mosquitto.conf -v



-v记录所有类型的日志,因为我们在调试。以后正式使用mosquitto就不需要记录日志了,因为会占用存储空间。


上面提示日志文件mosquitto.log的权限不够:


ls -l /var/log/mosquitto/mosquitto.log



修改权限:


sudo chmod 666 /var/log/mosquitto/mosquitto.log



再执行:


mosquitto -c /etc/mosquitto/mosquitto.conf -v



服务运行,终端窗口被占用。


  • 测试publish subscribe

再打开两个终端:


1) 一个终端执行:


mosquitto_sub -p 1883 -u ct -P xxxxxx -t “test”



订阅subscribe主题Topic:test,等待接收消息。


2) 另一个终端执行:


mosquitto_pub -p 1883 -u ct -P xxxxxx -t test -m “Hello!”



发布主题为test的消息Hello!


3) 订阅窗口显示接收到的消息



4) 查看日志


sudo cat /var/log/mosquitto/mosquitto.log



5) 正式运行mosquitto服务


  • 重新启动树莓派

sudo reboot



  • 查看正在运行的mosquitto进程

ps -ef | grep mosquitto



mosquitto已经在后台启动。


 


参考文档


  1. Configuring MQTT on the Raspberry Pi
    https://learn.adafruit.com/diy-esp8266-home-security-with-lua-and-mqtt/configuring-mqtt-on-the-raspberry-pi
  2. Tutorial: IOT / Installing and Testing Mosquitto MQTT on the Raspberry Pi for Buster
    https://www.switchdoc.com/2018/02/tutorial-installing-and-testing-mosquitto-mqtt-on-raspberry-pi/