• 简介:
    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
    mqtt是一个轻量级的通讯模块,通过发布与订阅的方式,实现了信息的传输,MQTT是机器对机器(M2M)/物联网(IoT)连接协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器到机器”(M2M)或物联网(IoT)世界的连接设备,以及带宽和电池功率非常高的移动应用的理想选择。例如,它已被用于通过卫星链路与代理通信的传感器、与医疗服务提供者的拨号连接,以及一系列家庭自动化和小型设备场景。它也是移动应用的理想选择,因为它体积小,功耗低,数据包最小,并且可以有效地将信息分配给一个或多个接收器。

  • 特点
    开放消息协议,简单易实现
    发布订阅模式,一对多消息发布
    基于TCP/IP网络连接,提供有序,无损,双向连接。
    1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。
    消息QoS支持,可靠传输保证

在python中使用到mqtt进行相关的操作可以用在平台操作,接收相关的mqtt指令和进行相关的处理。在实际的使用中可以通过安装paho-mqtt模块来实现mqtt的导入。
其中的主要操作是:连接mqtt服务器,订阅和发布
这里的前提是有一个mqtt服务器,能够供我们登陆,订阅和发布
mqtt服务器的问题太过复杂,这里不再说明,只是说以下的相关操作是建立在有一个mqtt服务器的基础上的。
mqtt登陆:也可以理解为开启一个mqtt客户端,需要有客户端id,域名,端口号,账号,密码
这些配置信息可以写在一个config.py程序里,以供引入。而且还要一个好处:在一个通过tkinter创建一个 界面时,通过按钮(button)触发mqtt的登录订阅发布,在登录时,需要在界面子程序定义在何时调用MQTT,但是在发布和订阅时又需要修改TOPIC和相关的data,这些参数是不同的,所以需要在界面程序中修改这些内容,如果要mqtt知道就需要在这里引入,这就出问题了,出现了循环引入,(mqtt.py引入views.py,views.py又要引入mqtt.py)所以,需要把mqtt需要的参数写在config.py中,这样就可以解决该问题了。
安装paho-mqtt

pip install paho-mqtt

关于MQTT的模块定义:

import paho.mqtt.client as mqtt
import json
import time
import threading
import configdef on_connect(client, userdata, flags, rc):print("Connected with result code "+str(rc))client.subscribe(config.TOPICSub)def on_message(client, userdata, msg):strMsg = str(msg.payload.decode('utf-8'))# print("主题:"+msg.topic+" 消息:"+str(msg.payload.decode('utf-8')))print("主题:" + msg.topic + " 消息:" + strMsg)train(strMsg)return strMsgdef on_subscribe(client, userdata, mid, granted_qos):print("On Subscribed: qos = %d" % granted_qos)def on_disconnect(client, userdata, rc):if rc != 0:print("Unexpected disconnection %s" % rc)def train(Msg):print('收到mqtt消息',Msg)data = config.TOPICSubparam = json.dumps(data)
client = mqtt.Client(config.CLIENTID0)def mqttPublish(param):client.publish(config.TOPICPub,payload=param,qos=0)def mqttSubcribe(Topic):#订阅  取消订阅一个再订阅一个client.unsubscribe(config.TOPICSub)config.TOPICSub = Topictime.sleep(0.1)client.subscribe(config.TOPICSub,qos=0)def mqttCommunication():#client = mqtt.Client(config.CLIENTID0)client.username_pw_set(config.USERNAME0, config.PASSWD0)client.on_connect = on_connectclient.on_message = on_messageclient.on_subscribe = on_subscribeclient.on_disconnect = on_disconnectclient.connect(config.HOST0, config.PORT0, 60)client.loop_start()def main():mqttThread = threading.Thread(target=mqttCommunication)mqttThread.start()time.sleep(1)publishThread = threading.Thread(target=mqttPublish,args=(param,))publishThread.start()if __name__ == '__main__':main()

config.py

HOST0 = "xxx.xxx.xxx.xxx"
PORT0 = 1883
CLIENTID0 = "ee071f3b-a01c-4237-8d1e-52fe0e5e32d9"
USERNAME0 = "tl/lcy/xxx"
PASSWD0 = "123456"
TOPICSub = "/tl/lcy/test/p1"
TOPICPub = "/tl/lcy/test/p2"
data = '12345'

公司的服务器,在这里就不暴露更多信息了,
在这里使用中使用了loop_start
在connect*()之前或之后调用loop_start()一次,会在后台运行一个线程来自动调用loop()。这释放了可能阻塞的其他工作的主线程。这个调用也处理重新连接到代理。
调用loop_stop()来停止后台线程。
对于loop_forever(),这样是有问题的,会一直阻塞在这里,再进行订阅和发布就出问题了,所以loop_forever还是慎用。
其他详细的描述也可以看该文章:
CSDN文章,介绍paho-mqtt的
简书博客中的文章,简介MQTT的

