问题标题 : mqtt接收数据时按键中断不起作用
工单编号 : MW3856123521800 工单类型 : Bug 提交时间 : 2021-02-22 10:56:47 工单状态 : 完成
联系方式 : 邮件 联系信息 : 314245565@qq.com
问题描绘
问题描述: mqtt阻塞接收数据时按键中断不起作用
沟通记录
客服 - david.tang : 已收到您的工单,我们将会尽快安排人手进行处理。 2021-02-22 11:03:16
客服 - david.tang :

请您详细描述您的问题,最好提供代码,以及哪里不起作用的截图等等,谢谢您。

2021-02-22 11:04:19
用户 :

'''

@*thor: Baron

@Date: 2020-04-24

@LastEditTime: 2020-04-24 17:06:08

@Description: example for module umqtt

@FilePath: example_mqtt_file.py

'''

from umqtt import MQTTClient

import utime

import log

import checkNet

import _thread



'''

下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值,

在执行用户代码前,会先打印这两个变量的值。

'''

*_NAME = "QuecPython_MQTT_example"

*_VERSION = "1.0.0"


checknet = checkNet.CheckNetwork(*_NAME, *_VERSION)


# 设置日志输出级别

log.basicConfig(l*l=log.INFO)

mqtt_log = log.getLogger("MQTT")




state = 0


def sub_cb(topic, msg):

global state

mqtt_log.info("Subscribe Recv: Topic={},Msg={}".format(topic.decode(), msg.decode()))

state = 1


exitFlag = 1

def S4ExitFun(args):

global exitFlag

exitFlag = 0

print('exitFlag is %d ' %exitFlag)

print('interuput %d ' %args)



i = 0

a = 0

# 创建一个lock的实例

lock = _thread.allocate_lock()

def th_func(del*, id):

global a

global state

while True:

lock.acquire() # 获取锁

if a >= 10:

print('thread %d exit' % id)

lock.release() # 释放锁

state = 0

break

a += 1

print('[thread %d] a is %d' % (id, a))

lock.release() # 释放锁

utime.sleep(del*)


if __name__ == '__main__':

'''

手动运行本例程时,可以去掉该延时,如果将例程文件名改为main.py,希望开机自动运行时,需要加上该延时,

否则无法从CDC口看到下面的 poweron_print_once() 中打印的信息

'''

utime.sleep(5)

checknet.poweron_print_once()

'''

如果用户程序包含网络相关代码,必须执行 wait_network_connected() 等待网络就绪(拨号成功);

如果是网络无关代码,可以* wait_network_connected()

【本例程必须保留下面这一行!】

'''

checknet.wait_network_connected()


# 创建一个mqtt实例

# c = MQTTClient("umqtt_client", "mq.tongxinmao.com", 18830)

# 华为云mqtt实例

# c = MQTTClient("D34571103474e9KD", "112.93.129.113", 1883, "14507F0685BD44CC94CFC1AA5B5D29BF", "dece02aaaaaaaaaaaaaa", 60)

c = MQTTClient("D34571103474e9KD", "1.15.122.102", 1883, "14507F0685BD44CC94CFC1AA5B5D29BF", "dece02aaaaaaaaaaaaaa", 60)

# 设置消息回调

c.set_callback(sub_cb)

#建立连接

c.connect()

# 订阅主题

# c.subscribe(b"/public/*/quecpython")

c.subscribe(b"/v1/devices/device_03/command")


mqtt_log.info("Connected to mq.tongxinmao.com, subscribed to /public/*/quecpython topic" )

# 发布消息

c.publish(b"/public/*/quecpython", b"my name is Quecpython!")

mqtt_log.info("Publish topic: /public/*/quecpython, msg: my name is Quecpython")


_thread.start_new_thread(th_func, (i + 1, i)) # 创建一个线程,当函数无参时传入空的元组


while exitFlag:

c.wait_msg() # 阻塞函数,*消息


# if state == 1:

# break


# 关闭连接

c.disconnect()


2021-02-23 10:48:06
用户 :

代码贴上了,使用EC600S链接mqtt服务器。可以换成你们的服务器。这个时候按键S4没反应

2021-02-23 10:49:50
客服 - david.tang :

image.png你的这个函数只有封装,没有调用,还有后面代码的话,用附件上传吧,直接贴上去的话,没有缩进的,谢谢哈。

2021-02-23 11:28:58