给美卡模拟/欧卡模拟2手工撸个硬件行车电脑
我是在20年前入坑SCS的《18轮大卡车:穿越美国》。后来护航,美国长途,欧卡1,极卡1/2,奥卡德卡英卡……一直玩到现在的欧卡模拟2和美卡模拟,铁杆抠门老玩家一枚。最近特别迷美国上世纪六七十年代的老卡车,这些老家伙看上去真是帅呆了:

但是唯一遗憾的是老车的仪表全是英制机械的看着相当痛苦。而我又喜欢沉浸式的游戏体验,不喜欢开HUD。于是开起来非常难受:

所以我开始琢磨为美卡和欧卡2打造一块外接行车电脑。这样即使在游戏里开老车的时候,也可以像开现代卡车一样看数显车速,设置定速巡航等。为了防止你看到这还不知道我在说啥,这里先放上最终成品的效果
当前PC上已有一个叫ETS2 Telemetry Server的开源工具可以导出游戏中卡车的实时状态数据,然后通过手机上打开一个网页来显示模拟仪表板了。所以在此基础上,我要做的只是用单片机硬件实现个客户端,代替那个手机网页来显示车辆信息即可。这需要一块带WiFi功能的开发板以及一块尽可能大的液晶屏。另外由于我一贯的抠门,总成本必须控制在30元以内
主控板选用的是上海合宙的ESP32C3开发板,包含一颗主频高达160MHz的32bit RISCV核心,400kb SRAM,内置WiFi和蓝牙,板载4MB闪存。功能性能强大无比,做工非常精细靠谱,而价格却只要9块9包邮(还能用签到红包)。实乃业界良心,国货之光:

与之对比的是青少年科技制作常用的Arduino Nano,价格10~15元,只有一颗16MHz的8bit AVR核,2kb SRAM,32k闪存,不带任何无线功能,和ESP32C3完全没法比。还在捣腾Nano的朋友不妨也试试这款,绝对有惊喜。
显示器选用带I2C模块的2004单色字符屏,这是15元以内能买到的最大尺寸屏幕
。因为主要为了打游戏不想太刺眼,选择了蓝色反显款(黄绿和灰白色的都是正显)。带I2C模块的很多家卖13元以内包邮的,找一家最便宜的买。至于液晶屏的亚克力支架,2004的就我买的这家店最便宜,如果自己有3D打印机的请无视。

由于是I2C串口屏,只需要4根母对母杜邦线即可。这玩意喜欢捣鼓电子制作的家里一般都囤了上百根。要买的话也很便宜,40根1块多:

至于USB TypeC线那就自行准备了。以上硬件成本可完全控制在25元左右(用上签到和拍拍乐红包)。
全部硬件材料到货:

和常见的1602液晶屏对比,2004堪称巨屏,爽啊

给板子上锡焊排针之前先通电检查一下,上锡后就不能售后了。9块9包邮的板子这种做工,真是无可挑剔:

写个简单的程序点亮板载LED(拉高GPIO4和5),确定工作正常即可:

验货合格后就可以动手焊接配送的2排插针。如果手头有面包板的最方便的就是架在面包板上焊,这样可以保证间距准确,日后也能插入面包板里用:

这块板子的邮票孔焊盘巨大,非常好上锡。以我纯软件码农的手艺也能焊得凑合:

完成焊接后连接显示屏——大概没有比I2C屏更好接的显示屏了:VCC接5V,GND就接随便一个GND,SDA接GPIO4,SCL接GPIO5(没错,就是对应那两颗板载LED的引脚,这样与显示屏之间有数据传输时就会看见LED的亮度有变化):

硬件完成了就是软件的活。由于ESP32C3的性能和内存可以秒天秒地,C/C++,Rust,MicroPython都完全不在话下。本来做HTTP GET+JSON解析这种事情用Python是最方便的,但是我一直找不到Python能用的LCD大字体显示库(用来显示车速),只好改用C来写固件程序(项目已在GitHub开源:https://github.com/megatops/ets2_lcd_dashboard)。
用Arduino IDE刷固件时,板子选“ESP32C3 Dev Module”或“AirM2M CORE ESP32C3”,打开USB CDC(因为9块9这款没有串口芯片,需要通过USB CDC模拟串口),Flash Mode一定要选“DIO”,其它按默认即可:

然后在PC上打开ETS2 Telemetry Server,找一辆车开开,如果不出意外将看到如下显示(如果屏幕没显示,需要用螺丝刀调一调I2C模块上的一个蓝色电位器):

软硬件联调完成,后面就是安装屏幕的亚克力支架:

安装时发现2004的支架设计得非常蠢,侧面打的孔和I2C模块完全对不上(1602支架的孔是准的),没法接线

只好大力出奇迹,把排针一根一根小心掰到这个角度:

大功告成,主控板裸露的针脚用电工胶布随便贴一下做好绝缘,可以全塞到屏幕后面。那个打歪的孔正好用来过USB TypeC供电线(接充电宝或充电器):

屏幕从上到下分别是:
导航剩余里程,剩余时间
定速巡航,时速,当前路段限速
油量表,剩余油量预估里程
在欧卡2里装车跑个300公里路测,和游戏里的行车电脑对比数据完全一致
。只是剩余油量里程估算这块有点问题,因为是根据瞬时油耗计算的所以数字漂得厉害,还在与ETS2 Telemetry Server的作者沟通看有没办法解决:

一番折腾下来,在抠门的预算内完全实现了预想的功能,自己表示比较满意
。终于可以愉快地开着老爷车拉货了,擎天柱走起

完毕。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案