MQTT Unit

MQTT Unit 是一款专为 MQTT 通信设计的以太网通信模块。它内置 W5500 以太网芯片,可无缝连接到以太网网络。该模块还包含 UART 通信接口,支持通过 AT commands 进行控制。此外,它集成了 RJ45 自适应 10/100M 网络端口,便于进行网络连接。

支持以下产品:

MqttUnit

MicroPython 应用示例

import os, sys, io
import M5
from M5 import *
from unit import MQTTUnit
import time

def mqtt_0_SubTopic_event(data):
    global mqtt_0
    print(data[0])
    print(data[1])

mqtt_0 = MQTTUnit(port=(18, 17))

mqtt_0.set_client('m5-mqtt-2024', 'mqtt.m5stack.com', 1883, '', '', 120)
mqtt_0.set_subscribe('SubTopic', mqtt_0_SubTopic_event, 0)
mqtt_0.set_connect()

while True:
    mqtt_0.check_msg()
    time.sleep_ms(50)

UiFlow2 应用示例

example.png

mqtt_demo.m5f2

保持原有的 msgstr 为空即可。

Constructors

class MQTTUnit(port=(, ))

创建一个 MQTTUnit 对象

参数为:
  • port 为 uart 引脚元组,包含:(tx_pin, rx_pin)

UIFLOW2:

init.png

Methods

MQTTUnit.set_client(client_id, server, port, username, password, keepalive)
参数:
  • client_id (str) – 连接到 broker 时使用的唯一 client id 字符串。

  • server (str) – 远程 broker 的主机名或 IP 地址。

  • port (int) – 要连接的服务器主机的网络端口。

  • username (str or None) – 用于 broker 身份验证的用户名。

  • password (str or None) – 用于 broker 身份验证的密码。

  • keepalive (int) – 允许与 broker 通信之间的最大时间间隔(单位:秒)。如果没有交换其他消息,该参数将控制客户端向 broker 发送 ping 消息的频率。

UIFLOW2:

set_client.png

MQTTUnit.set_connect()

连接到服务器。

UIFLOW2:

set_connect.png

MQTTUnit.set_disconnect()

断开与服务器的连接,并释放资源。

UIFLOW2:

set_disconnect.png

MQTTUnit.set_publish(topic, msg, qos=0)

发布一条消息。

参数:
  • topic (str or bytes or bytearray) – 消息应发布到的主题。

  • msg (str or bytes or bytearray) – 作为遗嘱要发送的消息。

  • qos (int) – 要使用的服务质量(QoS)等级

UIFLOW2:

set_publish.png

MQTTUnit.set_subscribe(topic, handler, qos=0)

订阅主题。

参数:
  • topic (str or bytes or bytearray) – 一个字符串,用于指定要订阅的订阅主题。

  • handler (function) – 当客户端订阅的主题收到消息,且该消息匹配现有主题过滤器回调时调用。

  • qos (int) – 订阅所需的服务质量(QoS)级别。默认为 0。

备注

  1. 使用该模块时,“MQTT connect”模块必须设置在该模块之后

  2. 服务器一次只能订阅 4 个主题。

UIFLOW2:

set_subscribe.png

已接收到一条显示消息的处理程序:

def mqtt_0_SubTopic_event(data):
    print("topic:", data[0])
    print("msg:", data[1])

在 UiFlow2 中,你可以通过 get_topic.pngget_msg.png 获取当前 handler 的 topicmessage

MQTTUnit.check_msg()

重要

check_msg() 是“主循环迭代”方法,包含阻塞和非阻塞版本。它们应在循环中定期调用;如果你没有任何其他前台任务需要执行(即你的应用仅对已订阅的 MQTT 消息作出响应),则使用 check_msg()

请注意,如果您仅发布消息,则无需调用 check_msg()

检查服务器消息。

UIFLOW2:

check_msg.png

MQTTUnit.check_modem_is_ready()

检查与 MQTT 单元的通信是否成功。

  • 返回:bool:True 或 False

UIFLOW2:

modem_is_ready.png

MQTTUnit.get_firmware_version()

获取当前固件版本号。

  • Return:string

UIFLOW2:

get_firmware_version.png

MQTTUnit.get_baudrate()

获取模块当前波特率,默认波特率为 9600。

  • 返回:int:4800、9600、19200、34800、115200、230400

UIFLOW2:

get_baudrate.png

MQTTUnit.get_network_status()

检查网络状态是已连接还是已断开。

  • 返回:int:0 ~ 1

UIFLOW2:

get_network_status.png

MQTTUnit.get_network_parameters(param)

获取模块当前实际的 IP 地址、子网掩码、网关和 DNS 服务器。

参数为:
  • param:IP 地址 = 0,子网掩码 = 1,网关 = 2,DNS 服务器 = 3。

UIFLOW2:

get_network_parameters.png

MQTTUnit.get_mac_address()

获取模块当前的 MAC 地址,MAC 地址格式为:XX-XX-XX-XX-XX-XX。

  • 返回:string:”XX-XX-XX-XX-XX-XX”

UIFLOW2:

get_mac_address.png

MQTTUnit.get_static_ip(param)

获取模块当前实际 IP 地址、子网掩码和网关。

参数为:
  • param:IP 地址 = 0,子网掩码 = 1,网关 = 2,DNS 服务器 = 3。

UIFLOW2:

get_static_ip.png

MQTTUnit.get_dhcp_status()

获取启用/禁用 DHCP 状态的信息

  • 返回:int:1:启用,0:禁用

UIFLOW2:

get_dhcp_status.png

MQTTUnit.set_dhcp_state(state)

设置启用/禁用 DHCP

参数为:
  • state:禁用 = 0,启用 = 1。

UIFLOW2:

set_dhcp_state.png

MQTTUnit.set_static_ip(ip, subnet, gateway)

设置 MQTT 模块的静态 IP 地址。

备注

当启用 DHCP 功能时,静态 IP 设置将不会生效。

参数为:
  • ip: “xxx.xxx.xxx.xxx”

  • subnet: “xxx.xxx.xxx.xxx”

  • gateway: “xxx.xxx.xxx.xxx”

UIFLOW2:

set_static_ip.png