当前位置: 首页 > news >正文

python编写MQTT订阅程序

Download | Eclipse Mosquitto

1、下载:

https://mosquitto.org/files/binary/win64/mosquitto-2.0.17-install-windows-x64.exe

2、安装:

3、conf配置

1)使用notepad打开“C:\Program Files\mosquitto\mosquitto.conf”另存为c:\myapp\msquitto\mosquitto.conf.txt

listener 1883
protocol mqtt
listener 9005
protocol websockets
allow_anonymous truelog_type notice
log_type websockets
log_type warning
log_type error
log_type information

2)重命名txt文档为conf

C:\myApp\mosquitto>rename mosquitto.conf.txt mosquitto.conf

4、启动服务;

"C:\Program Files\mosquitto\mosquitto.exe" -c C:\myApp\mosquitto\mosquitto.conf

MQTTX 下载

 5、下载mqtt x 客户端

https://packages.emqx.net/MQTTX/v1.9.5/MQTTX-Setup-1.9.5-x64.exe

6、 安装mqtt x 客户端。

1)新建连接

2)新的订阅

3)发布

4)接受

python代码部分:

下面这段代码是一个使用Python的wxPython库和paho-mqtt库创建一个简单的MQTT订阅者应用程序的示例。下面是对代码的详细解释:

C:\pythoncode\new\mqtt.py

1. 导入wx和paho.mqtt.client模块:

import wx
import paho.mqtt.client as mqtt


这里导入了wx模块用于创建GUI界面,以及paho.mqtt.client模块用于实现MQTT客户端功能。

2. 创建MQTTSubscriber类,并继承自wx.Frame类:

class MQTTSubscriber(wx.Frame):


这个类表示MQTT订阅者应用程序的主窗口。

3. 定义类的构造函数`__init__`:

def __init__(self):wx.Frame.__init__(self, None, title="MQTT Subscriber", size=(400, 300))self.panel = wx.Panel(self)


构造函数中创建了一个带有指定标题和大小的wx.Frame窗口,并在窗口上创建了一个wx.Panel面板用于放置其他GUI元素。

4. 创建标签和文本框用于输入IP地址、端口号和客户端ID:

wx.StaticText(self.panel, label="IP Address:", pos=(20, 20))
self.ip_text = wx.TextCtrl(self.panel, pos=(120, 20), size=(240, -1))


这些代码创建了一个静态文本标签和一个文本框,用于输入MQTT代理服务器的IP地址。

类似地,使用`wx.StaticText`和`wx.TextCtrl`创建了端口号和客户端ID的输入标签和文本框。

5. 创建下拉框用于选择主题:

wx.StaticText(self.panel, label="Topic:", pos=(20, 110))
self.topic_choice = wx.Choice(self.panel, pos=(120, 110), size=(240, -1))
self.topic_choice.Append("test/A")
self.topic_choice.Append("test/B")


这段代码创建了一个静态文本标签和一个下拉框(Choice),用于选择要订阅的MQTT主题。在下拉框中添加了两个选项:“test/A”和“test/B”。

6. 创建按钮用于接收MQTT消息:

self.receive_button = wx.Button(self.panel, label="Receive", pos=(160, 140))
self.receive_button.Bind(wx.EVT_BUTTON, self.on_receive)


这段代码创建了一个按钮,用于触发接收MQTT消息的操作。按钮的标签为“Receive”,并将按钮的点击事件绑定到`self.on_receive`方法上。

7. 创建多行文本框用于显示接收到的消息:

wx.StaticText(self.panel, label="Received Messages:", pos=(20, 180))
self.message_text = wx.TextCtrl(self.panel, pos=(20, 200), size=(360, 80), style=wx.TE_READONLY|wx.TE_MULTILINE)


这段代码创建了一个静态文本标签和一个多行文本框(TextCtrl),用于显示接收到的MQTT消息。文本框是只读的,并且可以显示多行文本。8. 定义`on_receive`方法:

def on_receive(self, event):ip = self.ip_text.GetValue()port = int(self.port_text.GetValue())client_id = self.client_id_text.GetValue()topic = self.topic_choice.GetString(self.topic_choice.GetSelection())# 创建MQTT客户端并连接到代理服务器client = mqtt.Client(client_id)client.on_connect = self.on_connectclient.on_message = self.on_messageclient.connect(ip, port)# 订阅主题client.subscribe(topic)# 启动MQTT消息循环client.loop_start()


