我爱编程

MWC通讯协议(MultiWii Serial Protocol

2018-02-13  本文已影响0人  沧海一声笑的DIY宇宙

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

上一篇 下一篇

猜你喜欢

热点阅读