物联网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_id | string | Y | 客户端ID,客户端唯一标识 |
| server | string | Y | 服务器地址,IP地址或域名 |
| port | int | N | 服务器端口,默认是1883 |
| user | string | N | 登录服务器上所用用户名 |
| password | string | N | 用户密码 |
| keepalive | int | N | MQTT客户端keepalive超时时间,单位:秒。 默认为0,范围:[60, 1200] |
| ssl | bool | N | 是否使能 SSL/TLS |
| ssl_params | string | N | SSL/TLS连线配置参数 |
| reconn | bool | N | 是否允许MQTT库自动重连,默认值:True,开启自动重连 |
| version | int | N | 要使用的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)
- 函数参数:
| 参数 | 类型 | 必选参数? | 说明 |
|---|---|---|---|
| topic | string | 是 | 该消息所属的Topic |
| message | string | 是 | MQTT Broker发布的消息内容 |
- 返回值:
无
MQTTClient.set_last_will - 设置要发送给服务器的遗嘱
- 函数原型:MQTTClient.set_last_will(topic, message, retain=False, qos=0)
- 参数说明:
| 参数 | 类型 | 必选参数? | 说明 |
|---|---|---|---|
| topic | string | 是 | 遗嘱消息的目标主题 |
| message | string | 是 | 遗嘱消息的内容 |
| retain | bool | 否 | Broker是否一直保留该消息,默认False |
| qos | int | 否 | 消息的QoS类型,有效类型:0或1,默认为0 |
- 返回值:
无
MQTTClient.connect - 连接服务器
- 函数原型:MQTTClient.connect(clean_session=True)
- 参数说明:
| 参数 | 类型 | 必选参数? | 说明 |
|---|---|---|---|
| clean_session | bool | 否 | 客户端类型标志,默认为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)
- 参数说明:
| 参数 | 类型 | 必选参数? | 说明 |
|---|---|---|---|
| topic | string | 是 | 遗嘱消息的目标主题 |
| message | string | 是 | 遗嘱消息的内容 |
| retain | bool | 否 | Broker是否一直保留该消息,默认False! MQTT服务器只会为每一个Topic保存, MQTT Client发送的最后一条retain为True的消息。 |
| qos | int | 否 | 消息的QoS类型,有效类型:0或1,默认为0 |
- 返回值:
无
MQTTClient.subscribe - 订阅MQTT主题
- 函数原型:MQTTClient.subscribe(topic, qos)
- 参数说明:
| 参数 | 类型 | 必选参数? | 说明 |
|---|---|---|---|
| topic | string | 是 | 遗嘱消息的目标主题 |
| qos | int | 否 | 消息的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 wlanwifi_connected = Falsewlan = 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循环breakelse: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 clientprint("From Topic:", topic, " Message:", msg) # 打印来自MQTT Broker的消息if topic == b'ETTTopic': # 如果来自名为“ETTTopic”的Topic,则发布消息给名为“ETTUser”的Topicclient.publish("ETTUser", "Nice to meet you, ETT Python User")if topic == b'ETTUser': # 如果来自名为“HaaSUser”的Topic,则发布消息给名为“HaaSRegister”的Topicclient.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 callbackclient.connect() # 连接MQTT Brokerclient.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!'
...
相关文章:
物联网AI MicroPython学习之语法 umqtt客户端
学物联网,来万物简单IoT物联网!! umqtt 介绍 模块功能: MQTT客户端功能 - 连线、断线、发布消息、订阅主题、KeepAlive等功能。 MQTT协议采用订阅者/发布者模式,协议中定义了消息服务质量(Quality of Service&#x…...
SQLite3 数据库学习(二):SQLite 中的 SQL 语句详解
参考引用 SQLite 权威指南(第二版)SQLite3 入门 1. SQL 语句操作 SQLite 数据库 1.1 创建数据表格 create table 表名(字段名 数据类型, 字段名 数据类型, 字段名 数据类型, 字段名 数据类型); 命令行语句结束要加分…...
基础课4——客服中心管理者面临的挑战
客服管理者在当今的数字化时代也面临着许多挑战。以下是一些主要的挑战: 同行业竞争加剧:客服行业面临着来自同行业的竞争压力。为了获得竞争优势,企业需要不断提高自身的产品和服务质量,同时还需要不断降低成本、提高效率。然而…...
RFID技术在危险废物管理中的应用解决方案
一、背景介绍 随着我国经济的快速发展,轻纺、化工、制药、电子等行业的危险废物排放量逐年增加。然而,由于危险废弃物处理不当,可能导致大气、水体和土壤污染,对环境和人体健康造成严重威胁,制约了经济和健康的可持续…...
二百零三、Flume——Flume实时采集数据频率为1s的高频率Kafka数据直接写入ODS层表的HDFS文件路径下
一、目的 在离线数仓中,需要用Flume去采集Kafka中的数据,然后写入HDFS中。 由于每种数据类型的频率、数据大小、数据规模不同,因此每种数据的采集需要不同的Flume配置文件。玩了几天Flume,感觉Flume的使用难点就是配置文件 二、…...
Word或者WPS批量调整文中图片大小的快捷方法
文章目录 0、前言1、编写宏代码2、在文档中调用宏实现一键批量调整3、就这么简单! 0、前言 不知道大家是不是也和我一样,经常需要在编写的Word(或者WPS)文档里插入大量的图片,但是这些图片的尺寸大小一般都不一样&…...
url在api测试工具可以访问,但在浏览器不能访问
api测试工具可以正常返回数据,但在浏览器中输入url无法访问网站那么很有可能是端口号的原因被浏览器取消了访问。 我们可以通过两种方法解决: 1.修改配置文件中的端口号。 2.取消端口号的限制。(具体方法已经有很多前辈讲过了,若感…...
k8s之Helm
理论: 什么是 He lm 在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包…...
ElasticSearch 增删改查操作
本文主要是介绍 ElasticSearch 的文档增删改查和批量操作,同时会介绍一些 REST API 返回状态码的具体含义。 我们先来看下这个表: 这个表包含了 Index、Create、Read、Update、Delete 这五种方法,我们先来看下 CRUD 操作的 HTTP 请求都长什么…...
ctfshow sql171-179
mysql 先打开我们本地的mysql,可以看到这些数据库 information_schema information_schema 库: 是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息比如数据库名,数据库表, SCHEMATA表: 提供了当前MySQL实例…...
Mysql 自带分页异常
Mysql 自带分页异常 limit?,? 25条数据,在分页是10时,第一页和第二页的数据有重复的 分页是30时无异常。 经检查后发现,是mysql的分页出现了问题,其中分页后进行了排序,按照state进行的排序 select * from user or…...
MySQL MVCC机制详解
MySQL MVCC机制详解 MVCC, 是Multi Version Concurrency Control的缩写,其含义是多版本并发控制。这一概念的提出是为了使得MySQL可以实现RC隔离级别和RR隔离级别。 这里回顾一下MySQL的事务, MySQL的隔离级别和各种隔离级别所存在的问题。 事务是由 …...
搭建成功simulink-stm32硬件在环开发环境
本次实验所使用的软件版本和硬件平台参数如下: Matlab版本: 2021b STM32硬件平台:YF_STM32_Alpha 1R4(参考自STM32 Nucleo F103RB官方开发板) YF_STM32_Alpha开发板 STM32 Nucleo F103RB 开发板 2.1 STM32硬件支持包下载 读者朋友平时使用的是和谐版M…...
【计算机网络】UDP协议
UDP的结构 我们学习一个协议最主要的就是理解它的报文格式,对于UDP协议来说 我们看下面的这张图。 16位UDP长度,表示整个数据报(UDP首部UDP数据)的最大长度。UDP报文长度占两个字节,16位表示的数据范围(0-…...
ubuntu安装mysql8.0.35过程和报错处理
ubuntu安装mysql8.0.35过程 1.更新包列表:首先,确保您的系统已更新到最新状态。运行以下命令来更新包列表和安装最新的软件包: sudo apt update sudo apt upgrade2.安装MySQL服务器:运行以下命令来安装MySQL服务器: …...
SQL基础理论篇(一):什么是SQL
文章目录 什么是SQLSQL的四大部分常用的SQL标准参考文献 什么是SQL SQL的全称是Structured Query Language,即结构化查询语句。 其最早诞生于1974年,IBM研究员发布的一篇论文"SEQUEL:一门结构化的英语查询语言"。这几十年里&…...
物联网AI MicroPython学习之语法 GPIO输入输出模块
学物联网,来万物简单IoT物联网!! GPIO 介绍 模块功能: GPIO通用输入输出。 接口说明 GPIO - 构建GPIO对象 函数原型:Pin(port, dir , pull)参数说明: 参数类型必选参数?说明portintY对应开发板的引脚号…...
phalcon 访问IndexController 中只能访问indexAction方法,访问不了testAction等其它问题的解决办法
phalcon 访问IndexController 中只能访问indexAction方法,访问不了testAction,也访问不了indexAction方法,但是可以访问ArticleController里面的任意方法。访问其它方法出现这个错误“php - phalcon IndexController handler class cannot be loaded” 有人说是Apache 的rew…...
docker安装AWVS 23.9.231005181
本文声明仅AWVS用作学习使用 将镜像文件secfa_awvs.tar复制到目标机器上。 我的百度网盘文件路径: 链接:https://pan.baidu.com/s/1Pe4qlVp9XKbZ3dLrouaP2w 提取码:67mc –来自百度网盘超级会员V6的分享 在目标机器上,使用以下命…...
数据同步工具调研选型:SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比
产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品,支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据,已应用于数百家企业生产,也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