这个方法是按钮点击事件的处理函数。它从输入框和下拉框中获取IP地址、端口号、客户端ID和主题的值,然后创建一个MQTT客户端并连接到指定的MQTT代理服务器。通过调用`client.subscribe(topic)`方法来订阅指定的主题,并通过`client.loop_start()`方法启动MQTT消息循环。9. 定义`on_connect`方法和`on_message`方法:

def on_connect(self, client, userdata, flags, rc):print("Connected with result code " + str(rc))def on_message(self, client, userdata, msg):message = msg.payload.decode("utf-8")self.message_text.AppendText(message + "\n")


这两个方法分别是MQTT客户端连接成功和接收到消息时的回调函数。`on_connect`方法在客户端成功连接到MQTT代理服务器时被调用,并打印连接结果代码。`on_message`方法在接收到消息时被调用,将消息的内容解码为字符串,并将其附加到多行文本框中显示。

10. 在`if __name__ == '__main__':`条件下创建应用程序实例并运行主循环:

app = wx.App()
frame = MQTTSubscriber()
frame.Show()
app.MainLoop()

全部代码

import wx
import paho.mqtt.client as mqttclass MQTTSubscriber(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, title="MQTT Subscriber", size=(400, 300))self.panel = wx.Panel(self)# 创建标签和文本框用于输入IP地址、端口号和客户端IDwx.StaticText(self.panel, label="IP Address:", pos=(20, 20))self.ip_text = wx.TextCtrl(self.panel, pos=(120, 20), size=(240, -1))wx.StaticText(self.panel, label="Port:", pos=(20, 50))self.port_text = wx.TextCtrl(self.panel, pos=(120, 50), size=(240, -1))wx.StaticText(self.panel, label="Client ID:", pos=(20, 80))self.client_id_text = wx.TextCtrl(self.panel, pos=(120, 80), size=(240, -1))# 创建下拉框用于选择主题wx.StaticText(self.panel, label="Topic:", pos=(20, 110))self.topic_choice = wx.Choice(self.panel, pos=(120, 110), size=(240, -1))self.topic_choice.Append("test/A")self.topic_choice.Append("test/B")# 创建按钮用于接收MQTT消息self.receive_button = wx.Button(self.panel, label="Receive", pos=(160, 140))self.receive_button.Bind(wx.EVT_BUTTON, self.on_receive)# 创建多行文本框用于显示接收到的消息wx.StaticText(self.panel, label="Received Messages:", pos=(20, 180))self.message_text = wx.TextCtrl(self.panel, pos=(20, 200), size=(360, 80), style=wx.TE_READONLY|wx.TE_MULTILINE)def on_receive(self, event):ip = self.ip_text.GetValue()port = int(self.port_text.GetValue())client_id = self.client_id_text.GetValue()topic = self.topic_choice.GetString(self.topic_choice.GetSelection())# 创建MQTT客户端并连接到代理服务器client = mqtt.Client(client_id)client.on_connect = self.on_connectclient.on_message = self.on_messageclient.connect(ip, port)# 订阅主题client.subscribe(topic)# 启动MQTT消息循环client.loop_start()def on_connect(self, client, userdata, flags, rc):print("Connected with result code " + str(rc))def on_message(self, client, userdata, msg):message = msg.payload.decode("utf-8")self.message_text.AppendText(message + "\n")if __name__ == '__main__':app = wx.App()frame = MQTTSubscriber()frame.Show()app.MainLoop()


这段代码创建了一个`wx.App`实例,然后创建了`MQTTSubscriber`类的对象`frame`。最后,通过调用`app.MainLoop()`来进入主循环,使应用程序保持运行状态,直到关闭窗口。

通过运行这段代码,您将获得一个简单的MQTT订阅者应用程序窗口。您可以在窗口中输入MQTT代理服务器的IP地址、端口号和客户端ID,选择要订阅的主题,然后点击“Receive”按钮开始接收MQTT消息,并将接收到的消息显示在窗口中。

相关文章:

python编写MQTT订阅程序

