慧編程:光環板–MQTT擴展使用說明
一、前言
前幾天爲光環板寫了一個MQTT的擴展(ps:不得不說:慧編程(mblock)的開發者平臺真的很不錯(https://ext.makeblock.com):簡單,方便,入手快!👍👍👍)。今天從慧編程的產品那裏得知:有很多用戶對光環板的MQTT協議還不知道如何使用!爲了讓更多的用戶能夠學會使用MQTT擴展,於是寫下了這篇MQTT的教程!
二、加載MQTT協議
首先,先添加我們的光環板設備
然後在指令欄中-添加擴展-MQTT
在用到我們的MQTT功能之前首先你要有一個物聯網平臺的賬戶,擴展默認的物聯網平臺是(iot.dfrobot.com.cn)當然也可以使用本地物聯網平臺。
登錄IoT網站,註冊賬號。進入工作間。新建一個設備,默認名字“設備一”。
一個賬號,默認一共有10000條信息的儲存容量。這些容量共所有設備共享。例如,圖中設備上方顯示“0/1000”,那麼此設備最大可儲存1000條信息,已使用0條信息的儲存空間。如果此設備收發的信息超過1000條,新信息將不再存入。
每個設備默認每隔1s儲存一次消息。
觀察到設備唯一識別碼Topic以及左側的用戶信息,點擊眼睛圖標可以將隱藏的Iot_id和Iot_pwd顯示出來。
爲了稍後編程需要,記下相關賬號:
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
try:
mqtt.connect()
print('Connected')
except:
print('Disconnected')
通過mqtt協議連接到物聯網平臺。
4、訂閱主題
def mqtt_callback(topic, msg):
'message' = msg.decode('utf-8', 'ignore')
pass
mqtt.set_callback(mqtt_callback)
mqtt.subscribe('topic')
訂閱的消息通過回調傳遞。這是爲了避免對已訂閱的消息使用隊列,否則可能隨時收到消息(包括客戶端期望其他類型的服務器響應時,因此有兩種選擇:要麼通過回調立即傳遞它們,要麼一直排隊直到“預期”響應到達)。請注意,不需要隊列是一種迷惑:在這種情況下,運行時調用堆棧形成一個隱式隊列。而且與顯式隊列不同,它很難控制。之所以選擇這種設計,是因爲在通常情況下,處理訂閱的消息是最有效的。但是,如果在訂閱回調中發佈了QoS> 0的新消息,則可能導致深度遞歸或無限遞歸(後者意味着應用程序將以RuntimeException
終止)。
我們在使用此積木塊時,可以設置一個變量來代替訂閱的消息。然後用邏輯判斷不同的消息值來做相應的想要操作
5、等待服務器狀態
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()
。
6、斷開連接
mtqq.disconnect()
斷開與服務器的連接,釋放資源。
7、設置主線的離線消息
mqtt.set_last_will('', '')
設置MQTT“最後的意願”消息。應該在 connect()之前調用 。
四、樣例程序
一、發送消息到服務器端
在樣例一的程序中,當我們給光環板供電時,它先連接wifi,通過mqtt協議來連接到我們的物聯網平臺(mqtt_server)最後發送消息(hello)到物聯網平臺。我們打開物聯網平臺選擇相應的設備就可以看到我們剛纔發送過來的消息了,效果如下圖所示:
二、從服務器端訂閱消息
在樣例二中,通過mqtt平臺給光環板發送消息,光環板訂閱服務器端發來的消息,然後來做開燈關燈相關操作,演示效果如下:
mqtt_光環板.mp4