白二娃
我们已经用Micro:bit做过不少编程试验,也用APP Invertor编写过手机APP。今天我们将两者结合起来,编写一个APP,让安卓手机和Micro:bit通过蓝牙连接起来。由于实现两个设备连接后进行基础交互的代码量较多,篇幅所限我们仅实现两设备通过蓝牙扫描和连接。后续实现交互的代码您可以在扫码下载源代码后自行分析学习。
1. 安卓手机
2. Micro:bit板及数据线
3. APP Inventor编程平台app.gzjkw.net或ai2.17coding.net
4. 扩展下载网站iot.appinventor.mit.edu
5. Micro:bit编程平台makecode.microbit.org
为了更好兼容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/resourc
es/edu.mit.appinventor.ble-201907
01.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时才需要安装。
我们需要APP有搜索、连接、断开等按钮,有显示周围蓝牙设备的列表,有显示当前状态的文字。选择搜索到的Micro:bit设备后点连接可以通过蓝牙实现连接,点断开可以断开蓝牙(如图1)。
1. 登录app.gzjkw.net,新建项目lanya,在APP Invertor組件面板的最后一项Extension——扩展中导入下载的项目扩展文件edu.mit.appinventor.ble-20190701.aix,也可直接填入网址安装扩展包。
2. 将BluetoothLE拖入工作面板。
3. 界面布局→水平布局,水平对齐→居中,宽度→充满;从用户界面拖入3个按钮,组件列表中改名为“扫描、连接、断开”,并修改按钮文本为相应名称。
4. 用户界面→标签,修改标签名和标签文本为“状态”,用于显示当前蓝牙状态。
5. 用户界面→列表显示框,改名为“蓝牙列表”,用于显示和选择搜索到的蓝牙设备列表。
我们希望APP可以扫描可用的蓝牙设备。当点击扫描按钮,调用蓝牙组件开始扫描,并更改状态标签,显示列表。
1. 切换至逻辑设计界面。
2. 组合模块。扫描按钮→当扫描被点击执行。
3. BluetoothLE1→调用BluetoothLE1.StartScanning。组合积木:状态→设置状态.文本为和文本→文本中填入“状态:扫描”。
4. 组合积木:蓝牙列表→设置蓝牙列表.可见性为和逻辑→真。设计这个可见性逻辑判断是为了连接成功后可以隐藏列表,因为如果附近有很多蓝牙设备,列表会很长(如图2)。
我们需要在列表中列出周围所有可用的蓝牙设备。
1. 组合模块。BluetoothLE1→BluetoothLE1.DeviceFound,当扫描到可用蓝牙设备时。
2. 组合积木:蓝牙列表→设置蓝牙列表.元素字串为和BluetoothLE1→BluetoothLE1.DeviceList(如图3)。
我们希望实现在列表中选中设备名称后,点击“连接”按钮后通过蓝牙连接Micro:bit。
1. 组合模块。连接按钮→当“连接”被点击。
2. 调用BluetoothLE1→Bluetoo
thLE1.StopScanning,停止扫描设备。
3. 组合积木:调用BluetoothLE1
→BluetoothLE1.连接,蓝牙列表→选中项索引。通过蓝牙连接选中的设备。
4. 设置状态.文本为“状态:连接中”。在手机中标明当前连接状态(如图4)。
当成功连接设备时,我们希望通过状态文本获知连接已经成功,并关闭蓝牙设备列表。
1. 组合模块。BluetoothLE1→当BluetoothLE1.Connected。
2. 设置状态.文本为“状态:已连接”。
3. 设置蓝牙列表可见性为“假”,关闭蓝牙设备列表(如图5)。
点击断开按钮后,我们希望手机断开设备连接,并通过显示当前状态确认断开按钮有效。
1. 组合模块。断开按钮→当“断开”被点击。
2. BluetoothLE1→调用Bluetoot
hLE1.断开连接。
3. 组合模块。BluetoothLE1→BluetoothLE1.Disconnected。
4. 设置状态文本为“状态:已断开”(如图6)。
程序运行中可能会遇到各种错误,如果程序没有闪退的情况下我们希望能知道报错信息。
1. 组合模块。Screen1→当“Screen1”出现错误。
2. 设置状态文本为和文本→合并字符串,连接文本“错误:”和出现错误模块本身的“消息”→“取消息”(如图7)。
手机中的程序还需要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)。
现在,在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。