基于物联网的师生呼叫系统
![](https://cdn.bili33.top/npm/aciano-cdn@1.0.13/post/基于物联网的师生呼叫系统/cover.png)
基于物联网的师生呼叫系统
Aciano本文系湛江市第十七中学星火创客团队参赛项目,转载请保留声明!
作品所用到的软件
- Mind+
- LaserMaker
- App Inventor
作品所用到的硬件
- 掌控板
- 掌控I/O扩展板
- Speech Synthesizer Bee语音合成模块
App所需环境
注:本作品使用的MQTT模块在App Inventor平台是没有集成的,需要手动添加扩展才能使用,下载链接见文末。
创作背景
在学校的日常生活中我们发现,当老师需要学生执行某些事情,例如需要学生去办公室一趟、让课代表催交作业时,总是需要一个学生充当“传话人”的身份。
因为老师事务繁多,不可能什么事情都亲力亲为,而中小学是不允许学生携带手机进入校园的,老师没有通讯方式可以联系到学生,就会造成老师与学生之间无法联系的情况。
于是我们想到,可以制作一款师生呼叫系统,开发一个教师手机App端与教室端,它们之间通过WiFi+MQTT进行通讯,当老师需要传达指令时,通过手机App发送到教室端显示。
当教室端接收到老师发出的指令后,会通过语音合成模块读出消息,学生看到消息后即可执行老师的指令。这个作品减少了不必要的麻烦,提高了效率。
演示视频
教室端
1.初始化
设置一个名为“时间”的变量,设为1,这个在后文再详细讲。
然后初始化语音合成模块、物联网模块并连接WiFi,都是正常操作了。
2.接收消息
当收到消息时,先判断消息中是否包含“紧急”,若包含则板载灯亮起,并通过语音合成模块将消息读出来,重复执行直到按下A键。
3.“声音”变量
考虑到这个作品是放在教室中使用的,如果在上课的时候收到消息并播放语音,会打断老师的讲课,所以在初始化的时候设定了一个变量“声音”为1,即声音为打开状态;
若按下B键则将“声音”设为0,即声音为关闭状态,在上文收到消息时,判断完是否为重要消息后,会判断“声音”状态是否为1,若不为1则语音合成模块不会播放消息。
4.外观设计
外观设计使用软件为 LaserMaker ,通过激光切割机切割椴木板将外观烧出来。
手机App端
1.新建项目
打开App Inventor平台,新建一个项目:
2.设计UI
设计好App的界面,这里不详细展开说明:
3.初始化
首先将消息列表清除,然后将连接状态设为未连接的开始状态。
4.设定变量
班级列表
:设定八个班的名称,在初始化中设定这个变量为下拉框的元素,起到选择发送班级的作用:topic
:一个空变量,起到存储用户选择的班级topic的作用;
班级名称
:一个空变量,起到存储用户选择的班级的作用;
5.选择班级下拉框
将用户选择的班级匹配成对应的topic,并将topic和班级名称相对应存入到前面提到的空变量中。
6.连接MQTT
当“连接”按钮被按下时,先判断“topic”变量是否为空,用户在连接前是否已选择要发送消息的班级;
如果已经选择了班级,则调用MQTT模块连接Easy Iot物联网平台:
ipAdreess
是物联网平台的地址,默认填“iot.dfrobot.com.cn”即可;port
是连接的端口,填“1883”即可;idDevice
填任意9位数即可;userName
是你物联网平台上的Iot_id(user)
;password
是物联网平台上的Iot_pwd(password)
,均直接复制粘贴即可。
接着将“连接状态”变量设为1,判断是否成功订阅topic。
7.发送消息
当“发送命令”按钮被按下时,先判断连接状态是否为0(即是否为未连接状态),如值为true,则继续执行下面的代码。
判断完连接状态后,再判断用户发送的消息中是否包含屏蔽词,如果值为false,则判断文本输入框中是否有文本。
判断完上面的所有条件都为true后,则调用MQTT模块发送文本输入框中的文字到物联网平台上,再将文本输入框清空。
8.显示消息
成功发送消息后,将发送的消息显示在App下方的文本框中:
9.接收消息
收到消息时,将消息显示在文本框中:
10.其他代码
起到打开其他屏幕和清除消息列表的作用。
到这里,代码部分已经编写完了。
11.其他屏幕的UI设计
下载链接
MQTT模块扩展:co.com.dendritas.MqttTCP.aix
改进方向
考虑到一些学校可能没有实现网络覆盖全校,以后可以制作一款基于LoRa方案的师生呼叫系统,实现在无网络的环境下也能进行通讯。
本文系湛江市第十七中学星火创客团队参赛项目,转载请保留声明!