物联网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 主…...
艾尔登法环帧率解锁终极指南:告别卡顿,畅享丝滑游戏体验
艾尔登法环帧率解锁终极指南:告别卡顿,畅享丝滑游戏体验 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_m…...
作业本耐用度差距巨大?深圳大明印刷厂拆解合规工艺,告别定制作业本掉页开裂通病
在校园日常教学中,很多学校都会遇到同一个难题:同一学期采购的作业本、定制作业本,品质差距悬殊,有的完好无损用到期末,有的短短几周就出现书脊开裂、页面脱落、边角破损、翻页卡顿等问题。不少人误以为是学生使用习惯…...
SSE 基础知识
SSE 基础知识 一、概念定义 SSE 全称 Server-Sent Events,是基于HTTP协议的服务器单向数据推送技术。 建立一次长连接后,服务端可主动持续向前端推送数据,无需客户端反复轮询请求。 二、核心特点 单向通信:仅服务器 → 客户端发送…...
Win10系统清理避坑指南:你的BAT脚本真的安全吗?盘点那些不能乱删的文件
Win10系统清理避坑指南:BAT脚本安全操作手册每次看到那些号称"一键清理系统垃圾"的BAT脚本在技术论坛被疯狂转发,我的工程师朋友老张就会忍不住摇头。上周他刚帮一位设计师修复了崩溃的Photoshop——原因正是某个清理脚本删除了Adobe的临时工作…...
大佬推荐的网络安全学习路线(从基础到高级,超级详细)
大佬推荐的网络安全学习路线(从基础到高级,超级详细) 说起网络安全,你可能会担心它是一个过时的行业。有人说,网络安全快卷死了,你既要攻又要防,并且随着技术的发展,你还要不断地学…...
基于STM32与LoRa的低功耗物联网气象站DIY全攻略
1. 项目概述:打造一个低功耗的家庭气象站前阵子想给家里的智能家居系统加点“环境感知”能力,琢磨着搞个能实时监测室外温湿度、风速风向的小玩意儿。市面上成品气象站要么数据出不来,要么功耗感人,不适合长期户外部署。于是&…...
Log4Shell漏洞深度解析:Spring Boot日志注入原理与四层修复方案
1. 这个漏洞不是“远程执行代码”那么简单——它是一次对Java生态信任链的系统性击穿Log4j CVE-2021-44228,业内常简称为“Log4Shell”,2021年12月爆发时,我正在给一家金融客户的Spring Boot微服务集群做灰度发布前的安全加固。凌晨三点收到告…...
结肠“瑞士卷”制片法
在肠道病理研究中,如何完整保留小鼠结肠的全层结构、同时避免人为损伤,一直是实验操作的难点。本文分享一套改良版“瑞士卷”制片技术,无需剖开肠管、无需机械顶压,即可获得高质量的全结肠切片,特别适合炎症、隐窝异常…...
Claude服务治理架构升级(生产环境零停机迁移实录)
更多请点击: https://codechina.net 第一章:Claude服务治理架构升级(生产环境零停机迁移实录) 为应对日益增长的推理请求量与多租户策略精细化需求,我们对Claude服务治理层实施了从单体API网关向云原生服务网格的平滑…...
ncmdumpGUI终极指南:3分钟搞定网易云音乐NCM文件转换
ncmdumpGUI终极指南:3分钟搞定网易云音乐NCM文件转换 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐的NCM加密格式而烦恼吗&…...
