问题标题 : 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() |
用户 :
代码贴上了,使用EC600S链接mqtt服务器。可以换成你们的服务器。这个时候按键S4没反应 2021-02-23 10:49:50 |
客服 - david.tang :
你的这个函数只有封装,没有调用,还有后面代码的话,用附件上传吧,直接贴上去的话,没有缩进的,谢谢哈。 2021-02-23 11:28:58 |