【编程学习】APP Invertor编程让Micro:bit板连接手机

2020年8月12日 10 : 43

我们已经用Micro:bit做过不少编程试验,也用APP Invertor编写过手机APP。今天我们将两者结合起来,编写一个APP,让安卓手机和Micro:bit通过蓝牙连接起来。由于实现两个设备连接再后进行基础交互的代码量较多,篇幅所限我们仅实现两设备通过蓝牙扫描和连接。后续实现交互的代码您可以在扫码下载源代码后自行分析学习。

1、 器材列表

1. 安卓手机

2. Micro:bit板及数据线

3. APP Inventor编程平台APP.gzjkw.net或ai2.17coding.net

4. 扩展下载网站iot.APPinventor.mit.edu

5. Micro:bit编程平台makecode.microbit.org

2、 下载项目扩展

为了更好兼容Micro:bit的低功耗蓝牙,我们没有使用APP Invertor自带的蓝牙连接组件,而是添加了新的蓝牙扩展。

打开APP Invertor的支持网站(iot.APPinventor.mit.edu)。在左边Internet of Things菜单中可以找到BluetoothLE和BBC Micro:bit页面。

1. BluetoothLE是APP Invertor专用的低功耗蓝牙扩展。在BluetoothLE页面中点击"Download the BluetoothLE extension "把.aix扩展文件下载到本地备用,也可以复制aix文件的网络地址(http://iot.APPinventor.mit.edu/assets/resources/edu.mit.APPinventor.ble-20190701.aix

)在导入项目扩展时填入。

安装该扩展后可以让APP Invertor编写的程序通过手机蓝牙搜索和连接低功耗蓝牙设备,并进行通信。

