请您详细描述您的问题,最好提供代码,以及哪里不起作用的截图等等,谢谢您。
'''
@*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没反应
你的这个函数只有封装,没有调用,还有后面代码的话,用附件上传吧,直接贴上去的话,没有缩进的,谢谢哈。