给BJ40L弄个遥控一键升降玻璃和自动折叠后视镜的功能
之前我发过一个帖子,给爱车做了个安卓APP客户端。硬件控制部分连接汽车OBD接口,只能查看远程点火,控制灯光和查看发动机数据,功能简单,瞎折腾,以前学自动化这玩意儿,总想着捣鼓捣鼓。让爱车AI一些,显得不同凡响。
现如今,随着信息技术飞速发展,汽车领域也越来越智能化,现在所有车厂基本都支持通用的CAN总线通讯协议和并且遵循OBD2标准,网上介绍汽车OBD的技术文章网上也不少,比如通过CAN查询发动机数据,发一条标准帧FBE0,数据02010C的请求数据就可以获取发动机转速。020105就是请求水温数据。都是通用指令。无论什么车,只要有OBD诊断接口,就支持查询。但有许多汽车制造厂私有的功能并不通用。每个品牌都有自己的定义。所以很多OBD汽车故障检测仪检测不同车辆需要在仪器上选择车型款式等等。比如某宝上卖的elm327故障检测仪,几十块钱,但只能看个通用数据。发动机转速、车速、节气门开度等数据。完全没用。我想消除自己车上的气囊警告灯都不行。爱车10月份就6年了,要上线审车了。听说有警告灯审车通不过。麻烦。
现如今,随着信息技术飞速发展,汽车领域也越来越智能化,现在所有车厂基本都支持通用的CAN总线通讯协议和并且遵循OBD2标准,网上介绍汽车OBD的技术文章网上也不少,比如通过CAN查询发动机数据,发一条标准帧FBE0,数据02010C的请求数据就可以获取发动机转速。020105就是请求水温数据。都是通用指令。无论什么车,只要有OBD诊断接口,就支持查询。但有许多汽车制造厂私有的功能并不通用。每个品牌都有自己的定义。所以很多OBD汽车故障检测仪检测不同车辆需要在仪器上选择车型款式等等。比如某宝上卖的elm327故障检测仪,几十块钱,但只能看个通用数据。发动机转速、车速、节气门开度等数据。完全没用。我想消除自己车上的气囊警告灯都不行。爱车10月份就6年了,要上线审车了。听说有警告灯审车通不过。麻烦。

拿自己写的那个APP抓了一些CAN数据包,试验开关车门,折叠或打开后视镜,拆掉主气囊等操作,分析数据,对比前后不一样的地方。最后发现。ECAN(OBD接口引脚3和11)上9660和9400,ac80消息上都有车辆信息。
经过我各种实验,总结出以下指令;
9400 第4字节|0x20开左前门|0x10开右前门|0x08开左后门|0x04开右后门|0x02开尾门
9660 第5字节|0x20左前窗降|0x10左前窗升|0x04右前窗降|0x02右前窗升(升降4个玻璃必须第五字节第七位是1,即第五字节|0x40才可以,)
9660 第6字节|0x80左后窗降|0x40左后窗升|0x10右后窗降|0x08右后窗升
9660 第7字节|0x40,折叠后视镜,|0x80打开后视镜
0110 01001001 0000 第5、6字节64 90 降所有玻璃
0101 00100100 1000 第5、6字节52 48 升所有玻璃
9600的第八字节3C可能是气囊的信息,但没有对照表,也不知道具体信息是什么
9400 第4字节|0x20开左前门|0x10开右前门|0x08开左后门|0x04开右后门|0x02开尾门
9660 第5字节|0x20左前窗降|0x10左前窗升|0x04右前窗降|0x02右前窗升(升降4个玻璃必须第五字节第七位是1,即第五字节|0x40才可以,)
9660 第6字节|0x80左后窗降|0x40左后窗升|0x10右后窗降|0x08右后窗升
9660 第7字节|0x40,折叠后视镜,|0x80打开后视镜
0110 01001001 0000 第5、6字节64 90 降所有玻璃
0101 00100100 1000 第5、6字节52 48 升所有玻璃
9600的第八字节3C可能是气囊的信息,但没有对照表,也不知道具体信息是什么