2. 在BBC Micro:bit页面中,点击"Download the BBC Micro:bit extension"可以下载到Micro:bit的专用扩展。或在导入扩展时直接填写下载网址(http://iot.APPinventor.mit.edu/assets/resources/SimpleMicrobit.aix)。APP Invertor安装该扩展后可以在手机连接后与Micro:bit板上的按钮、引脚、LED等设备交互。

本例中我们仅需要实现两个设备的蓝牙连接,无需用手机与Micro:bit板做更多交互,因此只有需要测试有交互功能的源代码MicrobitLED.aia时才需要安装。

3、 组件设计

我们需要APP有搜索、连接、断开等按钮,有显示周围蓝牙设备的列表,有显示当前状态的文字。实现选择搜索到的Micro:bit设备后点连接可以通过蓝牙实现连接,点断开可以断开蓝牙(如图1)。

1. 登陆APP.gzjkw.net,新建项目lanya,在APP Invertor组件面板的最后一项Extension——扩展中导入下载的项目扩展文件edu.mit.APPinventor.ble-20190701.aix,也可直接填入网址安装扩展包。

2. 将BluetoothLE拖入工作面板。

3. 界面布局→水平布局,水平对齐→居中,宽度→充满;从用户界面拖入3个按钮,组件列表中改名为"扫描、连接、断开",并修改按钮文本为相应名称。

4. 用户界面→标签,修改标签名和标签文本为"状态"。用于显示当前蓝牙状态。

5. 用户界面→列表显示框,改名为"蓝牙列表"。用于显示和选择搜索到的蓝牙设备列表。

4、 扫描按钮逻辑设计

我们希望APP可以扫描可用的蓝牙设备。当点击扫描按钮,调用蓝牙组件开始扫描,并更改状态标签,显示列表。

1. 切换至逻辑设计界面。

2. 组合模块。扫描按钮→当扫描被点击执行。

3. BluetoothLE1→调用BluetoothLE1.StartScanning。组合积木:状态→设置状态.文本为和文本→文本中填入"状态:扫描"。

4. 组合积木:蓝牙列表→设置蓝牙列表.可见性为和逻辑→真。设计这个可见性逻辑判断是为了连接成功后可以隐藏列表,因为如果附近有很多蓝牙设备,列表会很长(如图2)。

5、 蓝牙列表逻辑设计

我们需要在列表中列出周围所有可用的蓝牙设备。

1. 组合模块。BluetoothLE1→BluetoothLE1.DeviceFound,当扫描到可用蓝牙设备时。

2. 组合积木:蓝牙列表→设置蓝牙列表.元素字串为和BluetoothLE1→BluetoothLE1.DeviceList(如图3)。

6、 连接按钮逻辑设计

我们希望实现在列表中选中设备名称后,点击"连接"按钮后通过蓝牙连接Micro:bit。

1. 组合模块。连接按钮→当"连接"被点击。

2. 调用BluetoothLE1→BluetoothLE1.StopScanning,停止扫描设备。

3. 组合积木:调用BluetoothLE1→BluetoothLE1.连接,蓝牙列表→选中项索引。通过蓝牙连接选中的设备。

4. 设置状态.文本为"状态:连接中"。在手机中标明当前连接状态(如图4)。

7、 表示成功连接

当成功连接设备时,我们希望通过状态文本获知连接已经成功,并关闭蓝牙设备列表。

1. 组合模块。BluetoothLE1→当BluetoothLE1.Connected。

2. 设置状态.文本为"状态:已连接"。

3. 设置蓝牙列表可见性为"假",关闭蓝牙设备列表(如图5)。

8、 断开按钮逻辑设计

点击断开按钮后,我们希望手机断开设备连接,并通过显示当前状态确认断开按钮有效。

1. 组合模块。断开按钮→当"断开"被点击。

2. BluetoothLE1→调用BluetoothLE1.断开连接。

3. 组合模块。BluetoothLE1→BluetoothLE1.Disconnected。

4. 设置状态文本为"状态:已断开"(如图6)。

9、 出错时逻辑设计

程序运行中可能会遇到各种错误,如果程序没有闪退的情况下我们希望能知道报错信息。

1. 组合模块。Screen1→当"Screen1"出现错误。

2. 设置状态文本为,文本→合并字符串,连接文本"错误:"和出现错误模块本身的"消息"→"取消息"(如图7)。

10、 给Micro:bit编程

手机中的程序还需要Micro:bit中的程序配合。当蓝牙连接和断开时在LED屏幕上显示图像作为连接成功的标示。

1. 在https://makecode.microbit.org/中编写程序。新建项目。

2. 设置Micro:bit蓝牙连接方式为免配对连接,这样任何设备都可以连接Micro:bit板且无需输入密码,这样可以节约调试时间,而且APP中我们也没有写配对相关的语句。

点击右上角齿轮图标→项目设定→打开No Pairing Required: Anyone can connect via Bluetooth选项。

3. 添加蓝牙扩展。

4. 编程当蓝牙连接时和断开时显示不同图标(如图8)。

11、 连接调试

现在,在APP Invertor中将程序打包Apk,手机扫二维码下载安装,给APP启动蓝牙授权。将Micro:bit程序刷入Micro:bit板中。

手机打开APP,点击扫描,看蓝牙列表是否正常。在蓝牙列表中选择Micro:bit,点击连接按钮。开始Micro:bit与手机蓝牙连接。通过手机上状态显示和Micro:bit的LED显示图标判断连接是否成功。

根据我的试验,程序可能出现连接易断开或在部分手机上出现闪退等问题。这可能是因为Micro:bit本身运算处理能力不足造成蓝牙断开,或是APP Invertor扩展对一些型号的手机兼容性不好导致闪退。你可以更换其他品牌手机,或者根据iot.APPinventor.mit.edu对扩展包的详细说明来优化程序。

如果进过努力连接成功后你还有兴趣,可以继续添加拓展功能,比如点击按钮发送文本或预设的图标到设备中显示等。

扫描本版二维码后你可以下载到实现基础连接的源代码lanya.aia和有交互的源代码MicrobitLED.aia。

本版源代码下载

链接:https://pan.baidu.com/s/1_Wm3Dz4PaDuW2dVEJkT-EA

提取码:23iw




分享到: