物联网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 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!'
...

你可能感兴趣的:(ETTPython组件库,网络,人工智能,python,物联网,学习)