IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 树莓派安装mqtt broker并使用python从外部访问 -> 正文阅读

[系统运维]树莓派安装mqtt broker并使用python从外部访问

说明

记录一下树莓派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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:25:02  更:2021-10-03 17:27:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:32:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码