我是靠谱客的博主 完美鲜花,最近开发中收集的这篇文章主要介绍树莓派安装mqtt broker并使用python从外部访问说明环境配置内部测试外部测试mosquitto服务开机自启,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

树莓派安装mqtt broker并使用python从外部访问

  • 说明
  • 环境配置
    • 1.PC
      • 安装`paho-mqtt`
      • Python脚本`mqtt.py`
    • 2.树莓派linux
      • python 3.7.3
      • mosquitto-2.0.9
        • 下载、编译
        • 修改配置
  • 内部测试
  • 外部测试
  • mosquitto服务开机自启

说明

记录一下树莓派linux的学习。
树莓派通过eth0有线连接到光猫LAN口,用超级用户访问光猫后台把树莓派设为DMZ主机,理论上可以实现公网访问,但是移动宽带貌似是大型局域网,甚至同一省级移动4G都不能访问,有点小伤心。
由于树莓派直连光猫LAN口,其他设备通过小米路由器二级路由接在另一个LAN口,所以连了小米Wi-Fi / LAN 口的设备都能访问到树莓派的MQTT服务器,实现互联。以后打算用廉价的Wi-Fi芯片把带电的东西都通过MQTT控制。

环境配置

1.PC

Windows 10 教育版
Python 3.9.5 (只要是python3 应该都能用)

安装paho-mqtt

pip install paho-mqtt

Python脚本mqtt.py

# encoding: utf-8
import paho.mqtt.client as mqtt

# Client对象构造
MQTTHOST = "树莓派ip"
MQTTPORT = 1883
mqttClient = mqtt.Client("服务端唯一客户标识")
mqttClient.username_pw_set("账号", "密码")


# 连接MQTT服务器
def on_mqtt_connect():
    mqttClient.connect(MQTTHOST, MQTTPORT, 60)
    mqttClient.loop_start()

# publish 消息
def on_publish(topic, payload, qos):
    mqttClient.publish(topic, payload, qos)

# 消息处理函数
def on_message_come(lient, userdata, msg):

    print('recv from ' + msg.topic + ':')
    print(msg.payload.decode())
    print('')

# subscribe 消息
def on_subscribe():
    # 订阅监听自定义Topic
    mqttClient.subscribe("主题", 1)
    mqttClient.on_message = on_message_come # 消息到来处理函数


def main():
    on_mqtt_connect()
    # 自定义Topic消息上行
    on_publish("主题", "Hello Python!", 1)
    
    on_subscribe()
    while True:
        pass

if __name__ == '__main__':
    main()

2.树莓派linux

树莓派Linux系统安装,换源请绕路

python 3.7.3

树莓派默认自带的python是pyhton2,安装python3:

sudo apt install python3

并修改软链:

cd /usr/bin
rm python
ln -s /usr/python/bin/python3 /usr/bin/python

后运行python 查看版本

python -V

输出为 Python 3.x.x 则安装成功

mosquitto-2.0.9

下载、编译

下载mosquitto需要的依赖

sudo apt-get install libssl-dev
sudo apt-get install uuid-dev
sudo apt-get install cmake

/home新建mqtt路径,下载mosquitto并解压,至截稿日mosquitto官方最新的版本是2.0.9
查看所有版本

sudo mkdir ~/mqtt
cd ~/mqtt
wget http://mosquitto.org/files/source/mosquitto-2.0.9.tar.gz

解压,进入目录,编译,安装

tar zxfv mosquitto-1.5.4.tar.gz
cd mosquitto-1.5.4
sudo make
sudo make install

可能的错误 参考
使用过程中找不到libmosquitto.so.1

error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

解决办法
方法一:修改配置文件。
在文件后面追加一行/usr/local/lib

sudo vi /etc/ld.so.conf

修改后文件如下:

include /etc/ld.so.conf.d/*.conf

/usr/local/lib

方法二:建立软链

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

修改配置

mosquitto.conf.example为提供的样板配置文件,内容全部注释,根据我们具体需求更改,参考配置详细信息。pwfile.example文件为登录账号密码本,保存加密后的账号信息。后面设置allow_anonymousfalse后只能通过本地建立的账号登录。

cd /etc/mosquitto/
sudo cp mosquitto.conf.example mosquitto.conf
sudo cp pwfile.example passwd.conf
sudo vi mosquitto.conf

取消以下内容的注释并修改值

user mosquitto
max_queued_messages 200
message_size_limit 0
allow_zero_length_clientid true
allow_duplicate_messages false

listener 1883
autosave_interval 900
autosave_on_changes false
persistence true
persistence_file mosquitto.db
allow_anonymous false
Password_file /etc/mosquitto/passwd.conf

添加mqtt账号

方法一:密文创建账户

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

输入两遍密码

例如 用户名为test01

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

方法二:明文创建账户

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

添加Linux用户

sudo adduser mosquitto

详细信息随便填

内部测试

一共需要打开3个终端

终端1: 启动mosquitto服务

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

终端2: 建立监听客户端,订阅主题

mosquitto_sub -p 1883 -u 用户名 -P 密码 -t 主题

终端3: 向主题发布信息

mosquitto_pub -p 1883 -u 用户名 -P 密码 -t 主题 -m 消息

-m 后参数默认为二进制流,可以用双引号包装文本,此时监听客户端应回显接收到的的信息

外部测试

终端1: 启动mosquitto服务

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

终端2: 建立监听客户端,订阅主题

mosquitto_sub -p 1883 -u 用户名 -P 密码 -t 主题

运行PC端mqtt.py脚本,此时可以看到终端2输出来自py脚本的信息
或者使用测试工具登录mqtt服务器
通信猫调试助手软件下载地址:(单文件绿色版2MB)

MD5:323142df6472afd9c16dc41d1817aeb8  COMNET.exe

详见 参考

mosquitto服务开机自启

新版本删去了mosquito.service功能,我们要自己写service文件:
/usr/lib/systemd/system下建立文件mosquitto.service

cd /usr/lib/systemd/system
sudo nano mosquitto.service

内容如下

[Unit]
Description=Mosquitto MQTT v3.1/v3.1.1 Broker
Documentation=man:mosquitto.conf(5) man:mosquitto(8)
After=network-online.target
Wants=network-online.target
 
[Service]
ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
User=mosquitto
LimitNOFILE=65535 #重要
[Install]
WantedBy=multi-user.target

启动服务,并将服务添加到开机启动

sudo systemctl start mosquitto
sudo systemctl enable mosquitto

相关参考资料
https://zhuanlan.zhihu.com/p/359395794
https://www.cnblogs.com/lnn123/p/10837754.html
https://blog.csdn.net/chenchen2360060/article/details/84845047
https://shaocheng.li/posts/2015/08/11/
https://www.cnblogs.com/yuzhoumeigui/p/13695262.html

最后

以上就是完美鲜花为你收集整理的树莓派安装mqtt broker并使用python从外部访问说明环境配置内部测试外部测试mosquitto服务开机自启的全部内容,希望文章能够帮你解决树莓派安装mqtt broker并使用python从外部访问说明环境配置内部测试外部测试mosquitto服务开机自启所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部