esp8266 micropython MQTT自动重连

micropython 使用MQTT如果不经过配置的话,会自动断开连接,我根据自己的踩过的坑分享一下

主要地方

client = MQTTClient(client_id, mserver, port, user=mq_user, password=mq_password,keepalive=60)

tim.init(period=keepLiveTime*1000, mode=Timer.PERIODIC, callback=lambda t: keepLiveTimeCb(client))

定时ping()要不然过一会指定掉线。

from umqtt.robust import MQTTClient
from machine import Pin
import machine
import network
import time
import utime



def sub_callback(topic, cmd):
    """
    收到订阅消息回调
    """
    global client
    print((topic_ctl, cmd))
    print(cmd)
    if cmd == 1 or  cmd == b'1':
        pub_msg = 'LED1: ON-state'
        feedFish()
    elif cmd == b'led1 OFF' or cmd == b'led1 off':
        pub_msg = 'LED1: OFF-state'
    elif cmd == b'led2 ON' or cmd == b'led2 on':
        pub_msg = 'LED2: ON-state'
    elif cmd == b'led2 OFF' or cmd == b'led2 off':
        pub_msg = 'LED2: OFF-state'
    else:
        pub_msg = 'other msg'
    client.publish(topic_sta, pub_msg, retain=True)

def connectMQTT():
    client = MQTTClient(client_id, mserver, port, user=mq_user, password=mq_password,keepalive=60)
    client.set_callback(sub_callback)
    client.DEBUG = True
    if not client.connect(clean_session=False):
        print("New session being set up")
        client.subscribe(topic_ctl)
 
    client.publish(topic_sta, 'ESP32 Device online', retain=True)
    print("Connected to %s, subscribed to %s topic" % (mserver, topic_ctl))
    return client


def keepLiveTimeCb(client):
    print("ping....")
    client.ping()
    do_connect() 
try:
    do_connect() 
    client = connectMQTT()
    tim = Timer(-1)
    keepLiveTime = 30
    tim.init(period=keepLiveTime*1000, mode=Timer.PERIODIC, callback=lambda t: keepLiveTimeCb(client))
    while True:
       client.wait_msg()
    time.sleep(5)   
except OSError as e:
    reconnect()
finally:
    if client is not None:
        print('off line')
        client.disconnect()          

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值