查看: 8626|回复: 12

通信协议-1.0

[复制链接]
  • TA的每日心情
    郁闷
    2013-6-24 20:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2013-6-3 21:48:35 | 显示全部楼层 |阅读模式
    分享到:
    通信以包为单位,传输介质有三种:nRF24L01+、串口和TCP。
    如无特别说明,字节顺序为小端顺序。

    nRF24L01+的包格式为:
        1.协议版本:uint8_t
        2.包类型:uint8_t
        3.包内容:uint8_t[]
        4.CRC-16-CCITT校验:uint16_t,计算范围为1~3,大端字节顺序。

    串口和TCP的包格式为:
        1.包前导符:uint8_t[2] = {0x55,0xAA}
        2.包长度:uint8_t,等于3~6的字节数。
        3.协议版本:uint8_t
        4.包类型:uint8_t
        5.包内容:uint8_t[]
        6.CRC-16-CCITT校验:uint16_t,计算范围为3~5,大端字节顺序。

    协议版本
    0x00 => 调试版。

    包类型和包内容
    0x01 => 返回姿态四元数,包内容={wxyz:float[4]}。
    0x04 => 返回位置,包内容={xyz:float[3]}。
    0x06 => 获取四元数姿态,包内容空。
    0x09 => 获取位置,包内容空。
    0x14 => 获取xyz向量,包内容={type:uint8_t}。
            type=0x01,加速度计原始值
            type=0x02,加速度计校正值
            type=0x03,陀螺仪原始值
            type=0x04,陀螺仪校正值
            type=0x05,罗盘原始值
            type=0x06,罗盘校正值
    0x15 => 返回xyz向量,包内容={type:uint8_t,xyz:float[3]}。
            type为向量类型,取值同0x14包;
    0x16 => 返回示波器值,包内容={channel:uint8_t,value:float[]}。
            value[i]的通道号为channel+i。
    0x18 => 获取状态。包内容={which:uint8_t[]}。
            which[i]=0x01,电池电压。
            which[i]=0x02,当前电机油门值。
    0x19 => 返回状态。包内容={which:uint8_t,value}
            which[i]=0x01,电池电压,value={voltage:float}。
            which[i]=0x02,当前电机油门值,value={throttle:float[4]}。
    0x1A => 返回消息。包内容={msg:char[]},UTF-8编码,不带结束符'\0'。
    0x1B => Bootloader命令,包内容={cmd:uint8_t,param}。
            cmd=0x01,进入Bootloader模式,param空。
            cmd=0x02,开始刷app,param空。
            cmd=0x03,设置app长度和crc,param={len:uint32_t,crc:uint32_t}。
            cmd=0x04,写app,param={blockIndex:uint16_t,data:uint32_t[]}。
            cmd=0x05,查询有哪些未写的块,param空。
            cmd=0x06,进入app。
    0x1C => Bootloader状态。包内容={status:uint8_t,param}。
            status=0x01,Bootloader等待命令状态,param空。
            status=0x02,准备好刷app,param空。
            status=0x03,正在写app,param={bytesWrittenAmount:uint32_t}。
            status=0x04,返回有哪些未写的块,param={{index:uint16_t,length:uint16_t}[]}。
            status=0x05,写入完成,但crc检验失败,param空。
            status=0x06,刷app成功,param空。
            status=0x07,已经进入app。
    0x1D => 操作参数模块。包内容={code:uint8_t,param}。
            code=0x11,读RAM,param={pos:uint8_t,len:uint8_t}。
            code=0x12,返回RAM的值,param={pos:uint8_t,value:float[]}。
            code=0x13,写入RAM,param={pos:uint8_t,value:float[]}。
            code=0x21,读Flash,param={pos:uint8_t,len:uint8_t}。
            code=0x22,返回Flash的值,param={pos:uint8_t,value:float[]}。
            code=0x23,写入Flash,param空。
            code=0x25,重置Flash里的参数为默认值,param空。
    0x1E => 锁定姿态模式控制,param={code:uint8_t,param}
            code=0x01,起飞前准备,param空。包括航偏角校正等。
            code=0x02,已准备好起飞,param空。
            code=0x03,未准备好起飞,param空。
            code=0x04,设定控制参数,param={t:float,wxyz:float[4]},
                       t为基础油门,wxyz为控制四元数。


    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-2-20 10:23
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-6-4 09:57:20 | 显示全部楼层
    沙发                              
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-7-4 23:49
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-6-4 23:47:15 | 显示全部楼层
    顶!非常好的通讯方式。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2014-11-15 21:16
  • 签到天数: 179 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-6-6 14:35:15 | 显示全部楼层
    牛逼。..... 持续关注中。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-6-6 23:19:51 | 显示全部楼层
    请教一下, 买的玩具飞碟遥控器能否监听到其对码和按键内容, 然后自己编程到手机上遥控?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-10-28 10:11
  • 签到天数: 1703 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2013-6-7 08:40:34 | 显示全部楼层
    steeven 发表于 2013-6-6 23:19
    请教一下, 买的玩具飞碟遥控器能否监听到其对码和按键内容, 然后自己编程到手机上遥控? ...

    如果卖的时候没说可以用手机遥控一般就不行了
    玩具上一般都会贴着用的哪个频段
    估计不在手机支持的范围内
    先看看吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-6-7 20:06:28 | 显示全部楼层
    nemon 发表于 2013-6-7 08:40
    如果卖的时候没说可以用手机遥控一般就不行了
    玩具上一般都会贴着用的哪个频段
    估计不在手机支持的范围内 ...

    我在淘宝上买的优迪u816a, 遥控频率2.4G, 想试试用手机的重力感应控制飞碟,就像玩平衡球游戏一样。
    听说有手机到2.4G的发射器,专用软件通过耳机插口输出编码,然后用发射器发射。

    这几天查了一下2.4G遥控原理,貌似不同模块把协议都封装了,外面只要输入数据,所以我在想如果都是遵循遥控标准,应该可以diy一个模块跟它握手,收到相关信息,把频率之类的协商好,然后监听不同按键的编码就可以。

    如果不是标准,是不是可以拆开遥控模型或者遥控器看看用什么芯片, 找个芯片来对口接收。
    或者用示波器看看射频模块的波形?

    最差就是用个天线在旁边接收,然后用示波器显示波形。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-10-28 10:11
  • 签到天数: 1703 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2013-6-8 08:53:53 | 显示全部楼层
    steeven 发表于 2013-6-7 20:06
    我在淘宝上买的优迪u816a, 遥控频率2.4G, 想试试用手机的重力感应控制飞碟,就像玩平衡球游戏一样。
    听说 ...

    好主意啊!把过程发出来让大家围观一下吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-6-8 12:31:48 | 显示全部楼层
    还在设想呢。。。。没玩过这东西。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2013-6-24 20:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2013-6-8 19:07:20 | 显示全部楼层
    steeven 发表于 2013-6-6 23:19
    请教一下, 买的玩具飞碟遥控器能否监听到其对码和按键内容, 然后自己编程到手机上遥控? ...

    成品估计不行。我们这个小四轴支持蓝牙,可以用手机控制。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-24 04:11 , Processed in 0.195862 second(s), 31 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.