一、实验目的及要求

【一】实现人脸识别
【二】实现云数据库应用
【三】实现测温数据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.代码链接:图形化代码

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