用掌控板做抢答器

一、实验目的及要求
实现掌控板抢答器功能。

二、实验原理与内容
基于TinywebDB实现云数据库出题
基于掌控板实现按键抢答和判题
基于MQTT实现多端同步通讯


三、实验软硬件环境
硬件:掌控板
软件:Mind+

四、 实验过程(实验步骤、记录、数据、分析)

  1. 按照实验的基本套路,我们先来把前提条件给弄好。首先呢先弄好TinyWebDB这个云数据库的问题,先打开TinywebDB的官网,首先进到官网就是这个页面,然后你就可以在这个界面进行注册或者登录一个账号的操作。
    在这里插入图片描述
    登录成功后,就会得到一些基本的配置信息,你就可以在程序代码中根据相应的提示填写就好。
    在这里插入图片描述
    登陆成功后,就可以点击登录成功页面上方的数据浏览选项,就可以给实验需要的数据提供标签。下图就是我们本次实验所需要的数据(仅供参考)。
    在这里插入图片描述
    到这里呢,云数据库方面的问题就已经弄好了。接下来就到我们的老相识MQTT了,我们这次用的是Easy iot。老规矩,我们先进去Easy iot的官网看一下。
    1.先注册一个账号
    进入网站点击箭头所指的地方按照步骤进行注册
    进入网站点击箭头所指的地方按照步骤进行注册,就可以获得一个账号。注册成功登录后的界面如下图所示。
    /在这里插入图片描述
    登录进去后,先点击箭头所向的按钮,获得id和密码,这对下面的实验很重要。然后点击添加新的设备,添加三个设备。










在这里插入图片描述

在这里插入图片描述
到这里,这两个部分的准备就已经妥当。接下来就到了Mind+的准备了。老规矩,我们就在Miind+的拓展里面的主控板里面添加掌控板,在网络服务里面添加TinywebDB,wifi,MQTT这几种功能。如下图所示。
在这里插入图片描述
在这里插入图片描述
然后这个实验所有的准备都已经就绪。接下来就可以正式实验了。首先先看一下出题方的代码。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后就到抢答方的代码。在这里插入图片描述
在这里插入图片描述
基本的已经完成,现在来看一下,两方各自的完整代码。
出题方









/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <mPython_tinywebdb.h>

// 动态变量
String         mind_s_QiangDaXinXi, mind_s_WenTi;
volatile float mind_n_KaiShiJiShi, mind_n_XiTongJiShi, mind_n_JingDu, mind_n_Miao,
               mind_n_Fen, mind_n_YaoYiYao, mind_n_XianZhi, mind_n_JiShiZhuangTai;
// 函数声明
void DF_XianShiShiJian();
void obloqMqttEventT2(String& message);
// 静态常量
const String topics[5] = {
   
   "c3PBcmFMR","hZYvpiFGR","MzFOpiFMR","",""};
const MsgHandleCb msgHandles[5] = {
   
   NULL,NULL,obloqMqttEventT2,NULL,NULL};
// 创建对象
DFRobot_Iot       myIot;
mPython_TinyWebDB mydb;


// 主程序开始
void setup() {
   
   
	mPython.begin();
	dfrobotRandomSeed();
	myIot.setMqttCallback(msgHandles);
	myIot.wifiConnect("MEIZU 16th", "66666666");
	while (!myIot.wifiStatus()) {
   
   yield();}
	display.setCursorLine(1);
	display.printLine("Wi-Fi连接成功");
	myIot.init("iot.dfrobot.com.cn","Z0h15mFMg","","WA2JcmKMgz",topics,1883);
	myIot.connect();
	while (!myIot.connected()) {
   
   yield();}
	display.setCursorLine(1);
	display.printLine("MQTT连接成功");
	mydb.setServerParameter("http://tinywebdb.appinventor.space/api", "ktmzl","9c06bd73");
	mind_n_YaoYiYao = 0;
	mind_n_XianZhi = 0;
	mind_s_QiangDaXinXi = mydb.getTag("0");
	mind_s_WenTi = mydb.getTag((String((random(3, 8+1)))));
	display.setCursor(84, 13);
	display.print("00");
	display.setCursor(36, 13);
	display.print(":");
	display.setCursor(52, 13);
	display.print("00");
	display.setCursor(68, 13);
	display.print(". ");
	display.setCursor(20, 13);
	display.print("00");
	mind_n_JiShiZhuangTai = 1;
	mind_n_XianZhi = 0;
}
void loop() {
   
   
	if ((buttonA.isPressed())) {
   
   
		display.setCursorLine(3);
		display.printLine(mind_s_WenTi);
		mind_n_YaoYiYao = 1;
		mind_n_KaiShiJiShi = millis();
		display.setCursor(36, 13);
		display.print(":");
		display.setCursor(68, 13);
		display.print(". ");
		while (!(mind_n_JiShiZhuangTai==0)) {
   
   
			if ((buttonB.isPressed())) {
   
   
				myIot.publish(topic_0, mind_s_QiangDaXinXi);
				myIot.publish(topic_1, mind_s_WenTi);
			}
			DF_XianShiShiJian();
			yield();
		}
	}
}


