待解决
已受理
待回复
完成
Question title : mqtt接收数据时按键中断不起作用
Work order Number : MW3856123521800
Work order type : Bug
Submission time : 2021-02-22 10:56:47
Work order status : 完成
Contact information : Email
Contact information : 314******@qq.com

Communication record

  • 问题描述:
    mqtt阻塞接收数据时按键中断不起作用
  • david.tang : 已收到您的工单,我们将会尽快安排人手进行处理。
    2021-02-22 11:03:16
  • david.tang :

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

    2021-02-22 11:04:19
  • Anonymous users :

    '''

    @*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
  • Anonymous users :

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

    2021-02-23 10:49:50
  • david.tang :

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

    2021-02-23 11:28:58

Waiting for your appraise