富斯I6X搭配A8S的配对方法和IBUS协议解析

做毕设的时候涉及到需要进行简单的遥控操作去检测机器人的运行状态,简单写个笔记

富斯官网:FlyskyRC

先附上富斯的IBUS协议:

对于I6X来说,可以选择6-10通道的数据输出,摇杆对应频道1-4,5-6,7-10可以选择是旋钮还是拨杆,具体界面下图

在正式编写代码之前,让我们先对遥控器和接收机进行一下设置:

1.进行配对

首先要对FS-A8S进行供电,VCC说明书上是4-8V,(实测用MCU的3.3V好像也行)

然后在VCC接通前(注意一定是接通前)按住Bind按钮,直到接收机变为快闪

随后我们按住I6X的Bind按钮,同时打开power,这时需要将油门杆打到最小,所有拨杆向上,显示对码中后,发现接收机的LED变为慢闪,就对码完成,此时遥控器关机或者选择cancel都是可以的,关机后可以看到接收机慢闪,开机后变为常亮就成功了。

2.频道配置

那么如何让遥控器发出10个频道的数据呢?

开机后按住ok键3秒,进入设置。首先在系统-辅助开关设置中,打开所有辅助开关,通道数设为10,然后长按3秒cancel保存(这里很重要)

然后在功能-辅助通道选择开关,旋钮所绑定的通道,同样长按保存

3.观测输出

我们将接收机连接到串口芯片,接在PC上,用串口助手查看下输出信息

20 40 E1 05 C5 07 DF 05 EC 03 E7 05 EC 05 E8 03 E8 03 E8 03 E8 03 DC 05 DC 05 DC 05 B2 07 35 F3

一共有32位数据,共可以解析出18个通道的信息,但是此时只有10个通道是有数据的

05DC是1500,默认是中值,也就是无输出

chVal[ 0] = buf[ 0] | (((uint16_t)buf[ 1]&0X0F)<<8);
chVal[ 1] = buf[ 2] | (((uint16_t)buf[ 3]&0X0F)<<8);
chVal[ 2] = buf[ 4] | (((uint16_t)buf[ 5]&0X0F)<<8);
chVal[ 3] = buf[ 6] | (((uint16_t)buf[ 7]&0X0F)<<8);
chVal[ 4] = buf[ 8] | (((uint16_t)buf[ 9]&0X0F)<<8);
chVal[ 5] = buf[10] | (((uint16_t)buf[11]&0X0F)<<8);
chVal[ 6] = buf[12] | (((uint16_t)buf[13]&0X0F)<<8);
chVal[ 7] = buf[14] | (((uint16_t)buf[15]&0X0F)<<8);
chVal[ 8] = buf[16] | (((uint16_t)buf[17]&0X0F)<<8);
chVal[ 9] = buf[18] | (((uint16_t)buf[19]&0X0F)<<8);
chVal[10] = buf[20] | (((uint16_t)buf[21]&0X0F)<<8);
chVal[11] = buf[22] | (((uint16_t)buf[23]&0X0F)<<8);
chVal[12] = buf[24] | (((uint16_t)buf[25]&0X0F)<<8);
chVal[13] = buf[26] | (((uint16_t)buf[27]&0X0F)<<8);
chVal[14] = (buf[ 1]>>4)|(buf[ 3]&0XF0)|(((uint16_t)buf[ 5]&0XF0)<<4);
chVal[15] = (buf[ 7]>>4)|(buf[ 9]&0XF0)|(((uint16_t)buf[11]&0XF0)<<4);
chVal[16] = (buf[13]>>4)|(buf[15]&0XF0)|(((uint16_t)buf[17]&0XF0)<<4);
chVal[17] = (buf[19]>>4)|(buf[21]&0XF0)|(((uint16_t)buf[23]&0XF0)<<4);
参考推荐

解析协议的源码就不放了,可以参考下这位大佬的帖子:

【精选】使用stm32解析富斯i6接收机(IBUS)_富斯ibus_桃成蹊2.0的博客-CSDN博客

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 安装依赖库 在使用Python解析ibus协议之前,需要安装依赖库,包括can-utils和python-can。 可以使用以下命令安装: ``` sudo apt-get install can-utils pip install python-can ``` 2. 配置CAN接口 在Linux系统下,可以使用SocketCAN实现CAN接口的配置。 首先需要加载can驱动和can-raw驱动,可以使用以下命令: ``` sudo modprobe can sudo modprobe can-raw ``` 然后在启动CAN接口之前,需要将CAN设备设置为CAN_RAW模式,可以使用以下命令: ``` sudo ip link set can0 type can bitrate 500000 sudo ip link set can0 up sudo ifconfig can0 txqueuelen 1000 ``` 其中,can0是CAN设备的名称,bitrate为波特率。txqueuelen的值根据具体情况进行设置,一般为1000。 3. 解析ibus协议 在Python中,可以使用python-can库解析ibus协议。 首先需要创建一个CAN总线对象,可以使用以下代码: ```python import can bus = can.interface.Bus(channel='can0', bustype='socketcan_native') ``` 其中,channel为CAN设备名称,bustype为CAN总线类型。 然后可以使用以下代码接收CAN数据: ```python msg = bus.recv() ``` 接收到的数据为CAN帧,可以使用以下代码获取数据: ```python data = msg.data ``` ibus协议的数据格式为: ``` [Length] [Destination] [Source] [Message ID] [Data 1] [Data 2] ... [Data n] ``` 其中,Length为数据长度,Destination为目标地址,Source为源地址,Message ID为消息ID,Data为数据。 可以使用以下代码解析数据: ```python length = data[0] destination = data[1] source = data[2] message_id = (data[3] << 8) | data[4] ibus_data = data[5:length+1] ``` 其中,ibus_data为ibus协议的数据部分。 4. 示例代码 以下是一个简单的示例代码,用于解析ibus协议: ```python import can bus = can.interface.Bus(channel='can0', bustype='socketcan_native') while True: msg = bus.recv() data = msg.data length = data[0] destination = data[1] source = data[2] message_id = (data[3] << 8) | data[4] ibus_data = data[5:length+1] print('Destination:', destination) print('Source:', source) print('Message ID:', message_id) print('Data:', ibus_data) ``` 运行代码后,可以接收到ibus协议的数据,并打印出相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值