import time
from machine import Timer
from machine import Pin
import network
from umqttsimple import MQTTClient
def do_connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('15121', '18628084896')
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.value(1) # 吸合
time.sleep_ms(200)
led.value(0) # 断开
elif topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "off":
led.value(1) # 吸合
time.sleep_ms(200)
led.value(0) # 断开
elif topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "gg":
led.value(1) # 吸合
time.sleep(5)
led.value(0) # 断开
# ---- 添加 --------
# 1. 联网
do_connect()
# 2. 创建mqt
c = MQTTClient("umqtt_client", "121.43.39.58",keepalive=0) # 建立一个MQTT客户端
c.set_callback(sub_cb) # 设置回调函数
c.connect() # 建立连接
c.subscribe(b"ledctl") # 监控ledctl这个通道,接收控制命令
# ---- 添加 --------
# 3. 创建LED对应Pin对象
led = Pin(27, Pin.OUT)
lcd=Pin(22,Pin.OUT)
lcd.value(0)
#def MQTT_Send(tim):
# tim = Timer(1)
# tim.init(period=2000, mode=Timer.PERIODIC, callback=MQTT_Send)
# ---- 添加 --------
while True:
c.check_msg()
time.sleep(1)
---------------------------------------------------------------------------------------------------------------------------
我尝试过心跳包的例程(倒数几行的注释),好像是能保持在线了但是收不到订阅,麻烦大佬帮萌新看看这个该怎么改,确实不知道咋办所以我把上面keeplive写了个0
ESP32使用mqtt做了一个远程的电脑开关,麻烦大佬看看怎么解决心跳包的问题
Re: ESP32使用mqtt做了一个远程的电脑开关,麻烦大佬看看怎么解决心跳包的问题
很关键谢谢大佬,这篇比我之前找到的都详细不少.
-
- 随机主题
- 回复总数
- 阅读次数
- 最新文章
-
- 1回复总数
- 2337 阅读次数
- 最新文章 由 gs001588
2020年 1月 26日 00:09
-
- 1回复总数
- 3330 阅读次数
- 最新文章 由 shaoziyang
2020年 1月 26日 12:32
-
- 1回复总数
- 4487 阅读次数
- 最新文章 由 shaoziyang
2020年 1月 26日 12:36