物联网AI MicroPython学习之语法 umqtt客户端

学物联网,来万物简单IoT物联网!!在这里插入图片描述

umqtt 介绍

  • 模块功能:
    MQTT客户端功能 - 连线、断线、发布消息、订阅主题、KeepAlive等功能。

MQTT协议采用订阅者/发布者模式,协议中定义了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性。 MQTT协议设计了QoS0、QoS1和QoS2 3个QoS的级别。

  • QoS0 - 最多传输一次,如果当时客户端不可用,则会丢失该消息,适用于不重要的消息传输
  • QoS1 - 最少传输一次, 适用于对可靠性有要求,但对重复度没有要求的消息传输
  • QoS2 - 只传输一次, 适用于有可靠性要求,也不允许发生重复的消息传输

关于MQTT协议详细的介绍参考

接口说明

MQTTClient - 构建MQTT连接对象

  • 函数原型:MQTTClient(client_id, server, port=0, user=None, password=None, keepalive=0, ssl=False, ssl_params={},reconn=True,version=4)
  • 参数说明:
参数类型必选参数?说明
client_idstringY客户端ID,客户端唯一标识
serverstringY服务器地址,IP地址或域名
portintN服务器端口,默认是1883
userstringN登录服务器上所用用户名
passwordstringN用户密码
keepaliveintNMQTT客户端keepalive超时时间,单位:秒。 默认为0,范围:[60, 1200]
sslboolN是否使能 SSL/TLS
ssl_paramsstringNSSL/TLS连线配置参数
reconnboolN是否允许MQTT库自动重连,默认值:True,开启自动重连
versionintN要使用的mqtt版本,version=3代表使用MQTTv3.1,默认version=4,使用MQTTv3.1.1
  • 返回值:
    构建的MQTT客户端对象。

MQTTClient.set_callback - 设置MQTT消息回调函数

  • 函数原型:MQTTClient.set_callback(callback)
  • 参数说明:
参数类型必选参数?说明
callback函数指针在收到服务端发送的MQTT消息时候由MQTT库回调用户设置的callback函数

callback函数说明

  • 函数原型:function(topic, message)
  • 函数参数:
参数类型必选参数?说明
topicstring该消息所属的Topic
messagestringMQTT Broker发布的消息内容
  • 返回值:

MQTTClient.set_last_will - 设置要发送给服务器的遗嘱

  • 函数原型:MQTTClient.set_last_will(topic, message, retain=False, qos=0)
  • 参数说明:
参数类型必选参数?说明
topicstring遗嘱消息的目标主题
messagestring遗嘱消息的内容
retainboolBroker是否一直保留该消息,默认False
qosint消息的QoS类型,有效类型:0或1,默认为0
  • 返回值:

MQTTClient.connect - 连接服务器

  • 函数原型:MQTTClient.connect(clean_session=True)
  • 参数说明:
参数类型必选参数?说明
clean_sessionbool客户端类型标志,默认为False !
如果为True,MQTT Broker会在客户端断开连接时删除该客户端相关的所有信息;
如果为False,客户端断开连接时,订阅信息和排队消息都会被MQTT Broker保留。
  • 返回值:
    成功返回0,失败则抛出异常

MQTTClient.ping - 发送ping包

  • 函数原型:MQTTClient.ping()
  • 返回值:

当keepalive不为0且在一定时间内核MQTT Broker没有消息交互,MQTT会主动向服务器发送ping包,检测和MQTT Broker的连连线状态。

MQTTClient.publish - 发布消息

  • 函数原型:MQTTClient.publish(topic, msg, retain=False, qos=0)
  • 参数说明:
参数类型必选参数?说明
topicstring遗嘱消息的目标主题
messagestring遗嘱消息的内容
retainboolBroker是否一直保留该消息,默认False!
MQTT服务器只会为每一个Topic保存, MQTT Client发送的最后一条retain为True的消息。
qosint消息的QoS类型,有效类型:0或1,默认为0
  • 返回值:

MQTTClient.subscribe - 订阅MQTT主题

  • 函数原型:MQTTClient.subscribe(topic, qos)
  • 参数说明:
参数类型必选参数?说明
topicstring遗嘱消息的目标主题
qosint消息的QoS类型,有效类型:0或1,默认为0
  • 返回值:

MQTTClient.wait_msg - 等待服务器的消息

  • 函数原型:MQTTClient.wait_msg()
  • 参数说明:
  • 返回值:

服务器向已注册主题发送的消息将会被发送到通过set_callback设置的回调函数;其它类型的消息则在MQTT模块内部处理。

MQTTClient.check_msg - 检查服务器是否有待处理消息

  • 函数原型:MQTTClient.check_msg()
  • 参数说明:
  • 返回值:

check_msg和wait_msg的差别在于,check_msg是非阻塞模式,调用之后立即返回;而wait_msg为阻塞模式,直到有消息才返回。

MQTTClient.disconnect - 和服务器断开连接

  • 函数原型:MQTTClient.disconnect()
  • 参数说明:
  • 返回值 无

# ESP32平台umqtt案例

import utime
from umqtt.simple import MQTTClient    # MQTT库
import network                         # Wi-Fi功能所在库

# Wi-Fi SSID和Password设置

wifiSsid = "请填写您的路由器名称"
wifiPassword = "请填写您的路由器密码"

wlan = None          # 网络连接对象
client = None        # MQTT客户端对象

# 等待Wi-Fi成功连接到路由器
def wait_for_wifi_connection():
    global wlan
    wifi_connected = False

    wlan = network.WLAN(network.STA_IF)    #创建WLAN对象,STA模式
    wifi_connected = wlan.isconnected()    # 获取Wi-Fi连接路由器的状态信息
    if not wifi_connected: 
        wlan.active(True)        #激活界面
        wlan.scan()              #扫描接入点
        #print("start to connect ", wifiSsid)
        wlan.connect(wifiSsid, wifiPassword)       # 连接到指定的路由器(路由器名称为wifiSsid, 密码为:wifiPassword)

    while True:
        wifi_connected = wlan.isconnected()    # 获取Wi-Fi连接路由器的状态信息
        if wifi_connected:                     # Wi-Fi连接成功则退出while循环
            break
        else:
            utime.sleep(0.5)
            print("wifi_connected:", wifi_connected)

    ifconfig = wlan.ifconfig()     #获取接口的IP/netmask/gw/DNS地址
    print(ifconfig)
    utime.sleep(0.5)

# 处理来自MQTT Broker的MQTT消息
def sub_cb(topic, msg):
    global client
    print("From Topic:", topic, " Message:", msg)           # 打印来自MQTT Broker的消息
    if topic == b'ETTTopic':                            # 如果来自名为“ETTTopic”的Topic,则发布消息给名为“ETTUser”的Topic
        client.publish("ETTUser", "Nice to meet you, ETT Python User")

    if topic == b'ETTUser':                                # 如果来自名为“HaaSUser”的Topic,则发布消息给名为“HaaSRegister”的Topic
        client.publish("ETTRegister", "Hi, ETT Python, I am coming")

if __name__ == '__main__':

    wait_for_wifi_connection()                                    # 等待Wi-Fi连接成功

    client = MQTTClient("ETTPython", "broker-cn.emqx.io", 1883)  # 创建MQTT对象

    client.set_callback(sub_cb)                                   # 设置MQTT callback
    client.connect()                                              # 连接MQTT Broker

    client.subscribe("ETTRegister")                              # 订阅来自"ETTRegister"的消息
    client.subscribe("ETTUser")                                  # 订阅来自"ETTUser"的消息

    client.publish("ETTRegister", "Hi, ETT Python")             # 向"ETTRegister"发送消息

    while True:
        client.check_msg()                                        # 检查是否有来自MQTT Broker的消息
        utime.sleep(1)
  • 示例输出:
...
wifi_connected: False
wifi_connected: False
wifi_connected: False
('192.168.0.118', '255.255.255.0', '192.168.0.1', '192.168.0.1')
Topic: b'ETTRegister'  Message: b'Hi, ETT Python!'
Topic: b'ETTUser'  Message: b'Nice to meet you, ETT Python User!'
Topic: b'ETTRegister'  Message: b'Hi, ETT Python, I am coming!'
Topic: b'ETTUser'  Message: b'Nice to meet you, ETT Python User!'
...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/144606.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Winform / WPF 自定义控件 —— IPV4 地址输入框

在开始阅读本文之前,如果您有学习创建自定义控件库并在其他项目中引用的需求,请参考:在Visual Studio中创建自定义Winform控件库并在其他解决方案中引用https://blog.csdn.net/YMGogre/article/details/126508042 0、引言 Winform / WPF 框架…

docker命令大全

1、查看Docker 容器占用的空间 docker ps -s2、查看所有容器 docker ps -a3、启动、关闭、重启一个已存在的容器 docker start <容器ID> docker stop <容器ID> docker restart <容器ID> 4、进入容器&#xff0c;退出终端的时候不会关闭container的ma…

线程池的使用

线程池的作用 降低线程创建和销毁的开销&#xff1a;线程的创建和销毁是比较昂贵的操作。通过使用线程池&#xff0c;可以避免频繁地创建和销毁线程&#xff0c;而是复用线程池中已经存在的线程&#xff0c;从而降低了开销。 控制并发度&#xff1a;通过控制线程池中线程的数量…

(个人实测保熟)记录Tecnomatix Process Simulate 16.1.2官方安装包及授权许可配置教程(Win10环境)

Tecnomatix Process Simulate 16是一款由西门子公司推出的一款工艺仿真解决方案,是虚拟制造仿真领域的领先解决方案,可帮助您数字化制造以及将创新思想和原材料转变为变革性产品的过程。在网上找了一些盗版的安装包&#xff0c;就很离谱。直接提示本"无法打开此安装程序包…

spring-cloud-alibaba-nacos

spring cloud nacos 安装和启动nacos # 解压nacos安装包 # tar -zvxf nacos-server-1.4.1.tar.gz# nacos默认是以集群的模式启动&#xff0c;此处先用单机模式 # cd /usr/local/mysoft/nacos/bin # sh startup.sh -m standalone# nacos 日志 # tail -f /usr/local/mysoft/na…

智慧隧道:TSINGSEE青犀远程视频AI智能监管平台保障隧道施工安全

一、背景与需求分析 随着我国交通运输量的增加以及新基建的不断规划和建设&#xff0c;公路建设工作也在持续开展中。高速公路隧道属于特殊构造段&#xff0c;因为隧道空间小&#xff0c;密闭性强&#xff0c;施工过程中一旦发生火灾、事故等&#xff0c;将带来重大人员伤亡和…

身份证照片怎么弄成200k以内?超级好用!

一些网站为了限制大的文件上传&#xff0c;提出了一些大小限制的要求&#xff0c;那么身份证如何弄成200k呢&#xff1f;下面介绍三种方法。 方法一&#xff1a; 使用嗨格式压缩大师 1、在电脑上打开安装好的软件&#xff0c;在首界面中点击“图片压缩”。 2、进入后上传需要…

Vue CLI脚手架安装、搭建、配置 和 CLI项目分析

目录 一、CLI快速入门 1. 官方介绍 : 2.安装Vue CLI : 3.搭建Vue CLI : 4.IDEA配置Vue CLI : 二、Vue CLI项目分析 1.结构分析 : 1.1 config 1.2 node_modules 1.3 src 1.4 static 2.流程分析 : 2.1 main.js 2.2 router/index.js 2.3 components/HelloWorld.vue 2.4 A…

“糖尿病日”感言

长期旺盛的写作欲&#xff0c;今天忽地就莫名其妙地衰退下来了。感到浑身都不舒服&#xff0c;特别是过去从未出现过的腰微痛、乏力现象发生了。 转念一想&#xff0c;或是老龄人一日不如一日的正常反应吧&#xff1f;而且&#xff0c;今天恰逢“ 联合国糖尿病日”&#xff0c…

mysql之MHA

1、定义 全称是masterhigh avaliabulity。基于主库的高可用环境下可以实现主从复制及故障切换&#xff08;基于主从复制才能故障切换&#xff09; MHA最少要求一主两从&#xff0c;半同步复制模式 2、作用 解决mysql的单点故障问题。一旦主库崩溃&#xff0c;MHA可以在0-30…

Spark读取excel文件

文章目录 一、excel数据源转成csv二、Spark读取csv文件(一)启动spark-shell(二)读取csv生成df(三)查看df内容一、excel数据源转成csv 集群bigdata - ubuntu: 192.168.191.19master(bigdata1) - centos: 192.168.23.78 slave1(bigdata2) - centos: 192.168.23.79 slave2(b…

多商家签到打卡奖励免单霸王餐小程序开发

多商家签到打卡奖励免单霸王餐小程序开发 用户注册和登录&#xff1a;提供用户注册和登录功能&#xff0c;以便用户能够参与签到打卡活动。 商家入驻&#xff1a;商家可申请入驻平台&#xff0c;提交相关资料并等待平台审核&#xff0c;审核通过后即可发布活动和奖励。 签到打…

组件库篇 | EUI | 补充知识

组件库篇 | EUI | 补充知识 编码 项目中请务必使用Unicode编码,否则会出现中文乱码问题。 设置方法:使用VS打开项目,项目-属性-高级-字符集-Unicode编码。 数据类型 C语言中的常用数据类型不作讲解,主要讲解一些C语言初学者不熟悉的类型。这些类型大都只需要你传参,因此…

风景照片不够清晰锐利,四招帮你轻松解决

我们大家在拍摄风景照的时候都希望能够拍摄出清晰锐利的照片。可能会有人问&#xff1a;“什么是锐利&#xff1f;”我们可以从锐度来给大家简单解说下。锐度是反映图片平面清晰度和图像边缘对比度的一个参数。锐度较高的画面&#xff0c;微小的细节部分也会表现得很清晰&#…

SQL基础理论篇(二):什么是DBMS / DB / DBS

文章目录 简介DB、DBS和DBMS的区别当前的主流DBMSSQL与NoSQL主流的RDBMS参考文献 简介 日常工作中&#xff0c;我们通常是跟DBMS这些数据库管理软件打交道&#xff0c;而SQL只是它们的通用语言而已。 DB、DBS和DBMS的区别 DBMS&#xff0c;全称是DataBase Management System…

外汇天眼:如何摆脱交易困境?这个比赛告诉你答案!

在现今的金融市场中&#xff0c;外汇交易因其高杠杆、24小时交易等特点吸引着众多投资者。然而&#xff0c;外汇交易并非易事&#xff0c;它需要精准的分析、及时的决策和良好的风险管理。许多新手投资者在涉足外汇市场时都会遇到各种困境&#xff0c;譬如缺乏实践经验、心理压…

流量分析(信息安全铁人三项赛分区赛2-5.18)

题目描述 目录 题目描述 黑客的IP是多少 服务器1.99的web服务器使用的CMS及其版本号(请直接复制) 服务器拿到的webshell的网址(请输入url解码后的网址) 服务器1.99的主机名 网站根目录的绝对路径(注意最后加斜杠) 黑客上传的第一个文件名称是什么 黑客进行内网扫描&am…

【文章学习系列之模型】DAGMM

本章内容 文章概况模型结构损失函数实验结果实验分析总结 文章概况 《Deep Autoencoding Gaussian Mixture Model for Unsupervised Anomaly Detection》是2018年发表于ICLR的一篇论文&#xff0c;该论文提出一种端到端的无监督异常检测方法DAGMM&#xff0c;取得了不错的效果…

Sentinel底层原理(下)

1、概述 Sentinel的核心原理&#xff0c;也就是前面提到暗流涌动的SphU.entry(…)这行代码背后的逻辑。 Sentinel会为每个资源创建一个处理链条&#xff0c;就是一个责任链&#xff0c;第一次访问这个资源的时候创建&#xff0c;之后就一直复用&#xff0c;所以这个处理链条每…