Download | Eclipse Mosquitto 1、下载: https://mosquitto.org/files/binary/win64/mosquitto-2.0.17-install-windows-x64.exe 2、安装: 3、conf配置 1)使用notepad打开“C:\Program Files\mosquitto\mosquitto.conf”另存为c:\myapp\msquitto\mo…...

mysql 中 cast 函数用法

在 MySQL 中,CAST() 函数用于将一个表达式转换为指定的数据类型。它可以用于多种场景,例如将字符串转换为数字,或者将日期时间转换为特定格式。 以下是 CAST() 函数的基本语法: CAST(expression AS datatype) 其中&#xff0c…...

MongoDB 的简介

MongoDB 趋势 对于 MongoDB 的认识 Q&A QA什么是 MongoDB? 一个以 JSON 为数据模型的文档数据库一个以 JSON 为数据模型的文档数据库文档来自于“JSON Document”,并非我们一般理解的 PDF,WORD谁开发 MongDB? 上市公司 MongoD…...

是否在业务中使用大语言模型?

ChatGPT取得了巨大的成功,在短短一个月内就获得了1亿用户,并激发了企业和专业人士对如何在他们的组织中利用这一工具的兴趣和好奇心。 但LLM究竟是什么,它们如何使你的企业受益?它只是一种炒作,还是会长期存在? 在这篇文章中我…...

37. 交换字符(第三期模拟笔试)

题目: 给定一个01串(仅由字符0和字符1构成的字符串)。每次操作可以交换两个相邻的字符。 例如:对于字符串"001110"来说, 可以交换第二个字符0和第三个字符1,交换之后的字符串变成了"0101…...

git 查看当前分支最近一次提交的commit SHA

获取当前分支最近一次commit SHA (长度为40个16进制数字的字符)命令如下: git rev-parse HEAD 获取简写(短) commit SHA git rev-parse --short HEAD...

LuatOS 开发指南

NDK 开发 官方教程 官方例程 API 下载软件 下载官方NDK例程压缩包到本地,并解压。可以看到目录如下: doc: 文档教程 env: 编译环境 example: NDK示例 platform: 需要编译的平台(air72x/air8xx) tools: 其他辅助软件 VSCode 使…...

maven推包The environment variable JAVA_HOME is not correctly set

解决办法: 打开idea查看jdk安装位置 1.在/etc下面创建(如果存在就是更新)launchd.conf。里面添加一行: setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/Home #JAVA_HOME后面是我的java安装路径…...

Python VScode 配置

在上一章节中我们已经安装了 Python 的环境,本章节我们将介绍 Python VScode 的配置。 准备工作: 安装 VS Code安装 VS Code Python 扩展安装 Python 3 安装 VS Code VSCode(全称:Visual Studio Code)是一款由微软…...

【vue2第九章】组件化开发和根组件以及style上的scoped作用

组件化开发和根组件 什么是组件化开发? 一个页面可以拆分为多个组件,每个组件有自己的样式,结构,行为,组件化开发的好处就是,便于维护,利于重复利用,提升开发的效率。 便于维护&…...

从零开始的Hadoop学习(五)| HDFS概述、shell操作、API操作

1. HDFS 概述 1.1 HDFS 产出背景及定义 1)HDFS 产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切 需要一种系统来管理多台机器上的…...

【spark】序列化和反序列化,transient关键字的使用

序列化 Spark是基于JVM运行的进行,其序列化必然遵守Java的序列化规则。 序列化就是指将一个对象转化为二进制的byte流(注意,不是bit流),然后以文件的方式进行保存或通过网络传输,等待被反序列化读取出来。…...

2.4 Vector<T> 动态数组(随机访问迭代器)

C自学精简教程 目录(必读) 该 Vector 版本特点 这里的版本主要是使用模板实现、支持随机访问迭代器&#xff0c;支持std::sort等所有STL算法。(本文对随机迭代器的支持参考了 复旦大学 大一公共基础课C语言的一次作业) 随机访问迭代器的实现主要是继承std::iterator<std:…...

Ubuntu下运行QEMU模拟riscv64跑Debian

1.安装QEMU 下载地址&#xff1a; https://www.qemu.org/download/ 建议选择稳定版本&#xff0c;下载后解压&#xff0c;然后make wget https://download.qemu.org/qemu-8.0.3.tar.xz tar xjvf qemu-8.0.3.tar.xz cd qemu-8.0.3 ./configure --enable-kvm --enable-virtfs …...

