查看: 2476|回复: 1

Micro:Bit手柄试用之一MagicPad (解决蓝牙与gamePad包共存)

[复制链接]
  • TA的每日心情
    无聊
    2019-1-9 09:43
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2018-11-20 14:16:56 | 显示全部楼层 |阅读模式
    分享到:
    1、MagicPad设想

    这次拿到micro:bit gamepad 遥控手柄 ,把玩了一下,发现很多神奇的功能,查阅了大量资料文档,算是管中窥豹,后续会分享给大家。这次做一个小项目,涉及到部分知识。目前想做的是:mb作为蓝牙遥控器,控制手机拍照(自拍)、查找手机、自动切歌、丢失报警(GamePad震动)等等。

    2、硬件解析

    这里用到的硬件如下:

    • micro:bit 编程入门开发板
    • micro:bit gamepad 遥控手柄
    • MicroUSB数据线(烧录、临时供电)
    • Android SmartPhone


    micro:bit会在另一篇文章里进行介绍,其具有加速度与电子罗盘、温度及亮度传感器。这里主要说说DFRobot出品的GamePad拓展板。

    2.1 GamePad 4 MicroBit by DFRobot

    1.jpg

    板载资源包括:

    8个可编程按键,1个振动电机,一个蜂鸣器,一个LED 。


    相关资料可以在[url=http://wiki.dfrobot.com.cn/index.php?title=(SKUFR0536)_micro:bit%E6%B8%B8%E6%88%8F%E6%89%8B%E6%9F%84%E6%89%A9%E5%B1%95%E6%9D%BF]产品维库[/url]上找到,文档上提供了诸多示例,把玩了一下,非常有趣。然而由于产品并不是开源硬件,没有提供相关硬件引脚信息,只有封装好的MakeCode操作库,经过一番思索查找,在官方产品github页面找到引脚定义。

    2.2 寻找 GamePad 引脚定义
    2.png

    从面板上可以看到标记了部分引脚如P0、P12、P16等,另外A、B就是复用microbit板上的A、B按钮。

    打开main.ts文件,第20行看到如下代码:

    3.png

    1. <blockquote>   enum GamerBitPin {
    复制代码
    至此,我们结合相关,可知对应引脚信息如下:
    4.1.png
    参考mb引脚定义:
    4.png
    P0/P1/P2又叫TouchPin,就是那三个大的引脚,其中音乐通常从P0输出。

    2.3 测试一下

    我们不借助DFRobot提供的MakeCode软件包,直接使用相关引脚看看:

    https://makecode.microbit.org/_Cxpdt5MEVE8f

    5.png
    【直接操作引脚模式】注意初始化引脚方向,否则会乱跑。TouchPi和BtnA/B好像会初始化执行这一操作。但是程序会跑飞,需要进一步测试完善。
    6.png
    【DFRobot软件包操作模式】简洁很多,而且程序稳定。

    3、软件部分

    mb有诸多开发语言及开发环境可供选择,这里我们以MakeCode为例。

    3.1 microbit Client —— MakeCode

    MakeCode由微软开发,基于PXT (Programming eXperience Toolkit ),这种Visual Blocks开发最早在Scratch上看到,后来用过Webduino Blockly在线编辑器,彼时个人对它评价颇低。

    7.png

    这次拿到mb本来是奔着microPython去的,其间测试的时候用了一下MakeCode,甚是喜欢,支持自定义函数,提供丰富的文档和拓展支持,下限上限都非常高,既适合小孩子入门,面对更复杂的需求也能完成。

    由于我们的设想是mb通过蓝牙控制手机,所以需要使用Bluetooth软件包,但是添加DFRobot官方的gamePad包时会提示冲突。

    8.png
    这优点类似radio与bluetooth包的冲突,那么如何解决呢?想到两个思路:

    • 加法:既然知道了引脚定义,我们不用gamePad包,直接操作相关引脚
    • 减法:使用官方提供的更为完善的gamePad包,进行移植修改及删减,由于软件包较小,这也未尝不可



    3.1.1 加法

    在直接操作Pin的示例中,D-Pad多按几次程序就跑飞了,如图所示显示乱码,mb无响应。回过头来,看到on pin Px pressed模块比较稳定,但是仅限于3个TouchPin,有没有类似的手写模块呢?我们找到了在控制组件里找到on event模块,拖拽右击选择help,可以看到相关帮助手册。

    9.png
    看了相关的1/2/3/4/5,表示还没看懂,这里按下不表,后面搞懂再来。

    3.1.2 减法

    思路就是剥离gamePad包里面与蓝牙功能冲突的部分,只保留需要的功能,这就需要阅读gamePad源码进行修改移植,本以为很难,不想十分简单。

    参考如下:



    阅读MakeCode关于Creating Packages相关的手册内容,我们了解到了pxt.json文件,打开github上gamePad包的主页,果不其然:


    1. <blockquote>{
    复制代码


    第8行"radio": "*"提示该软件包依赖radio包,但是radio与bluetooth冲突,因此解决方法显而易见,我们fork一份gamePad包到自己的github账户下,修改pxt.json文件,删除radio包依赖,其实gamePad并不需要无线电功能才能运行,希望Lee可以改动一下。这里我改好的包地址为:
    https://github.com/sjqlwy/pxt-gamePad

    添加我的软件包地址即可以同时使用GamePad与蓝牙功能了。
    10.png

    至此我们解决了开发环境的冲突问题。

    3.2 Android Server —— micro:bit APP

    手机上需要安装一个服务软件,用来连接mb,并响应mb的指令。一种方式是使用可视化的MIT APP Invetor自己写程序,我们这里使用现成的micro:bitAPP即可,google play下载地址,无法访问的请下载附件。

    11.png
    4、开始动手!

    目前实现的功能包括:

    • 蓝牙控制
    • 照片视频拍摄控制(切换前后摄像头)
    • 音乐播放控制(音量+/-,切换歌曲)
    • Find My Phone
    • 手机丢失告警


    代码如下
    https://makecode.microbit.org/_5aY3heCgtLud

    12.png

    这里我们借助Devices包中的相关block,如果你默认使用的是Radio包,则需要手动添加并替换radio。

    部分说明:

    • D-Pad控制音量加减和歌曲前后切歌,需要事先打开音乐播放器,如网易云音乐。
    • 按A键开启前置摄像头5s后自拍,摇晃mb切换前后摄像头
    • 按Y键,只要手机在蓝牙范围内,则会相应,这样就不怕手机丢在角落找不到了
    • 当手机-mb之间距离发生变化时(读取RSSI值Received signal strength indication),进行判断,返回0-4的数值,0=no signal,4=full signal


    下载烧录此程式到mb后,在Android手机上你需要执行以下步骤:

    • 把MakeCode生成的hex文件拷贝到microbit磁盘内
    • 在安卓手机上,如果micro:bit已经在已配对设备里,则选择取消保存。每次更新hex文件都要取消配对并重新配对,否则蓝牙通讯会失败。
    • 在手机上运行Samsung micro:bit程序,选择Connect并与micro:bit进行配对。
    • 按照图示操作让mb进入蓝牙配对模式:同时按住A和B键,短按Reset键,此时可以看到显示“PARING MODE”,松开A和B键。
    • 回到手机端,输入密钥即可完成配对。
    • reset键重置mb使其进入我们烧入的程序,初始化成功会显示一个笑脸。
    • 手机端选择mb进行连接,成功后mb会显示"C"(Connected),断开会显示"D"(Disconnect)。
    • 使用相关按键就可以实现功能了,快去试一试


    5、后记

    • 官方也提供了iOS的程序,但是本人没条件测试
    • 测试过程使用microUSB供电,会出现不稳定情况
    • 目前我们实现了mb远程控制手机的功能,了解了基础的蓝牙操作,下一步尝试安卓蓝牙串口发送自定义程序;APP Inventor手写程序;mb与Linux 蓝牙串口通讯
    • 看到论坛里遥控小车用的mb作为主控,两块mb进行通讯更方便些,后面会尝试手写BeagleBone Blue|RPi的Linux蓝牙服务端与mb连接接收控制,暂时还没看到有人做



    本文作者 思兼,转载自cnblogs

    回复

    使用道具 举报

  • TA的每日心情
    难过
    2021-2-27 22:16
  • 签到天数: 1568 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2019-1-17 13:42:20 | 显示全部楼层
    这种技术性很强啊
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 02:04 , Processed in 0.142361 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.