【行空板图形化Python入门教程】第13课:IoT课堂互动答题系统
第13课 IoT课堂互动答题系统随堂小测作为非常好的检测学生知识掌握情况的方法,被老师们广泛使用。今天我们就利用行空板物联网服务,制作一个课堂互动答题系统,实现老师随时都可以下发题目,获得学生对知识点的掌握情况。
任务目标
教师端:负责发送题目和收集学生回答的答案。
学生端:当接收到教师发送过来的题目,学生作答。
https://www.bilibili.com/video/BV1XG4y197WX/?spm_id_from=333.999.0.0&vd_source=27fedd3ac40d3e58da0788477833f7ac
演示视频
知识点
1. 了解程序中的线程知识
2. 了解行空板无线网络服务知识
3. 了解两块行空板构建简单物联网系统的方法
材料清单
1. 硬件清单
行空板x1
Type-C&Micro二合一USB线x1
2. 软件使用
Mind+编程软件x1
下载地址:https://www.mindplus.cc
动手实践
课堂互动答题系统由两部分组成:学生端和教师端。学生端可以在有限时间内答题,教师端能够远程查看学生答题情况,接下来我们就分三个任务来看看如何完成吧。
任务一:倒计时答题
在此任务中,我们将学习行空板开启线程方法,同时利用行空板文字和按钮对象完成学生端限时答题的功能。
任务二:教师端和学生端互发消息
在此任务中,我们将学习如何使用多块行空板搭建简单的物联网系统,完成项目的核心功能,实现教师端和学生端互相通信。
任务三:互动答题
在完成了教师端和学生端互发消息之后,我们将结合任务一程序,进一步完善答题系统,实现教师端和学生端的互动答题。
任务一:倒计时答题
1. 硬件搭建
使用USB连接线将行空板连接到计算机。
2. 软件准备
打开Mind+,按照下面图示完成软件准备过程。
3. 编写程序
学生端的行空板是一个答题器,主要功能是在倒计时时间内,完成答题,接下来我们来一起动手实现吧。
(1) 显示题目和选项
为了更好地完成题目和选项的显示,先来分析一下学生端界面的组成。整个界面由倒计时、题目、选项内容、选项按钮以及选择答案构成。
现在你可以根据分析,在屏幕上依次添加显示文字和按钮的对象。
注意:为了让比较长的文字完整的显示在行空板屏幕上,可以 更新题目文字对象的数字参数宽 ,实现自动换行。
点击选项按钮,记录并显示学生对应答案,别忘了记录时要使用全局变量。以按钮A的操作为例,参考如下实现方法:
(2) 倒计时答题
现在,我们已经可以选择答案了,接下来需要加入倒计时,限制答题时间。
(a) 显示倒计时
倒计时的显示我们可以利用 变量 和 重复执行几次 来实现,即 变量 每隔一秒减少1,重复执行 开始设定的时间次,并实时更新倒计时的显示。
(b) 倒计时答题
在使用答题器的过程中,“选择答案”显示的同时不断计时,我们可以使用“线程”指令来完成。在“行空板”“多线程”分类下,找到 线程对象thread1启动 和 当线程对象thread1启动后执行 两指令,搭配使用。
注意:“线程”常被用来实现某段时间多个功能同时运行,关于“线程”的介绍,参见“知识园地”。
现在,只需要在界面显示完成以后,启动线程,并在启动线程后显示倒计时。
倒计时停止,不能再继续作答,即按钮不能再被点击,只需要 更新按钮对象为禁用 即可。
现在,我们已经完成了学生端倒计时答题的功能。完整参考代码如下:
4. 程序运行
点击运行,倒计时为0之前可以点击按钮选择答案;倒计时结束后,按钮变灰,不可再答题。
5. 试一试
现在请为你的答题器设计简单的提示语,并在倒计时后判别答案的正确与否(正确答案为“B”),你可以参考下面的界面设计。
任务二:教师端和学生端互发消息
1. 任务分析
课堂互动答题系统中,需要至少两块行空板实现教师端和学生端对于答题相关信息的传输,我们可以利用行空板搭建物联网系统完成。
在这个物联网系统中,负责存储、收发答题数据的教师端是服务器,同时利用行空板屏幕在教师端实现控制发题和显示接收答案,也就是说,此时教师端也具备了移动终端的功能。而学生用来答题产生选择答案的学生端答题器是智能终端。
分析完两个行空板在物联网系统中的作用之后,需要做好行空板配置网络、开启SIoT服务等准备工作,才能开始编程,实现学生端和教师端间数据传输。
2. 准备工作
要实现教师端和学生端的数据传输,首先需要教师端和学生端行空板接入同一网络下,另外,为了可以使用电脑访问服务器连接两块行空板,电脑也需要接入同一网络下。接下来,我们就来分别配置电脑、教师端行空板和学生端行空板的网络,然后在教师端行空板上开启SIoT服务。
(1) 配置网络
首先,先将电脑连入路由器或手机的热点(需使用2.4G Wi-Fi);
然后,取一块行空板用USB线连上电脑,并打开浏览器在地址栏输入“10.1.2.3”,进入行空板服务页面。接下来,点击“网络设置”,寻找“连接WiFi”部分,你可以点击“扫描”寻找刚才电脑连接的无线网,点选WiFi名称并输入密码,点击“连接”,等待连接成功。
注意:有关行空板无线网络知识,参见“知识园地”。
完成后,拔下USB线,用同样的方式给另一块行空板配置网络。
最后,需要给两块行空板同时上电,使它们都保持开机状态。
注意:给行空板上电的方式有三种:USB或type-c口输出的电源适配器、USB或type-c口输出的充电宝或电脑USB端口。
接下来,我们需要分别进入两块行空板的Home菜单,查看它们的网络信息中的IP地址,检查是否连接成功。
如果此时两块行空板的IP地址,前三段数字相同,证明它们是在同一局域网下。现在我们可以选择其中一块行空板作为服务器,去开启SIoT服务。在本课项目中,选择了IP地址为192.168.43.222的行空板开启SIoT服务,作为服务器;而另一块IP地址为192.168.43.218的行空板作为智能终端。
(2) 开启SIoT服务
此时你可以像11课一样,在作为服务器的那块行空板的“Home菜单”中打开SIoT服务,也可以直接在浏览器中输入它的IP地址对SIoT服务进行设置或查看。
(3) 远程连接Mind+
由于接下来我们要给两块行空板编程,所以需要打开两个Mind+文件,分别起名为“教师端”和“学生端”,并采用远程连接的方式,使用行空板IP地址分别将行空板和对应的Mind+文件远程连接起来。远程连接方式如下:
3. 编写程序
准备工作已完成,接下来就可以编程实现教师端和学生端互相收发答题消息的任务了。
(1) 教师端
教师端需要实现发送开始答题命令和接收学生答案两个功能,我们可以设置发送按钮和接收文字显示对象,方便查看。
我们可以使用MQTT-py模块,设置、连接、订阅 两个主题:“开始答题/答案”,发出正确答案给学生端,控制开始答题;“学生答案/1”,用于接收学生端发出的答案。
接下来,可以参考11课收发消息的方法,按下按钮发送正确答案作为开始答题消息,然后接收学生消息并显示内容。完整教师端程序如下:
(2) 学生端
学生端可以接收教师端的开始做答消息,也可以发送自己的答案给服务器,你可以参考复制“教师端”的代码到“学生端”,适当修改提示文字和收发主题即可完成。
这里跨文件复制大段程序,可以利用Mind+下方的“书包”完成。
点击打开“书包”,然后将要复制的代码整段拖入“书包”区域,然后保存当前文件。
现在,打开要粘贴的Mind+文件,点击“书包”,即可找到复制的代码,此时直接拖出要使用代码到“脚本区”就完成粘贴操作了。
现在,你可以复制“教师端”文件中的代码到“学生端”,并适当的修改收发内容和对应主题,完成学生端代码,参考代码如下:
4. 程序运行
检查学生端和教师端的远程连接情况,先运行教师端,后运行学生端,模拟整个答题过程,观察运行情况。
注意:如果遇到“网络受限”导致教师端或学生端无法接收,可尝试重新运行程序或者更换无线网络。
任务三:互动答题
1. 编写程序
现在,我们已经可以实现教师端和学生端互发消息,但是这还不是一个完整的答题系统,接下来我们将任务一和任务二结合起来,完善教师端和学生端界面和功能,完成互动答题任务。
(1) 设计教师端和学生端界面
在互动课堂答题系统中,教师端界面包含题目以及控制“开始答题”按钮,我们可以直接利用“书包”复制任务一的题目和选项代码,适当修改并添加学生答案文字对象即可完成。
学生端需要在接收教师端控制消息以后,开始显示答题界面,也就是说学生端开始只显示等待提示,当接收到教师端消息以后再显示完整的答题器界面。当然,你也可以直接复制任务一的代码并修改。
(2) 学生端倒计时答题
任务一中,我们使用线程实现了程序开始运行就倒计时的效果,但是在答题系统中,应该是学生端收到教师的答案消息以后才开始倒计时,此时我们可以巧妙的以教师端发来的“正确答案”为标志开启倒计时。也就是说 正确答案变量 开始赋值为””,当接收到答案时,正确答案变量 被赋值为 传送过来的消息 ,此时,正确答案变量 不为””,开始倒计时。当然,为了持续检测 正确答案 的值,别忘了 循环执行。
最后,只需要在学生端设置结果判断并发送学生选择答案,帮助老师获得学生答题情况即可。完整的教师端和学生端参考代码如下:
教师端程序代码:
学生端程序代码:
2. 程序运行
检查Mind+远程连接,分别运行教师端和学生端程序。教师端部分,点击开始答题发送正确答案,等待学生答完题目,收到学生回答的答案;学生端部分,当接收到教师开始答题消息,学生读题并作答。
知识园地
1. 程序中的线程
线程,它是一个程序在运行过程中正在进行的任务,需要说明的是这里的任务是指一系列有先后执行顺序的代码,你可以把它类比成“线”。当一个程序只有一个任务时,通常我们说这个程序是单线程的,比如上节课学习的绘制可视化图表;但是当一个程序中需要多个任务同时执行时,这个程序就需要使用多个线程,来同时完成多个子任务,我们称从开始到最后一直执行的线程为主线程,其它子任务为子线程。
你可以类比在家做饭帮助理解单线程和多线程,当只有一个灶头时,你需要先完成蒸鸡蛋,然后再炒菜,两个菜只能按顺序制作,效率比较低,但当有两个灶头时,你可以在蒸鸡蛋的同时完成炒菜任务,这样效率就提起来了。
行空板与线程操作相关的指令有三个,位于行空板“多线程”分类下,你可以用 线程对象thread1启动 指令启动线程,线程对象thread1停止 结束指定线程,当线程对象thread1启动后执行 实现子线程任务。
另外,由于线程启动和运行会分掉主线程时间,线程使用越多,程序执行就越慢,甚至导致程序卡死,所以建议谨慎使用。
2. 行空板无线网络模块
行空板自带Wi-Fi&蓝牙模块RTL8723DS 2.4G&4.0,对应天线位于行空板上方左侧。
当有无线网络(或手机网络热点)时,你可以通过访问“行空板服务页面设置”对WiFi热点服务进行连接设置,利用它完成访问网络或物联网搭建任务。
另外,在没有无线网络的情况下,行空板也可以开启网络热点服务,虽然不能上网,但是其它行空板或可无线连接的设备可以通过连接此热点,完成物联网的搭建。行空板无线热点模式的开启,需要进入“行空板Home菜单”,按下行空板B键,找到并进入“开关无线热点模式”,检查并开启“无线热点”,启用后就会显示无线网络账号(SSID)和密码(PASS)。
3. 指令学习
本项目主要使用了学习了线程以及按钮启用/禁止指令,接下来我们就详细学习一下。
该指令用于生成一个线程对象。使用时,只需要放置在需要同时运行的程序部分,就可以启动该线程。
该指令用于停止指定的线程对象。使用时,需写明停止的线程对象名。
该指令用于定义线程对象名启动后,要执行的操作。使用时,需写明停止的线程对象名。
该指令用于启用/禁止已生成按钮对象的功能。使用时需写明已生成的对象名。
挑战自我
请参照本节课内容,加入多个学生端进行答题,并为教师端设计多个学生选择答案的显示界面以及答案正确与否的判断。
附件下载
请问用以上程序上传出现ConnectionRefusedError: Connection refused怎么解决 zhao1 发表于 2024-11-19 18:40
请问用以上程序上传出现ConnectionRefusedError: Connection refused怎么解决
检查一下服务器板子的siiot开了没
页:
[1]