移动基站ip的工作原理

原理介绍 Basic Principle 先说一下概念&#xff0c;大家在不使用 WIFI 网络的时候&#xff0c;使用手机通过运营商提供的网络进行上网的时候&#xff0c;目前都是在用户端使用私有IP&#xff0c;然后对外做 NAT 转换&#xff0c;这样的情况就导致大家统一使用一些 IP 段进行访…...

Kubernetes技术--使用kubeadm搭建高可用的K8s集群(贴近实际环境)

1.高可用k8s集群架构(多master) 2.安装硬件要求 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 注: 这里属于教学环境,所以使用三台虚拟机模拟实现。 3.部署规划 4.部署前准备 (1).关闭防火墙 systemctl stop fi…...

【Linux】文件

Linux 文件 什么叫文件C语言视角下文件的操作文件的打开与关闭文件的写操作文件的读操作 & cat命令模拟实现 文件操作的系统接口open & closewriteread 文件描述符进程与文件的关系重定向问题Linux下一切皆文件的认识文件缓冲区缓冲区的刷新策略 stuout & stderr 什…...

Android OTA 相关工具(六) 使用 lpmake 打包生成 super.img

我在 《Android 动态分区详解(二) 核心模块和相关工具介绍》 介绍过 lpmake 工具&#xff0c;这款工具用于将多个分区镜像打包生成一个 Android 专用的动态分区镜像&#xff0c;一般称为 super.img。Android 编译时&#xff0c;系统会自动调用 lpmake 并传入相关参数来生成 sup…...

信创环境 Phytium S2500 虚拟机最大内存规格测试

