慧编程:光环板--MQTT扩展使用说明
慧编程:光环板–MQTT扩展使用说明
一、前言
前几天为光环板写了一个MQTT的扩展(ps:不得不说:慧编程(mblock)的开发者平台真的很不错(https://ext.makeblock.com):简单,方便,入手快!👍👍👍)。今天从慧编程的产品那里得知:有很多用户对光环板的MQTT协议还不知道如何使用!为了让更多的用户能够学会使用MQTT扩展,于是写下了这篇MQTT的教程!
二、加载MQTT协议
首先,先添加我们的光环板设备,然后在指令栏中-添加扩展-MQTT
在用到我们的MQTT功能之前首先你要有一个物联网平台的账户,扩展默认的物联网平台是(iot.dfrobot.com.cn)当然也可以使用本地物联网平台。
1 |
|
为了稍后编程需要,记下相关账号:
iot_id: Skv3zKyNb
iot_pwd: r1lD3ztJ4b
topic: BJpHJt1VW
三、mqtt积木块的使用说明
mqtt扩展必须在光环板联网的情况请款下才能使用!
1、mqtt初始化设置
mqtt = MQTTClient('0805e3d04f3b34e7', '182.254.130.180', 1883, '', '', keepalive=0)
这里的clientID和server 是确定的(当然可以跟你自己连接不同的服务器进行更改),iot_id和iot_pwd是我们自己的物联网用户明和密码(也就是我们刚才需要记下的那串字符)。
2、发布消息到主题上
mqtt.publish('topic', 'hello')
向物联网设备(topic)发送消息(eg可以把语音识别的内容发送到我们的物联网平台,字符串、变量值)!
3、连接mqtt
1 |
|
通过mqtt协议连接到物联网平台。
4、订阅主题
1 |
|
订阅的消息通过回调传递。这是为了避免对已订阅的消息使用队列,否则可能随时收到消息(包括客户端期望其他类型的服务器响应时,因此有两种选择:要么通过回调立即传递它们,要么一直排队直到“预期”响应到达)。请注意,不需要队列是一种迷惑:在这种情况下,运行时调用堆栈形成一个隐式队列。而且与显式队列不同,它很难控制。之所以选择这种设计,是因为在通常情况下,处理订阅的消息是最有效的。但是,如果在订阅回调中发布了QoS> 0的新消息,则可能导致深度递归或无限递归(后者意味着应用程序将以RuntimeException
终止)。
我们在使用此积木块时,可以设置一个变量来代替订阅的消息。然后用逻辑判断不同的消息值来做相应的想要操作
5、等待服务器状态
1 |
|
wait_msg()
-等待服务器消息。订阅消息将传递到使用set_callback()设置的回调中,其他任何消息将在内部进行处理。
check_msg()
-检查是否有来自服务器的待处理消息。如果是,则以与wait_msg()相同的方式处理,否则,立即返回。
wait_msg()
和check_msg()
是“主循环迭代”方法,有阻塞和无阻塞版本。应该在循环中定期调用它们;如果您没有其他要执行的前台任务(即,您的应用程序仅对已订阅的MQTT消息做出反应),则应调用wait_msg();
如果您也要处理其他前台任务,则应调用 check_msg()
。
请注意,如果您仅发布消息,而无需订阅
,则无需调用wait_msg()
/ check_msg()
。
6、断开连接
mtqq.disconnect()
断开与服务器的连接,释放资源。
7、设置主线的离线消息
mqtt.set_last_will('', '')
设置MQTT“最后的意愿”消息。应该在 connect()之前调用 。
四、样例程序
一、发送消息到服务器端
在样例一的程序中,当我们给光环板供电时,它先连接wifi,通过mqtt协议来连接到我们的物联网平台(mqtt_server)最后发送消息(hello)到物联网平台。我们打开物联网平台选择相应的设备就可以看到我们刚才发送过来的消息了,效果如下图所示:
二、从服务器端订阅消息
在样例二中,通过mqtt平台给光环板发送消息,光环板订阅服务器端发来的消息,然后来做开灯关灯相关操作,演示效果如下:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!