慧編程:光環板–MQTT擴展使用說明
1、前言
前幾天爲光環板寫了一個MQTT的擴展(ps:不得不說:慧編程(mblock)的開發者平臺真的很不錯(https://ext.makeblock.com):簡單,方便,入手快!👍👍👍)。今天從慧編程的產品那裏得知:有不少用戶對光環板的MQTT協議還不知道如何使用!爲了讓更多的用戶可以學會使用MQTT擴展,因而寫下了這篇MQTT的教程!python
2、加載MQTT協議
首先,先添加咱們的光環板設備
而後在指令欄中-添加擴展-MQTT
編程
在用到咱們的MQTT功能以前首先你要有一個物聯網平臺的帳戶,擴展默認的物聯網平臺是(iot.dfrobot.com.cn)固然也可使用本地物聯網平臺。服務器
登陸IoT網站,註冊帳號。進入工做間。新建一個設備,默認名字「設備一」。 一個帳號,默認一共有10000條信息的儲存容量。這些容量共全部設備共享。例如,圖中設備上方顯示「0/1000」,那麼此設備最大可儲存1000條信息,已使用0條信息的儲存空間。若是此設備收發的信息超過1000條,新信息將再也不存入。 每一個設備默認每隔1s儲存一次消息。 觀察到設備惟一識別碼Topic以及左側的用戶信息,點擊眼睛圖標能夠將隱藏的Iot_id和Iot_pwd顯示出來。
爲了稍後編程須要,記下相關帳號:ide
iot_id: Skv3zKyNb網站
iot_pwd: r1lD3ztJ4bspa
topic: BJpHJt1VW設計
3、mqtt積木塊的使用說明
mqtt擴展必須在光環板聯網的狀況請款下才能使用!3d
一、mqtt初始化設置
mqtt = MQTTClient('0805e3d04f3b34e7', '182.254.130.180', 1883, '', '', keepalive=0)
code
這裏的clientID和server 是肯定的(固然能夠跟你本身鏈接不一樣的服務器進行更改),iot_id和iot_pwd是咱們本身的物聯網用戶明和密碼(也就是咱們剛纔須要記下的那串字符)。server
二、發佈消息到主題上
mqtt.publish('topic', 'hello')
向物聯網設備(topic)發送消息(eg能夠把語音識別的內容發送到咱們的物聯網平臺,字符串、變量值)!
三、鏈接mqtt
try: mqtt.connect() print('Connected') except: print('Disconnected')
經過mqtt協議鏈接到物聯網平臺。
四、訂閱主題
def mqtt_callback(topic, msg): 'message' = msg.decode('utf-8', 'ignore') pass mqtt.set_callback(mqtt_callback) mqtt.subscribe('topic')
訂閱的消息經過回調傳遞。這是爲了不對已訂閱的消息使用隊列,不然可能隨時收到消息(包括客戶端指望其餘類型的服務器響應時,所以有兩種選擇:要麼經過回調當即傳遞它們,要麼一直排隊直到「預期」響應到達)。請注意,不須要隊列是一種迷惑:在這種狀況下,運行時調用堆棧造成一個隱式隊列。並且與顯式隊列不一樣,它很難控制。之因此選擇這種設計,是由於在一般狀況下,處理訂閱的消息是最有效的。可是,若是在訂閱回調中發佈了QoS> 0的新消息,則可能致使深度遞歸或無限遞歸(後者意味着應用程序將以RuntimeException
終止)。
咱們在使用此積木塊時,能夠設置一個變量來代替訂閱的消息。而後用邏輯判斷不一樣的消息值來作相應的想要操做
五、等待服務器狀態
mqtt.wait_msg() mqtt.check_msg()
wait_msg()
-等待服務器消息。訂閱消息將傳遞到使用set_callback()設置的回調中,其餘任何消息將在內部進行處理。
check_msg()
-檢查是否有來自服務器的待處理消息。若是是,則以與wait_msg()相同的方式處理,不然,當即返回。
wait_msg()
和check_msg()
是「主循環迭代」方法,有阻塞和無阻塞版本。應該在循環中按期調用它們;若是您沒有其餘要執行的前臺任務(即,您的應用程序僅對已訂閱的MQTT消息作出反應),則應調用wait_msg();
若是您也要處理其餘前臺任務,則應調用 check_msg()
。
請注意,若是您僅發佈消息,而無需訂閱
,則無需調用wait_msg()
/ check_msg()
。
六、斷開鏈接
mtqq.disconnect()
斷開與服務器的鏈接,釋放資源。
七、設置主線的離線消息
mqtt.set_last_will('', '')
設置MQTT「最後的意願」消息。應該在 connect()以前調用 。
4、樣例程序
1、發送消息到服務器端
在樣例一的程序中,當咱們給光環板供電時,它先鏈接wifi,經過mqtt協議來鏈接到咱們的物聯網平臺(mqtt_server)最後發送消息(hello)到物聯網平臺。咱們打開物聯網平臺選擇相應的設備就能夠看到咱們剛纔發送過來的消息了,效果以下圖所示:
2、從服務器端訂閱消息
在樣例二中,經過mqtt平臺給光環板發送消息,光環板訂閱服務器端發來的消息,而後來作開燈關燈相關操做,演示效果以下:
mqtt_光環板.mp4