美文网首页我爱编程
MWC通讯协议(MultiWii Serial Protocol

MWC通讯协议(MultiWii Serial Protocol

作者: 沧海一声笑的DIY宇宙 | 来源:发表于2018-02-13 15:37 被阅读0次

    MWC是一个开源的多旋翼飞控,常用来制作四轴飞行器。为了能DIY一个用安卓手机控制的微型四轴,我决定自己写一个安卓客户端遥控器。其实因为EZ-GUI在我的手机上一直出错,导致蓝牙连接失败,完全不能用。而我又不想买遥控器接收机。

    国际惯例,先上图:

    连接

    右边是Arduino Mini Pro,上面焊了一个6轴陀螺仪GY_521。比较好的是,在MWC源代码里面,支持这个模块。打开这句话就行了。

    #define GY_521    // Chinese 6DOF withMPU6050, LLC

    上面是那个蓝牙模块,虽然锂电池的电压在4.4v, 但它工作挺正常,完全不用降压。

    必须要用稳压芯片将蓝牙模块稳定在3.3v。

    接了一个空心杯电机,比较要命的是他现在还一直没转,需要我写个蓝牙遥控程序来让他启动。

    把这些乱七八糟的东西焊一起,而不是直接买个飞控板的目的仍然是为了折腾。

    这里是基于MWC的源代码2.2版本。2.3版本用C++全部重写过了,不过还是先弄2.2的吧。

    上传飞控的协议格式:

    开始是三个字符,表示传到飞控

    '$' 'M' '<'

    接下来数据如下:

    1 Byte类型,数据总长度,大小不能超过64。

    1Byte类型,命令ID。比如100,表示从飞控板获取基础信息。全部的命令类型参看源代码

    n 个Byte类型,传送的具体数据,数据总长度描述的就是这部分数据。

    1Byte类型,校验码,从数据总长度开始,每个byte挨个的异或操作的最后结果。

    从飞控接收的数据格式:

    开始三个字符,标识头。

    '$' 'M'

    第三个字符是'!'表示数据有错误,正常情况是'<'

    接下来数据如下:

    1Byte类型,返回值,这个值完全是和发送命令ID对应的,写在代码里面了。

    1Byte类型,返回命令ID,就是请求的命令ID,又发回去了。

    接下来的数据,就要看飞控的具体命令类型返回了哪些数据了。

    最后1Byte仍然是校验位。

    现在已经找到了遥控器的命令id是:

    MSP_RC         105

    在2.3版本是 MSP_SET_RAW_RC

    用这个再加8个Byte的数据能发送油门,操纵杆什么的参数了。

    自制的四轴已经飞起来了。但是回头看自己写的博客,居然这么多错误,忍不住修订一下。虽然这文章写于2年前,刚刚自学电子不久,但是满篇的错误,留着不改过不去。

    2017.4.10

    相关文章

      网友评论

        本文标题:MWC通讯协议(MultiWii Serial Protocol

        本文链接:https://www.haomeiwen.com/subject/ivkzzxtx.html