至于搭建一个MQTT 服务器(broker),可以通过EMQ的方式做,从哔哩哔哩看过一个从头搭建的,只不过只是入门级的,后续的插件使用,比如添加用户名密码的没有涉及,所以我觉得应该需要写一下那些部分。
http://docs.emqx.cn/cn/broker/latest/advanced/plugins.html#插件列表
从该插件列表中可以查看到关于添加用户名和密码的添加方式,后续可以进行相关的操作

突然发现B站有好多关于编程的视频,是不是发现了新大陆。物联网MQTT的也有不少

python 中的MQTT模块 mqtt-paho的使用相关推荐

  1. 介绍Python中的__future__模块

    这篇文章主要介绍了介绍Python中的__future__模块,__future__模块使得在Python2.x的版本下能够兼容更多的Python3.x的特性,需要的朋友可以参考下 Python的每个 ...

  2. python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  3. python使用教程cmd啥意思-Python 中的cmd模块学习

    Python中的cmd模块类型提供了一个创建命令行解析器的框架.简单的来说,可以继承Cmd来创建命令行界面,然后对所有想处理的命令command执行do_command方法.默认情况下,它使用read ...

  4. python中的绘图模块turtle的使用

    python中的绘图模块turtle的使用(7-20190125) 文章目录: 还是从一个有趣的小应用开始,turtle的骚操作吧 最近小猪配齐比较流行,下面用turtle绘制一个粉红色的小猪猪吧-- ...

  5. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  6. Python中的random模块

    Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下: random.random() 用于生成一个0到1的随机浮点数.如: import random r ...

  7. python中的log模块笔记

    日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四大组件记录日志 配置logging的几种方式 向日志输出中添 ...

  8. python中的系统模块_python中一些获取系统信息的模块

    1.platform模块 python中,platform模块给我们提供了很多方法去获取操作系统的信息 如: import platform platform.platform() #获取操作系统名称 ...

  9. 深入理解python中的select模块

    简介 Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue ...

  10. Python中的traceback模块

    Python中的traceback模块 traceback模块被用来跟踪异常返回信息. 如下例所示: import traceback try:     raise SyntaxError, &quo ...

最新文章

  1. Qt 在Label上面绘制罗盘
  2. Linux虚拟文件系统解析
  3. 【Java】5.3 成员变量和局部变量
  4. ds18b20温度传感器 lcd C语言,基于AVR单片机的18B20温度传感器及LCD显示的C语言程序设计...
  5. 解决jQgrid 设置列宽度自动调整时, 出现滚动条问题.
  6. ## CSP 201509-2 日期计算(C语言)(100分)
  7. java循环打印三角形_Java for循环打印三角形(基础)
  8. 旅游信息管理后台(SSM后台管理系统)
  9. HTML5期末大作业:家乡网站设计——石家庄(10页) HTML+CSS+JavaScrip 旅游网页html 家乡介绍html网页设计 dw旅游景点网页设计 web课程设计网页规划与设计
  10. 优秀的程序员是如何利用工具来提升工作效率的?
  11. ACM题解——贪心——卫星安装
  12. 客户消费积分管理系统编写笔记
  13. [cocos2dx]基于Cocos2d-x引擎的游戏框架设计
  14. 小程序--微信拼团设计实现
  15. kettle6.0 连接oracle11g,Kettle表输出报关闭的连接问题的解决方法
  16. MATLB|基于粒子群算法的能源管理系统EMS(考虑光伏、储能 、柴油机系统)
  17. hx711c语言程序,51单片机HX711传感器电子秤设计(原理图、程序源码、BOM等)
  18. 又一所“省会大学”,来了!
  19. ML code | KNN python实现
  20. cent os 火狐_本周关注我们:整体框架和Firefox OS

热门文章

  1. 计算机协议标准,网络协议标准规范大全
  2. dialogue怎么读_dialogue是什么意思_dialogue怎么读_dialogue翻译_用法_发音_词组_同反义词_对话-新东方在线英语词典...
  3. 三维可视化技术的应用现状及发展前景
  4. [译] C++ 和 Android 本地 Activity 初探
  5. 夯实JAVA基础(个人笔记)
  6. 弹窗代码大全window.open
  7. 弹出页面代码及相关解释
  8. 亚马逊、eBay、速卖通、lazada、Shopee等跨境平台,如何快速打造爆款
  9. Alexa详细排名数据完成
  10. 币圈最全java入门教程+实战项目!