2025-2-24 15:21:39 [显示全部楼层]
220浏览
查看: 220|回复: 0

[MIT IoT] [AI2+IoT]《数据采集和分析》- 项目一:给我发消息之Part 4

[复制链接]
本帖最后由 szjuliet 于 2025-2-24 15:27 编辑

[AI2+IoT]《数据采集和分析》- 项目一:给我发消息之Part 4图1[AI2+IoT]《数据采集和分析》- 项目一:给我发消息之Part 4图2[AI2+IoT]《数据采集和分析》- 项目一:给我发消息之Part 4图3

项目一:给我发消息之Part 4

制作 猜7秒 游戏App

猜7秒 游戏使用 Microbit 向移动App发送消息。本课我们要处理附带了数据的消息。那什么是数据?

数据:物体、人(甚至宠物!)在现实世界的值。

在第 1 课中,我们将物联网(IoT)定义为一种收集现实世界中事物数据的策略。在物联网中,传感器可以发送有关降雨量、阳光、热量、运动或磁场强度的数据,以帮助理解和解决现实世界中的问题。人们利用物联网数据来改善农业、保护濒危动物、建造更安全的房屋、节约能源以及完成许多其他任务。

猜7秒 游戏:Microbit 能够精确计时,那你呢?玩 猜7秒 游戏来比试比试!

完成后的App是这样:

  • App顶部的各个按钮用来与Microbit进行蓝牙连接
  • 中间部分是游戏指南
  • 下方的seconds标签用来显示从Microbit发送的数据,即玩家按下Microbit上的按钮的反应时间。

一、从这里开始

