拿起一个STM32F103,一个ILI9341和一个ELM327 OBD BT来监测油耗9 r0 E5 r/ H, Q5 }; x
描述3 n! X2 a& d. |' K* j* O ' [+ |9 N9 c) j3 p# Z 我的车没有车载电脑,但我想监测油耗。3 V/ N6 h, }$ e 我尝试过使用ELM327蓝牙加密软件(中国版),但是加密软件不支持从OBD总线读取燃料数据所需的所有AT命令。 所以我找到了一个KW1281 arduino库,移植/改进/修改它到STM32运行arduino IDE,并添加了ILI9341代码。
细节% a7 D/ a( ]' L" n9 f' } # F |0 Y# k1 z5 C5 i2 H 这个项目的第一个尝试是使用ELM327蓝牙。) [# q0 o/ f# s9 H/ ? 但是我发现ELM327提供的OBD信息是不够的。它只提供速度、转速、水温和其他一些传感器读数。2 h) x. ^! j; ]! |7 {* p+ n( p 但与燃料消耗无关…… 3 x/ l6 S# D! V- G 然后我转向另一种方法:“如果我可以直接驾驶OBD巴士呢?” 0 C% o4 ]* ], O! o 因此,我使用arduinos在网上搜索OBD实现,并找到了这个网页(OBD2_KW1281)描述非常好的KW1281协议(使用我的奥迪A4),并有arduino的代码!好了!" J4 u6 x' \+ y$ v 7 {8 r. F$ @& h" |) l6 e0 p/ H * o5 s' B# W" [1 j- t( `6 U, a2 _ 我将STM32与arduino IDE结合使用,它收集了三个方面的优点:良好的性能、低廉的价格和大量可用的库/代码。你可以在stm32duino上查看0 W3 i! w6 `; p1 X \& c- d * }/ |1 F& r* h% {1 z. ]3 a
组件 8 ^6 J* K$ x" C 1×STM32F103 微处理器、微控制器、DSPs /微控制器(MCUs)7 o- b7 \/ M% ` 1×ILI9341 2.8英寸320x240 TFT液晶显示屏- u5 M; f3 h' n1 k 2 n, G- A* n3 Q% ` ?. b7 O) U9 q) M 1×ELM327蓝牙适配器 OBD2到蓝牙加密3 `0 _ V5 R% y2 t" d: m 1×MCP9801 传感器/温度,温度 1×ESP8266 可能用它作为TFT驱动… " A( t# h0 D2 F. B: G. h / ^: g9 F) i6 I5 p UART信号 + B" [$ @" L. M" g% Q* o- S6 K3 \ 1 Y9 d" l, e" y8 p8 D( M9 e 我在ODB适配器上做了手脚,设法得到了一个NPN晶体管,集电极通过电阻器连接到5V轨道上,并将UART TX线连接到基座上。然后将收集器连接到驱动K-Line的NPN的基础上。* h5 r O1 z; H : w3 e: ~3 Z1 p) y 这样我就不需要中断反转“东西”来破坏UART计时。, [' U- U6 G" S( t) r ESP8266准备好了: E" |( L- m2 f& m% U3 Y7 S9 c 我终于准备好了一个新的布局,并定义了通信“API”。. t* B0 m5 U' j * ?' V; H9 g! H H) i4 o8 f 我的目标是一个具有二进制格式的ID、值和校验和的结构,但是现在,为了便于调试,我制作了一个包含所有ASCII值的简单API: 、、<\n>。 0 N6 s! [( C% }% c 通过这种方式,我可以输入一个串行控制台并手动设置值,检查是否一切正常。 4 S$ W7 U7 E6 O d- @ d. a. Y 现在我必须获得STM32代码,以便将相应的值发送到这个API。5 h) m- ]0 |% {( v* }9 b % R8 L$ S$ Q6 p8 F; t7 | 另外,我还没能做到这一点,但我将测试在PC上OBD通信超过90公里/小时的标志与软件运行。如果它起作用,那代码上没有bug,如果不是,我可能不得不重新考虑整个事情……2 K4 u0 p, C) b# z. R9 W : m* |* x8 C; B& w+ w( c 为什么是90?/ I, M' Z% T5 L/ ?9 @5 O 因此,我设法在车上安装了一些电缆,并将k线控制信号从OBD适配器传输到仪表板。这样我就可以开车去看展览,而不会看不见路了!!!安全驾驶! * Q: X- _; O. S0 v; s, r2 k/ E- |' l' n+ p- H7 P# s% A* m# A* { 然后我上路了,一切都很好。偶尔在这里和那里重新连接,但一切似乎都很好。3 l- _, P/ i6 C) K9 S ! { Q# L& y( Q# b7 X+ _3 ^ 但当我进入高速公路,一切都变得疯狂!我注意到在90公里/小时后OBD似乎停止响应。4 U9 d( E+ w, N2 G 当我回到90以下时,它会重新连接,一切正常。 9 h# L+ X2 h* E( _: p8 f0 c 代码不是很优化,因为我读取了OBD值(3次),然后我更新了显示器,也读取了温度传感器,也用它更新了显示器。这大约需要130+90=220毫秒。据我所见,我在笔记本电脑上使用了迷走神经网络软件,并捕捉到了控制信号,当软件空转时,它会向ECU来回发送ACK帧。因此,通信和ECU之间的220毫秒可能太长,可能会中断连接。还需要进一步调查…… + ^) i* f* C$ }. o4 [* Y 但是我计划添加一个ESP8266来负责显示控制,而STM32只剩下OBD任务。通过这种方式,我可以让它以最大速度读取数据块,并通过RS232向ESP报告它们,然后让它显示数据。
|
| 好东西 |
| 没看懂。 |
| OBD的数据协议是自己解码,还是使用OBD模块来采的 |
微信公众号
手机版