// 自定义函数
void DF_XianShiShiJian() {
   
   
	display.setCursor(84, 13);
	display.print("  ");
	display.setCursor(52, 13);
	display.print("  ");
	display.setCursor(20, 13);
	display.print("  ");
	mind_n_XiTongJiShi = (millis() - mind_n_KaiShiJiShi);
	mind_n_JingDu = (((int)(mind_n_XiTongJiShi / 10)) % ((int)100));
	if ((mind_n_JingDu<10)) {
   
   
		display.setCursor(84, 13);
		display.print((String("0") + String((((int)mind_n_JingDu) % ((int)100)))));
	}
	else {
   
   
		display.setCursor(84, 13);
		display.print(mind_n_JingDu);
	}
	mind_n_XiTongJiShi = ((millis() - mind_n_KaiShiJiShi) / 1000);
	mind_n_Miao = (((int)mind_n_XiTongJiShi) % ((int)60));
	if ((mind_n_Miao<10)) {
   
   
		display.setCursor(52, 13);
		display.print((String("0") + String((((int)mind_n_Miao) % ((int)100)))));
	}
	else {
   
   
		display.setCursor(52, 13);
		display.print(mind_n_Miao);
	}
	mind_n_Fen = (((int)(mind_n_XiTongJiShi / 60)) % ((int)60));
	if ((mind_n_Fen<10)) {
   
   
		display.setCursor(20, 13);
		display.print((String("0") + String((((int)mind_n_Fen) % ((int)100)))));
	}
	else {
   
   
		display.setCursor(20, 13);
		display.print(mind_n_Fen);
	}
}

// 事件回调函数
void obloqMqttEventT2(String& message) {
   
   
	if ((mind_n_XianZhi==0)) {
   
   
		mind_n_JiShiZhuangTai = 0;
		delay(2000);
		display.setCursorLine(4);
		display.printLine((String(message) + String("抢答成功!")));
		mind_n_XianZhi = 1;
	}
}

现在是抢答方

/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <mPython_tinywebdb.h>

// 动态变量
volatile float mind_n_KeYiQiangDa;
// 函数声明
void obloqMqttEventT0(String& message);
void obloqMqttEventT1(String& message);
void onButtonBPressed();
// 静态常量
const String topics[5] = {
   
   "c3PBcmFMR","hZYvpiFGR","MzFOpiFMR","",""};
const MsgHandleCb msgHandles[5] = {
   
   obloqMqttEventT0,obloqMqttEventT1,NULL,NULL,NULL};
// 创建对象
DFRobot_Iot       myIot;
mPython_TinyWebDB mydb;


// 主程序开始
void setup() {
   
   
	mPython.begin();
	myIot.setMqttCallback(msgHandles);
	buttonB.setPressedCallback(onButtonBPressed);
	myIot.wifiConnect("MEIZU 16th", "66666666");
	while (!myIot.wifiStatus()) {
   
   yield();}
	display.setCursorLine(1);
	display.printLine("WIFI连接成功");
	myIot.init("iot.dfrobot.com.cn","Z0h15mFMg","","WA2JcmKMgz",topics,1883);
	myIot.connect();
	while (!myIot.connected()) {
   
   yield();}
	display.setCursorLine(2);
	display.printLine("MQTT连接成功");
	mydb.setServerParameter("http://tinywebdb.appinventor.space/api", "ktmzl","ktmzl");
}
void loop() {
   
   

}

// 事件回调函数
void obloqMqttEventT0(String& message) {
   
   
	display.fillScreen(0);
	display.setCursorLine(1);
	display.printLine(message);
	if ((message==String("你可以开始抢答问题了"))) {
   
   
		display.setCursorLine(2);
		display.printLine("抢答开始!");
		mind_n_KeYiQiangDa = 1;
	}
}
void obloqMqttEventT1(String& message) {
   
   
	display.setCursorLine(3);
	display.printLine(message);
}
void onButtonBPressed() {
   
   
	if ((1==mind_n_KeYiQiangDa)) {
   
   
		myIot.publish(topic_2, "lf");//lf就是某一个抢答方的姓名
	}
}

接下来就是实验结果截图
这是抢答方初始化成功的页面。
在这里插入图片描述

这是出题方的初始化页面。
在这里插入图片描述

这是出题方出题后,抢答方收到问题的页面。
在这里插入图片描述
这是抢答方抢答成功的页面。在这里插入图片描述
多人抢答的页面。这是第二个人抢答成功的页面。
在这里插入图片描述
这是我们小组Easy iot三个topic在后台收到的数据信息截图。第一张是提示抢答方可以开始抢答的topic,第二个就是记录出题方出的问题,第三个就是记录多人抢答成功的身份。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验结论
这个实验估计是这个学期弄过最麻烦的实验,因为有很多东西需要去调整,就像那些是时间的格式,这些都需要去测试,然后这个实验就已经把我们一整个学期学到的知识都运用起来了,所以在实验的过程中需要细心,因为心细可以帮助我们解决很多不必要的问题。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章