1. 获取 App Inventor 的初始代码。

  • 该代码可让你快速将 猜7秒 App连接到 Microbit。
  • 找到老师提供的文件(Seven_Seconds_STARTER.aia)或在包含本课程的文件夹中找到的文件。 (请在文末下载附件)
  • 将文件下载到电脑。注意保存文件的位置。
  • 进入 App Inventor AI2 界面设计和逻辑设计界面(http://ai2.appinventor.mit.edu)。
  • 从电脑中导入文件。

    2. 查看“猜7秒”App的界面设计。

    你能找到显示玩家反应时间(以秒为单位)的标签组件吗?

    这个标签组件有什么作用?猜猜各个组件的功能是什么。

  • 手机下方两个非可视组件都是App Inventor的外部扩展,为了更清楚组件的用途进行了重命名,原始组件的名字是:
    • BluetoothLE1
    • Microbit_Uart_Simple1

3. 在 App Inventor 中点击“Blocks(逻辑设计)”按钮查看初始代码。

  • 这6组代码块设置了所有蓝牙功能,如扫描和连接。这些代码块被折叠了,你可以双击代码块查看折叠的内容。
  • 添加一个事件代码块,在Microbit收到消息时响应。使其以秒为单位显示数值。

4. 如何编写代码以接收玩家数据?

  • 还记得在“Message Me Back”(给我回消息)App(Part 3)中用于接收消息的代码块吗?将相同的代码块拖入你的代码中。
  • 编写代码,然后对照下面的代码看看你的编写成果。
  • 你的任务是使用 reactionTimeDataLabel 标签组件来显示玩家的反应时间。还记得如何在 App Inventor 中更新标签的文本吗?
  • 另一个提示:玩家的反应时间会从 Microbit 发送到App。你只需以正确的格式显示该值即可。

    你编写的代码是不是和上图一样?不错!几乎 全对了……在设置标签之前,来自 Microbit 的数据需要进行一些特殊处理。具体见下文
  • 你从“MicrobitDataChannel”抽屉里拖入了 <font class="text-color-14" color="#ffc107">when MicrobitDataChannel.MessageReceived</font> 代码块吗?对!这个代码块会等待新消息传达到App。
  • 你拖入了 <font class="text-color-9" color="#009688">set reactionTimeDataLabel.Text</font> 代码块吗?太棒了!你希望App显示玩家的反应时间。  
  • 如果你在 <font class="text-color-9" color="#009688">set messageReceivedDataLabel.Text</font> 中添加了 <font class="text-color-1" color="#f44336">取消息</font> 代码块,离成功就差一点点!唯一的问题是 <font class="text-color-1" color="#f44336">消息</font> 不会以秒为单位。

    1 秒 = 1000 毫秒  
  • 来自 Microbit 的数据将在几毫秒内到达你的App。如何将消息数据转换为秒?使用一个数学代码块通过代码展示你的最佳猜测,接下来检查你编写的程序。
  • 当来自 Microbit 的新消息传入时,通过除以 1000 将变量 <font class="text-color-1" color="#f44336">消息</font> 的单位从毫秒转换为秒。现在该值将在App中以秒为单位显示。
  • App已准备就绪。在测试之前完成 Microbit 代码!
  • 提示:请在浏览器中同时打开 Microbit MakeCode 和 App Inventor 选项卡。你需要在两者之间来回切换以修改代码。

二、编写 Microbit 代码以发送玩家数据

1. 获取 猜7秒 游戏的 Microbit MakeCode。

  • 找到老师提供的文件(microbit-Seven_Seconds_STARTER.hex)或在包含本课程的文件夹中找到该文件。(请在文末的附件中下载)
  • 按照之前课程中的相同步骤在 makecode.microbit.org 导入代码。(重要提示:如果使用的是比 V2 版本更早的 Microbit,如Part 0_准备文档中所述,请转至 https://makecode.microbit.org/v4

2. 查看代码。

  • 当玩家按下 A 键时,代码块 <font class="text-color-6" color="#2196f3">显示图标</font> 会呈现出一个棋盘图案:。很简单对吧!
  • 但是为什么这个代码块会将变量 <font class="text-color-1" color="#f44336">start</font> 设置为一个叫做 <font class="text-color-2" color="#e91e63">运行时间(ms)</font> 的值呢?

计算机只知道运行时间Running Time

像 Microbit 这样的小型计算机在断电后无法保持时间。
每次 Microbit 开机时,计算机都认为时间是 0 毫秒(ms)。
每次 Microbit 唤醒时,它都会从 0 毫秒、1 毫秒、2 毫秒、3 毫秒……开始计数。

“生日快乐,我已经17ms大了”  

3. 与你的团队讨论:在游戏里,Microbit 是如何使用运行时间的?

  • 可以这样想:运行时间是记录已用时间的一种方式。
  • 已用时间是两个事件之间的时间差:

用较晚发生的事件(按钮 B)的时间减去较早发生的事件(按钮 A)的时间就是已用时间:

  • 上图中,从按钮 A 到按钮 B 所经过的时间为 6978 毫秒(44189 - 37211),约为 7 秒。玩家距离赢得 7 秒游戏仅差 22 毫秒!
  • 你知道在 Microbit 代码中这是如何实现的吗?

再看一下代码:

  • 当玩家按下 A 按钮时,Microbit 会将当前运行时间保存到变量 <font class="text-color-1" color="#f44336">start</font>  中。
  • 当玩家按下 B 按钮时,Microbit 会用新的当前运行时间减去之前的 <font class="text-color-1" color="#f44336">start</font>  时间,并将结果设置到变量 <font class="text-color-1" color="#f44336">elapsed</font>  中。

4. 将包含玩家数据的消息发送到你的App。

  • 如何把数据发送到App?

    • 你还记得那个用于发送消息的代码块抽屉吗?
    • 你使用此代码块发送了一个字符串——一个单词或一个字母。
    • 玩家数据将会是类似 130 或 2356 这样的消息。这是字符串数据类型还是数字数据类型?
    • <font class="text-color-51" color="#2196f3">蓝牙</font> 抽屉下方打开抽屉 <font class="text-color-6" color="#2196f3">…更多</font> 。 (如有需要,请查看Part 3 详细说明)寻找一个发送数字数据类型的代码块:
  • 你即将完成 Microbit 代码。为了展示玩家与 7 秒的接近程度,请使用Starter中提供的代码块,从玩家的用时中减去 7 秒。

  • 为什么代码块要从已用时间中减去 7000?如果游戏是猜 7 秒,为什么不直接用 7 ?

  • 请注意,玩家的反应时间可能是正数也可能是负数。(你可能还没有接触过负数!)在测试过程中,想想负数对玩家反应时间意味着什么。

  • 按照 Part0 准备材料中“为学生团队设置 micro:bit”的说明,将新代码下载(或“烧录”)到你的 micro:bit 中。
  • 使用电池、USB 或电源适配器为 micro:bit 供电。

    四、将App加载到 AI伴侣 中

  • 将7 Seconds App加载到设备上的 AI伴侣 中。

五、将 Microbit 连接到App

  • 如Part 1 所示,通过蓝牙将 App Inventor 和 Microbit 连接起来。(在App中点击“扫描”,在列表中找到你的 Microbit,然后点击“连接”。)

六、按照App中的说明玩 猜7秒 游戏

  • 你的反应时间能多接近 7 秒?这取决于你的心情吗?这取决于一天中的时间吗?
  • 当玩家超过 7 秒时,反应时间在App中是如何显示的?当玩家少于 7 秒时,又是如何显示的?为什么?
  • 能否在 App Inventor 代码中而不是 Microbit 代码中计算已用时间?这两个计算出来的已用时间有不同吗?为什么? (译注:实际编程试一下看看有没有不同,是否和你的推理一致)

七、进一步的编程挑战:

  • 如果游戏不是固定在 7 秒,那该怎么办?如何在 App Inventor 中使用滑块将目标时间更改为任何值?
  • 如何始终将反应时间显示为正数,无论玩家是少于还是超过 7 秒?
  • 如何使用 CloudDB 记录每个玩家的最高分?



Seven_Seconds_STARTER.zip

413.47 KB, 下载次数: 0

售价: 1 创造力  [记录]  [购买]

AppInventor初始文件

microbit-Seven_Seconds_STARTER.zip

568.95 KB, 下载次数: 0

售价: 1 创造力  [记录]  [购买]

microbit初始文件

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail