用掌控板做搶答器

一、實驗目的及要求
實現掌控板搶答器功能。

二、實驗原理與內容
基於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,第二個就是記錄出題方出的問題,第三個就是記錄多人搶答成功的身份。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
實驗結論
這個實驗估計是這個學期弄過最麻煩的實驗,因爲有很多東西需要去調整,就像那些是時間的格式,這些都需要去測試,然後這個實驗就已經把我們一整個學期學到的知識都運用起來了,所以在實驗的過程中需要細心,因爲心細可以幫助我們解決很多不必要的問題。









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