由于对can数据字节的其他位不确定,为确保不影响车辆其他信息数据,所以写程序时,先获取某标准帧的can数据,只改掉自己试验没有问题的那个位就行。要是有厂家技术白皮书就好了,不过这东西外人不可能有的。就自己这样搞算了,麻烦些而已。要折叠后视镜,先获取9660的数据,用第七字节和0x80做或运算(即第八位赋1)之后,再和0xBF做与运算,保证第七位是0。

9400 第1字节&0x10==0x10表示钥匙插入,0x00,钥匙拔出
当人离车时,一键操作升窗和自动折叠后视镜,是个比较人性化的设计。可惜BJ40L没有这功能。没事,自己写一个。
可以用手机操作,觉得手机麻烦,也可以BJ40L的用遥控器做一键升窗和折叠后视镜操作。遥控器中间按键是临时开启尾门用的,可以用来做遥控车窗的条件判断,
MSG:9400 00 00 00 00 10 00 0D
MSG:9400 00 00 00 00 10 00 05
MSG:9400 00 00 00 00 10 00 0D
MSG:9400 00 00 00 00 10 00 05
MSG:9400 00 00 00 00 10 00 01
这些是遥控器中间那个按键按下后OBD接口得到的数据。可以看出只有第八字节第三位和第四位有变化。据此判断遥控器按下,再利用stm32
的定时器判断长按和点按。区别玻璃升降操作。
判断短按,则发送数据标准帧9600,数据段xx xx xx xx |64 |90 xx xx
长按,则9600,数据段xx xx xx xx |52 |48 xx xx
可以用手机操作,觉得手机麻烦,也可以BJ40L的用遥控器做一键升窗和折叠后视镜操作。遥控器中间按键是临时开启尾门用的,可以用来做遥控车窗的条件判断,
MSG:9400 00 00 00 00 10 00 0D
MSG:9400 00 00 00 00 10 00 05
MSG:9400 00 00 00 00 10 00 0D
MSG:9400 00 00 00 00 10 00 05
MSG:9400 00 00 00 00 10 00 01
这些是遥控器中间那个按键按下后OBD接口得到的数据。可以看出只有第八字节第三位和第四位有变化。据此判断遥控器按下,再利用stm32
的定时器判断长按和点按。区别玻璃升降操作。
判断短按,则发送数据标准帧9600,数据段xx xx xx xx |64 |90 xx xx
长按,则9600,数据段xx xx xx xx |52 |48 xx xx

我用的是stm32f103c8t6,只有一个CAN,好在可以通过端口映射使用两个can,不过没法同时获取汽车ECAN和VCAN数据,只有轮询切换,
STM32F103C8T6的PB8和PB9引脚连接CAN收发器1,收发器1再连接OBD接口ECAN。PA11,PA12连接收发器2,收发器2再连接OBD的6和14针脚。
程序代码要严谨,否则可能仪表盘上会出现发动机报警灯。
如ECAN切换到VCAN后,PB8和PB9最好设置成GPIO_Mode_IN_FLOATING浮空输入模式。
紧接着禁止端口映射:GPIO_PinRemapConfig(GPIO_Remap1_CAN1,DISABLE);
VCAN切换到ECAN反之。
STM32F103C8T6的PB8和PB9引脚连接CAN收发器1,收发器1再连接OBD接口ECAN。PA11,PA12连接收发器2,收发器2再连接OBD的6和14针脚。
程序代码要严谨,否则可能仪表盘上会出现发动机报警灯。
如ECAN切换到VCAN后,PB8和PB9最好设置成GPIO_Mode_IN_FLOATING浮空输入模式。
紧接着禁止端口映射:GPIO_PinRemapConfig(GPIO_Remap1_CAN1,DISABLE);
VCAN切换到ECAN反之。

去年做的板子使用的是WIFI模块,缺点太多,距离短,响应慢,最主要连接麻烦,要搜索车载wifi,现在给板子换了无线透传加蓝牙模块连接手机。响应速度快,距离远。只要bj40遥控器能够着的距离,手机就能连上。我在15楼的家里,距离车很远。也可以手机操控,前些天天气很热,我在窗边,手机遥控落下车窗降个温。或者远程点火启动空调什么的。有排面





图片已删除
打开汽车之家 阅读体验更好
举报/纠错