實驗一--Easy IoT實現mqtt實驗

zhamaoiii發表於2020-09-25

mind+圖形化程式設計Easy IoT上mqtt訊息的通訊

一、實驗目的及要求

【實驗一】實現Easy IoT配置。
【實驗二】實現Easy IoT上mqtt訊息的通訊。

二、實驗原理與內容

實現mind+下Easy IoT上mqtt訊息的通訊。
甲按A鍵傳送訊息至topic0,同時監聽topic1,乙監聽topic0,按A鍵傳送訊息至topic1。

三、實驗軟硬體環境

硬體:掌控板
軟體:Mind+

四、實驗過程

【實驗一】實現Easy IoT配置。

進入Easy Iot註冊並登入,生成Iot_id(user)和Iot_pwd(password),新增兩個裝置用於topic0和topic1,如圖:
Easy Iot

【實驗二】實現Easy IoT上mqtt訊息的通訊。

準備工作

開啟mind+連線掌控板,選擇上傳模式,因為我們要實現的是mqtt訊息的通訊,所以我們在擴充套件中選擇網路服務分類下的MQTT以及Wi-Fi選項,如圖:
選擇MQTT和Wi-Fi

第一步、連線網路、初始化MQTT以及連線MQTT

先用手機或者電腦設定並開啟一個wifi熱點,這裡我們設定一個提示首先在掌控版螢幕上顯示“正在連線網路”,當網路連線成功後再顯示“網路連線成功”
然後初始化MQTT引數如圖: MQTT引數下一步連線MQTT,這裡我們也設定一個提示,當MQTT連線成功後在螢幕上顯示“mqtt連線成功。
程式碼塊如下:
第一步

第二步、傳送訊息

按下A鍵,傳送訊息至Topic0,這裡我們設定一個提示,當傳送訊息成功後,在螢幕上顯示“訊息傳送成功”,
程式碼塊如下:
傳送訊息

第三步、接收訊息

甲=監聽Topc1,當收到Topic1發來的MQTT訊息,螢幕上提示“您有新的訊息”,並亮起掌控板上所有led燈作為提示,在螢幕上顯示所接收到的MQTT訊息,
程式碼塊如下:
接收訊息
以下為該實驗的C程式碼:

#include <MPython.h>
#include <DFRobot_Iot.h>
// 函式宣告
void onButtonAPressed();
void obloqMqttEventT1(String& message);
// 靜態常量
const String topics[5] = {"8bDcSmKGg","RhtcSiFGR","","",""};
const MsgHandleCb msgHandles[5] = {NULL,obloqMqttEventT1,NULL,NULL,NULL};
// 建立物件
DFRobot_Iot myIot;


// 主程式開始
void setup() {
	mPython.begin();
	myIot.setMqttCallback(msgHandles);
	buttonA.setPressedCallback(onButtonAPressed);
	myIot.wifiConnect("ckx", "12345679");
	display.setCursorLine(1);
	display.printLine("正在連線網路");
	while (!myIot.wifiStatus()) {yield();}
	display.setCursorLine(2);
	display.printLine("網路連線成功");
	display.fillScreen(0);
	delay(3000);
	myIot.init("iot.dfrobot.com.cn","rGm5IiKGR","","rGmcSmFGRz",topics,1883);
	myIot.connect();
	while (!myIot.connected()) {yield();}
	display.setCursorLine(1);
	display.printLine("mqtt連線成功");
	delay(3000);
	display.fillInLine(1, 0);
}
void loop() {

}

// 事件回撥函式
void onButtonAPressed() {
	while (!(!buttonA.isPressed())) {yield();}
	myIot.publish(topic_0, "陳可行");
	display.fillScreen(0);
	display.setCursorLine(1);
	display.printLine("訊息傳送成功");
	delay(3000);
	display.fillInLine(1, 0);
}
void obloqMqttEventT1(String& message) {
	display.setCursorLine(1);
	display.printLine("您有新的訊息");
	rgb.write(-1, 0xFFFFFF);
	display.setCursorLine(2);
	display.printLine(message);
	delay(3000);
	rgb.write(-1, 0x000000);
	display.fillScreen(0);
}

五、測試/除錯及實驗結果分析

將程式碼上傳到裝置後,掌控板開始連線網路,連線MQTT
陳可行(我)按下A鍵,傳送MQTT訊息“陳可行”至Topic0,傳送成功後螢幕顯示“訊息傳送成功”,Easy Iot上的相應Topic收到訊息“陳可行”,
Easy Iot收到訊息“陳可行”
搭檔陳登祖(監聽Topic0)掌控板顯示收到的訊息“陳可行”,並亮起LED燈。
掌控板顯示“陳可行”
陳可行(我)監聽Topic1,搭檔陳登祖按下他的掌控板的A鍵傳送MQTT訊息“陳登祖”至Topic1,Easy Iot上的相應Topic收到訊息“陳登祖”,
Easy Iot收到訊息“陳登祖”
掌控板顯示收到的訊息“陳登祖”,並亮起LED燈。
掌控板顯示“陳登祖”
在組合程式碼塊時最好在每一步都加上必要的提示,方便我們在出現錯誤的時候進行除錯,也方便讓我們知道程式進行到了哪一步。

六、實驗結論與體會

這次實驗讓我瞭解了掌控板的幾大功能,更熟練地運用圖形化程式設計軟體mind+。