在 ARM 架构中,"IPA" 通常指的是 "Instruction Set Architecture"(指令集架构),arm环境的虚拟机支持的最大内存规格与母机上内存多少无关,由arm本身的ipa size决定,ipa size 可以理解为虚拟机的物理地址空间,kernel5.4.32中ipa默认是44bits(16T si…...

新建工程——第一个S32DS工程

之前的"测试开发板"章节 测试开发板——第一个AutoSAR程序,使用了一个 demo 工程,不管是裸机程序还是 AutoSAR 程序,那都是别人已经创建好的工程。本节来介绍如何来创建自己的工程,本节介绍如何创建一个 S32DS 的工程,点亮开发板上的 LED 我们从官方提供的例程…...

基于Open3D的点云处理16-特征点匹配

点云配准 将点云数据统一到一个世界坐标系的过程称之为点云配准或者点云拼接。&#xff08;registration/align&#xff09; 点云配准的过程其实就是找到同名点对&#xff1b;即找到在点云中处在真实世界同一位置的点。 常见的点云配准算法: ICP、Color ICP、Trimed-ICP 算法…...

设计模式—简单工厂

目录 一、前言 二、简单工厂模式 1、计算器例子 2、优化后版本 3、结合面向对象进行优化&#xff08;封装&#xff09; 3.1、Operation运算类 3.2、客户端 4、利用面向对象三大特性&#xff08;继承和多态&#xff09; 4.1、Operation类 4.2、加法类 4.3、减法类 4…...

真机安装Linux Centos7

准备工具&#xff1a; 8G左右U盘最新版UltraISOCentOS7光盘镜像 操作步骤 下载镜像 地址&#xff1a;http://isoredirect.centos.org/centos/7/isos/x86_64/ 安装刻录工具UltraISO&#xff0c;刻录镜像到U盘 ① 选择ISO镜像文件 ② 写入磁盘镜像&#xff0c;在这里选择你的U盘…...

ceph peering机制-状态机

本章介绍ceph中比较复杂的模块&#xff1a; Peering机制。该过程保障PG内各个副本之间数据的一致性&#xff0c;并实现PG的各种状态的维护和转换。本章首先介绍boost库的statechart状态机基本知识&#xff0c;Ceph使用它来管理PG的状态转换。其次介绍PG的创建过程以及相应的状…...

Java | File类

目录&#xff1a; File类File类中常用的方法&#xff1a;boolean exists( ) &#xff1a;判断此 文件/目录 是否存在boolean createNewFile( ) &#xff1a;创建一个文件boolean mkdir( ) &#xff1a;创建 “单层” 目录/文件夹boolean mkdirs( ) &#xff1a;创建 “多层” 目…...

数学建模之灰色预测

灰色预测&#xff08;Grey Forecasting&#xff09;是一种用于时间序列数据分析和预测的方法&#xff0c;通常用于处理具有较少历史数据的情况或者数据不够充分的情况。它是一种非常简单但有效的方法&#xff0c;基于灰色系统理论&#xff0c;用来估计未来的趋势。 以下是灰色…...

03_nodejd_npm install报错

npm install报错 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: 5kcrm11.0.0 npm ERR! Found: vue2.5.17 npm ERR! node_modules/vue npm ERR! vue"2.5.17" from the root project npm ERR! np…...

three.js(二):webpack + three.js + ts

用webpackts 开发 three.js 项目 webpack 依旧是主流的模块打包工具;ts和three.js 是绝配&#xff0c;three.js本身就是用ts写的&#xff0c;ts可以为three 项目提前做好规则约束&#xff0c;使项目的开发更加顺畅。 1.创建一个目录&#xff0c;初始化 npm mkdir demo cd de…...

最小二乘法处理线性回归

最小二乘法是一种数学优化技术&#xff0c;用于查找最适合一组数据点的函数。 该方法主要用于线性回归分析&#xff0c;当然&#xff0c;也可用于非线性问题。 开始之前&#xff0c;我们先理解一下什么是回归。 回归&#xff1a;回归是一种监督学习算法&#xff0c;用于建模和…...

ModbusCRC16校验 示例代码

作者&#xff1a; Herman Ye Galbot Auromix 测试环境&#xff1a; Ubuntu20.04 更新日期&#xff1a; 2023/08/30 注1&#xff1a; Auromix 是一个机器人爱好者开源组织。 注2&#xff1a; 本文在更新日期经过测试&#xff0c;确认有效。 笔者出于学习交流目的&#xff0c; 给…...

创可贴网站怎么做图片大全/如何写营销软文

DB2数据库在运行时会占用不少的系统内存。DB2按三个级别来管理内存&#xff08;由OSS组件向其他组件提供&#xff09;&#xff1a;内存集、内存池和内存块。内存块组成内存池。内存池属于一个内存集。内存集里有多个内存池。缓冲池&#xff08;BUFFERPOOL&#xff09;就其中的一…...

找人一起做素材网站/谷歌推广开户多少费用

这两天老大让我写一个让照片翻转的效果&#xff0c;甚是痛苦&#xff0c;下面是我的一些个人心得 在W3C官方的标准里&#xff0c;通过transform属性使对象旋转的写法如下&#xff1a;transform: rotate(40deg); /* 其中40是旋转的角度 */ 可是由于目前几乎所有的浏览器对这个属…...

学校网站怎么做推广/苏州seo招聘

产品经理如何进行项目管理&#xff1f;这篇就结合我自己的经验&#xff0c;以及拜访过的项目经理前辈来系统梳理下&#xff0c;如何做好一次成功的项目管理。 参考资料&#xff1a;项目任务管理内容较长&#xff0c;全文干货&#xff0c;心急的小伙伴建议直接定位到需要的部分&…...

关于织金县网站建设的论文/万州网站建设

日志信息 故障现象描述 与硬盘关系 scsi1: ERROR on channel 0, id 7, lun 0, CDB: Read (10) 00 73 fc 62 bf 00 00 80 00 Info fld0x73fc6326, Current sdi: sense key Medium Error Additional sense: Unrecovered read error SMART规范定义“Medium Error”错误是一种不…...

广东省网站建设网站/百度推广运营公司

还记得小菜,上篇介绍的Hyper-V Manager command line吗?我们继续来说它..大家对.RDP文件因该很熟悉,我们可不可以让向运行.RDP文件的方式去连接本地或者远程的虚拟机呢?答案是可以的.其实篇最后有提到过.这次同样利用这个命令行工具.在桌面创建个快捷方式.用以下命令.c:\Prog…...

省机关事务局网站建设管理情况/常州seo招聘

1、在测试列表中插入一个多行文本字段&#xff0c;名字叫做Content&#xff0c;如下图&#xff1a; 2、在Content字段里&#xff0c;添加一个Link&#xff0c;如下图&#xff1a; 3、尝试输入Notes格式的Link&#xff0c;如下图&#xff1a; 4、点击OK的时候&#xff0c;弹出消…...