第八章 蓝牙控制 :Chapter 8 of KitiBot for Micro:bit

第八章 蓝牙控制

micro:bit 的主控芯片是nRF51822芯片,这个是Nordic的低功耗蓝牙芯片。所以micro:bit是支持蓝牙功能的,利用mciro:bit的蓝牙功能,通过手机遥控小车就非常简单了。

第一节

要手机和micro:bit通信手机必须要安装app.(仅支持安卓系统)

手机安装完成后,还需要在makecode中添加蓝牙软件包


在高级->添加软件包总添加bluetooth .软件会提示蓝牙软件包会与radio,neopixel等软件包不兼容,不能同时添加,删除不兼容的软件包并添加bluetooth软件包,添加完成后在积框中会找到蓝牙类积木,里面有很多可以调用的服务和蓝牙操作积木。

下来我们写micro:bit 的第一个蓝牙程序。


开机时开启蓝牙加速计服务,蓝牙按钮服务,蓝牙led服务,蓝牙温度服务。 当有设备连接上蓝牙时显示字"C",断开蓝牙连接时显示字符“D"。 这样我们的程序就写好了,将程序下载到micro:bit上。 现在就可以用手机链接micro:bit 通过上面这些服务控制micro:bit了。

同时按住A,B键不松手,然后按一下复位按键。LED点阵屏会显示"PAIRING MODE!"字符串进入配对模式,然后micro:bit会显示一个配对图案。


在手机设置蓝牙中,搜索蓝牙设备。找到BBC micro:bit并链接。 (注意:括号中的字符每个micro:bit都不一样的)


手机会显示配对的设备。 (注意:micro:bit每次重启后都需要再次配对,每次配对都需要将手机中已配对的配备中micro;bit设备删除。)


配对完成后,LED点阵屏会显示"√"图案,表示已经配对完成。 打开之前已经安装好的APP.选择“FIND PAIRED BBC MICRO:BIT(S)”查找已经配对的micro:bit。


这里需注意,列表显示的是BBC micro:bit (BONDED)才能点击连接,如果 显示的是BBC micro:bit[tozug]则不能链接,否则会连接不成功。需要等待micro:bit显示的“√”图标消失后再次搜索。


点击BBC micro:bit (BONDED) 连接成功后会显示下图。显示很多的控制图标。micro:bit LED点阵屏会显示字符“C”,表示已经连接成功了。


下面我们就可以通过APP来控制mic:bit了。打开Accelerometer会显示如下,转动micro:bit 手机中的micro:bit图案也会作相应的转动。


打开Buttons会显示如下,按下micro:bit的A,B键对应的图标会显示绿色,同时显示Pressed。长按A,B键则按键会变红,同时显示 Long Pressed.


打开LEDs会显示如下,编辑LED点阵,然后点击SET DISPLAY则micro:bit点阵屏则会显示设置的图案,点击SEND TEXT则点阵屏会显示设置的字符串。


打开Temperature会显示当前micro:bit的温度


打开Device Information会显示当前micro:bit的设备信息。


注意,刚才micro:bit程序只是开启部分的服务,所以不是手机APP中所以图标都可以控制,会有部分服务会不能用。

第二节

前面一节我们已经尝试了通过手机APP控制micro:bit,但是有些小伙伴会发觉手机和micro;bit 连接会有点麻烦,有没有简单一点的方法呢。当然是有的。

打开刚才的程序,我们需要重新设置一下工程。


点击设置图标选project settiongs。选择No Pairing Required:Anyone can connect via Bluetooth。表示连接之前不需要配对,


重新下载程序到micro:bit中。同时APP也设置设置一下。打开APP,点击右上角的三个点选择settings进入设置。


将Filter unpaired micro:bit from scan results? 选框去掉,不勾选。否则扫描列表会过滤掉没有配对的设备,导致扫描不到micr:bit。


设置好后重新搜索micro:bit 设备,显示的是BBC micro:bit[tozug],点击连接即可。


注意:如果手机设置中没有将之前已经配对的过的micro:bit设备清除,则设备列表显示是BBC micro:bit[tozug](BONDED),需要将已配对的设备清除再重新搜索。


第三节

前面我们已经知道如果使用蓝牙控制micro:bit 了,下面我们来学习一下如果通过蓝牙遥控机器人。可能细心的小伙伴已经发行APP中有一个类似游戏手柄的图标,我们就是通过这个来控制机器人的。


如果连接上micro:bit 点击进去就显示下面这样。有八个按键,已经足够我们遥控机器人了。


点击右上角的三个点进入设置可以看到下面的设置页面。当按键状态发生变化时手机会发送信号给micro:bit,micro:bit会触发Gamepad事件,事件的值就代表不同的按键事件。


我们还是保持默认的设置,不需修改,下面我们来写micro:bit的程序。

和之前的一样 ,当有设备连接上蓝牙时显示字"C",断开蓝牙连接时显示字符“D"。

刚才我们已经知道,当手机按下按键时,micro:bit会触发Gampad事件。所以在程序中我们添加一个事件处理,

事件来源是MES_DPAD_CONTROLLER_ID。

事件的值是MICROBIT_EVT_ANY,不同的键值对应不同的按键操作。然后我们通过判断键值来控制机器人做出不同的动作,就可以通过手机蓝牙控制机器人了。


将程序下载micro:bit,然后连接蓝牙,通过Dual D-Pad Controller 左边的摇杆图标就可以控制机器人前进,后退,左转和右转了。按键按下时机器人运动,松开按键时小车停止。

可以根据实际情况增大前进和后退速度,减小左转和右转速度以获得更好的控制体验。

第四节

前面一节我们已经可以遥控运动了,这个节我们再前面一节的基础上添加舵机控制,让小车可以遥控左右摇头。


结合上一章舵机遥控的知识,添加两个按键控制机器人头部左转和右转。

设置step变量表示转动角度,5表示右转5度,-5表示左转5度。0表示停止转动。

开机启动时,设置舵机为90度,机器人静止状态。当step不为0时,表示有按键按下,改变舵机角度pos并转动到对应的位置。注意舵机角度范围是0~180度,所以要加上程序控制pos的值在0~180度范围内。

第五节

这一节我们在前面一节的基础上添加上RGB LED控制,可以实现流水灯的效果。



和上一节类似,我们用一个变量temp来表示颜色变动,5表示色相增加5,色彩左移,-5表示色相减速-5,色彩右移。0表示色彩停止变动


开机设置hue为180并显示,Hue表示色相,范围为0~360。不同的色相,RGB LED显示不同的颜色


当temp不为0表示按键已经按下,改变色相hue的值并显示出来。

注意:色相hue的范围为0~360,当hue小于0时加上360,当hue超过360时减去360

这样使hue保持在0~360范围内循环。