esp32(客户端)链接本地mqtt服务器,配合mqttx(客户端),点亮led,局域网连接
·
import time
import network
from umqttsimple import MQTTClient
# ---- 添加 --------
from machine import Pin #
def do_connect():
#STA,链接热点模式
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('Redmi', '123456789')
i = 1
while not wlan.isconnected():
print("正在链接...{}".format(i))
i += 1
time.sleep(1)
print('network config:', wlan.ifconfig())
def sub_cb(topic, msg): # 回调函数,收到服务器任何类型(主题)消息后都会调用这个函数
print(topic, msg)
# ---- 添加 --------
if topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "on":
led_pin.value(1)
elif topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "off":
led_pin.value(0)
# ---- 添加 --------
# 1. 联网,esp32要和mqt服务器(本地电脑)在同一个局域网下
do_connect()
# 2. 在esp32上创建mqtt客户端,客户端名称,mqt服务器ip
c = MQTTClient("umqtt_client", "192.168.56.8") # 建立一个MQTT客户端
c.set_callback(sub_cb) # 设置回调函数,当收到服务器任何消息后都会调用这个函数
c.connect() # 建立连接
c.subscribe(b"ledctl") # 给服务器说订阅这个主题
# ---- 添加 --------
# 3. 创建LED对应Pin对象
led_pin = Pin(2, Pin.OUT)
# ---- 添加 --------
while True:
c.check_msg()#检测是否有消息
time.sleep(1)

数据传输时为byte类型,要进行decode解码,解码类型为utf-8,

mqttx向服务器发送消息和消息类型,服务器接收,发现有客户端(esp32)订阅该消息类型,会把该消息转发给esp32,esp32进行解码后进行逻辑判断,执行对应的函数。三者在同一局域网下
链接远程emqx:

连接本地emqx,
端口号 1883
ip:电脑的ip地址,这次是192.168.3.75

emqx效果

更多推荐

所有评论(0)