一、實驗目的及要求
【一】實作人臉識別
【二】實作云資料庫應用
【三】實作測溫資料mqtt上傳至物聯網云平臺
二、實驗原理與內容
基于二哈實作多人人臉學習和識別
基于TinywebDB實作云資料庫應用
基于EasyIoT實作mqtt資料上傳,
三、實驗軟硬體環境
硬體:掌控板
軟體:Mind+
四、實驗程序
1. 基于TinywebDB實作云資料庫應用
TinyWebDB服務器是網路存盤中的網路微資料庫
網址:http://tinywebdb.appinventor.space/

ps :為了方便使用,自己注冊一個用戶最好,

進入TinyWebDB服務器查詢頁面,注意API地址、用戶名、密鑰;點擊資料瀏覽,

輸入“標簽”和“值”,點擊“添加/修改”,即可添加或更新資料庫中的資料,
2. 基于二哈實作多人人臉學習和識別
(1)二哈使用須知

介面與介面說明
首先確保 “二哈” 當前的韌體版本不低于V0.5.1:
往右撥動 “功能鍵”, 直到選中“General Settings”,短按 “功能鍵”,進入二級選單;
往右撥動 “功能鍵”,直到選中 “Language”,再選中 “簡體中文”,“語言”左側就可以看到當前韌體版本,
若版本低于V0.5.1,則需要進行韌體升級
(2)開啟多人臉識別
二哈默認的人臉識別模式是 “單人人臉識別”,需要更改設定為 “識別多個”:
在人臉識別功能界面,長按 “功能鍵”,進入人臉識別的二級選單
撥動 “功能鍵” 至 “識別多個”,短按 “功能鍵” 選中,往右撥動 “功能鍵”,打開 “識別多個” 的開關(右撥),短按 “功能鍵” 保存,往左撥動 “功能鍵” 至 “保存并回傳”,選擇“確認”,

(3)學習人臉
在人臉識別的功能界面,先短按 “學習鍵”,再短按一次確認遺忘;
長按 “學習鍵” 學習各角度的人臉,學習完成后松開 “學習鍵”;
在倒計時結束前短按 “學習鍵”,再次學習新增人臉,否則只能先重新遺忘,再學習;
不需繼續學習可以等待倒計時結束或者短按 “功能鍵” 提前結束倒計時,

更多其他內容可直接訪問二哈的使用檔案,
3. 基于EasyIoT實作mqtt資料上傳
(1)登錄網址:https://iot.dfrobot.com.cn/index.html
(2)選擇用戶登錄或注冊,

(3)注冊登錄后進入作業間,點擊“添加新設備”,添加兩臺設備;
可以修改設備名稱,每臺設備可以存盤1000條資訊;
點擊左邊側的小眼睛可以查看用戶名稱和用戶密碼,

關于EasyIoT實作mqtt資料上傳的相關操作及實驗可以查看:
物聯網 掌控版 實驗一 Easy IoT實作mqtt實驗
4.代碼實作
(1)依次將以下的主控板、模塊、服務加載到Mind+上使用:




(2)撰寫連接WiFi部分:

(3)撰寫連接MQTT部分:

這里的引數配置使用第三步注冊好的用戶和設備號,注意不要出錯,
(4)撰寫配置TinyWebDB服務器部分:

這里的API地址、用戶名、密鑰請填寫自己查詢到資訊,
(5)圖形化代碼實作:

(6)Arduino C代碼
/*!
* MindPlus
* mpython
*
*/
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <mPython_tinywebdb.h>
#include <DFRobot_HuskyLens.h>
// 動態變數
String mind_s_name;
// 靜態常量
const String topics[5] = {"Cz4TcmFMR","QASTciFMR","","",""};
// 創建物件
DFRobot_Iot myIot;
mPython_TinyWebDB mydb;
DFRobot_HuskyLens huskylens;
// 主程式開始
void setup() {
mPython.begin();
myIot.wifiConnect("xxx", "xxxxxxxx");
while (!myIot.wifiStatus()) {yield();}
display.setCursorLine(1);
display.printLine("WiFi連接成功");
display.setCursorLine(2);
display.printLine(myIot.getWiFiLocalIP());
myIot.init("iot.dfrobot.com.cn","zJOhciFGR","","kJdhciFGgz",topics,1883);
myIot.connect();
while (!myIot.connected()) {yield();}
display.setCursorLine(3);
display.printLine("MQTT連接成功");
mydb.setServerParameter("http://tinywebdb.appinventor.space/api", "fisher","7c2b7d65");
huskylens.beginI2CUntilSuccess();
huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
delay(3000);
display.fillScreen(0);
display.setCursorLine(1);
display.printLine("開始識別人臉");
}
void loop() {
huskylens.request();
if (huskylens.isAppearDirect(HUSKYLENSResultBlock)) {
if (huskylens.isLearned(huskylens.readBlockCenterParameterDirect().ID)) {
display.setCursorLine(2);
display.printLine("請保持面向攝像頭");
mind_s_name = mydb.getTag((String(huskylens.readBlockCenterParameterDirect().ID)));
display.setCursorLine(3);
display.printLine(mind_s_name);
myIot.publish(topic_0, mind_s_name);
delay(1000);
display.setCursorLine(4);
display.printLine("人臉錄入");
}
else {
display.setCursorLine(4);
display.printLine("人臉未錄入");
}
}
}
5.實驗效果圖:
(1)MQTT后臺資訊查看

(2)實際效果:

wifi、mqtt連接成功





五、實驗總結
1.撰寫代碼時需要以工程師的角度去思考,當一個人使用這個功能的時候,看到的是什么,能使用的功能有什么,比如用戶首先看到螢屏的時候,上面不能是全黑的,理應有一些選項提供給用戶選擇,或者指示讓用戶去執行,
2.程式運行應該是在回圈內的,不然只會執行一次,
3.代碼鏈接:圖形化代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/206164.html
標籤:其他
上一篇:namespace-C#命名空間
