import network
import time
from simple2 import MQTTClient
# 连接Wi-Fi函数
def do_connect():
global wlan
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
# Wokwi仿真专用WiFi: Wokwi-GUEST, 无密码
wlan.connect('Wokwi-GUEST', '')
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
# ====连接Wi-Fi网络====
do_connect()
# ====MQTT初始化====
# 定义MQTT参数
SERVER = 'broker.emqx.io' # EMQX Cloud服务器地址
PORT = 1883 # 端口号
USER = 'emqx' # 用户名
PASSWORD = 'public' # 密码
CLIENT_ID = 'wokwi_client_' # 客户端ID
TOPIC = b'mytopic001test' # 发布主题
TOPIC2 = b'mytopic002test' # 订阅主题
# 定义接收到订阅消息回调函数
mygetdata = None
def sub_cb(topic, msg):
global mygetdata
print("接收订阅消息:", topic, msg)
mygetdata = msg.decode("utf-8")
# 创建MQTT客户端对象
client = MQTTClient(CLIENT_ID, SERVER, PORT, USER, PASSWORD)
# 连接MQTT服务器
client.connect()
# 向TOPIC主题发布消息
client.publish(TOPIC, b'start mqtt programme!!!')
# 设置消息回调函数
client.set_callback(sub_cb)
# 订阅主题TOPIC2
client.subscribe(TOPIC2)
# 持续发布和检测订阅接收消息
i = 0
while True:
# 非阻塞式接收消息
client.check_msg()
# 处理收到的消息
if mygetdata == "exit":
print("接收到exit,程序结束")
break
elif mygetdata != None:
print("getdata = {}".format(mygetdata))
mygetdata = None
# 发布带时间戳的数据
mydatetime = time.localtime()
s1 = "i={}, {}-{}-{} {}:{}:{}".format(i, mydatetime[0], mydatetime[1], mydatetime[2], mydatetime[3], mydatetime[4], mydatetime[5])
client.publish(TOPIC, s1.encode("utf-8"))
print("发布数据: {}".format(s1))
i += 1
time.sleep(1)
# 断开连接(正常情况下程序不会走到这里)
client.disconnect()
wlan.disconnect()
print("程序结束!!!")