一、实验目的及要求
实现掌控板抢答器功能。
二、实验原理与内容
基于TinywebDB实现云数据库出题
基于掌控板实现按键抢答和判题
基于MQTT实现多端同步通讯
三、实验软硬件环境
硬件:掌控板
软件:Mind+
四、实验过程(实验步骤、记录、数据、分析)
(一)实验抢答方和裁判方准备:WI-FI连接、设置服务器参数、MQTT初始化参数、TingWebDB数据库的数据录入。
①程序
②配置服务器参数(网址:http://tinywebdb.appinventor.space/,连接数据库,在数据库中设置相关操作的标签以及抢答的问题。)
TinyWebDB详细信息:
数据库标签信息:其中ok标签用于裁判判断开始计时,PID标签用于计时暂停,q标签用于判断题目,q1-q5标签表示5个不同的问题。
③初始化mqtt配置(网址为:http://iot.dfrobot.com.cn/),MQTT参数设置如下,topic_0,topic_1,topic_2分别为三个抢答方接受mqtt信息)
Easy IoT用户的信息以及三个topci信息
④源码:
(二)裁判出题
定义一个裁判方出题的函数,负责掌控整个答题过程。裁判按下A键后,读取数据库标签所包含的内容,并从1~5题目中随机选取题目出题,出题后裁判方的掌控板上显示出题成功,按下B键则开始抢答计时。
源码:
(三)抢答方
定义一个抢答方函数,负责进行抢答,此时的裁判不参与抢题,抢答方在连接mqtt、wifi和服务器后,掌控版上会显示(待裁判出题完成后,按P刷新),刷新后,掌控板会显示当前的题目。如果抢答者将按钮A+B同时按下,则同时开始抢答,抢答开始的同时掌控板上开始计时时间,若有一位选手抢答成功,该名选手掌控板三个会亮绿灯,并且屏幕出现选项提示(触摸按键Y为是,触摸N按键为否),而其他选手的掌控板则出现“抢答失败!”提示,掌控板不亮灯。
源码:
计时器:
计时器源码:
void DF_JiShiQi() {
mind_n_flag = 1;
mind_n_my_float_variable = millis();
while (1) {
if ((mind_n_flag==1)) {
mind_n_now = (millis() - mind_n_my_float_variable);
mind_n_ms = (((int)mind_n_now) % ((int)1000));
mind_n_s = (((int)(mind_n_now / 1000)) % ((int)60));
mind_n_min = (floor(((mind_n_now / 1000) / 60)));
display.setCursor(37, 22);
display.print((String((String((String((String(mind_n_min).toInt())) + String(":"))) + String((String((String(mind_n_s).toInt())) + String(":"))))) + String((String(mind_n_ms).toInt()))));
}
抢答、回答及等待正确与否结果(抢答成功方选择是否答案,并把回答的选择发送到MQTT后台,发送成功在掌控板上会显示回答成功并等待回答结果,有裁判方在后台判断回答的结果是否正确)
(四)裁判判题
待抢答成功的选手选择选项之后,该名选手的掌控板会将选项信息发送到Easy Iot工作平台,裁判可以在平台上判断选手回答是否正确并给予回复。
(1)Easy Iot显示各选手抢答时间
(2)抢答成功者回答问题的选项
(3)裁判判题并给出回复
(五)抢答方接受回答结果
裁判方在mqtt可以在后台接收到 topic_1、topic_2 、topic_3抢答方所回答问题的答案,若回答问题正确,则可以在后台发送“对”到指定的抢答方,接收到信息后,抢答方的掌控板全黑显示“回答正确加一分”并亮绿灯,反之显示“回答错误”亮红灯。
五、测试/调试及实验结果分析
①裁判方和抢答方连接wifi、mqtt、服务器成功后
②当裁判方按下A键出题,裁判方和抢答方掌控板均显示题目
③裁判方按下B键进行抢答计时
④抢答成功的一方掌控板上显示抢答成功,其他显示抢答失败,成功抢答的重新出现问题及选项,并且全部亮绿灯
⑤抢答成功的一方选择答案选项,通过mqtt传输答案到后台供裁判方判断,掌控板显示回答成功,等待正确与否。
⑥后台裁判放判断回答正确后,显示回答正确加一分,同时亮绿灯,失败则回答错误并亮红灯
⑦重新出题后可刷新新的题目