1. 项目概述:给旧车装上“智能大脑”
手头有辆老车,内饰过时、功能单一,但又舍不得换?作为一名电子爱好者兼“破烂王”,我总觉得,与其羡慕新车层出不穷的科技配置,不如自己动手,给老伙计来一次彻底的“智能化”升级。这次分享的项目,就是基于一块成本不到30元的ESP8266开发板,打造一套属于你自己的智能车载系统。它不是什么高不可攀的实验室产品,而是一套实实在在、可以塞进你车里,并能立刻提升驾驶乐趣和安全便利性的DIY方案。
这套系统的核心思路很清晰:利用ESP8266的Wi-Fi连接能力和丰富的GPIO接口,将车内各种离散的传感器和执行器连接起来,并通过物联网云平台进行远程控制和数据可视化。具体来说,我们实现了几个非常实用的功能:通过粘在方向盘上的红外遥控器实现一键速拨,避免开车时低头找手机;利用一个简单的干簧管传感器,在挂入P挡(停车挡)时自动记录GPS坐标并发送到你的邮箱;你甚至可以在开车前通过手机给自己发条文字备忘,停车时它会随坐标邮件一起送达;当然,还有炫酷的车内氛围灯矩阵,敲敲仪表盘就能随心变换灯光秀。整个过程涉及硬件连接、嵌入式编程、云平台配置和车内安装,是一次完整的物联网项目实践。无论你是想学习物联网开发,还是单纯想给爱车增添点个性与智能,这个项目都能提供一条清晰的路径。
2. 核心硬件选型与电路设计解析
一套稳定可靠的智能车载系统,硬件是基石。选型不仅要考虑功能实现,更要兼顾车载环境的特殊性:电压波动、温度变化、震动干扰以及最重要的——安全。
2.1 主控与通信模块:为什么是ESP8266?
在众多微控制器中,选择Wemos D1 mini(基于ESP8266)作为核心,主要基于以下几点考量:
- 内置Wi-Fi:这是实现物联网连接的关键。ESP8266集成了完整的TCP/IP协议栈和Wi-Fi MAC/BB/RF/PA/LNA,无需额外模块即可连接手机热点或车载Wi-Fi,极大地简化了设计和布线。
- 充足的GPIO与处理能力:虽然比不上ESP32,但ESP8266拥有多个GPIO口,足以连接本项目所需的所有传感器和外设(红外接收、舵机、干簧管、LED、压电传感器等)。其80MHz的主频也能流畅处理多任务逻辑。
- Arduino兼容性:拥有极其丰富的Arduino核心库支持,开发环境友好,社区资源庞大,无论是驱动WS2812B灯珠的
Adafruit_NeoPixel库,还是连接Blynk的BlynkSimpleEsp8266库,都能轻松集成。 - 成本与功耗:价格极具竞争力,且支持深度睡眠模式。虽然在我们的常供电设计中不主要考虑功耗,但其高效的电源管理特性为未来扩展(如使用电池供电的停车监控模式)留下了可能。
注意:车载电源通常是12V,而ESP8266开发板(通过USB供电)需要5V。因此,不能直接将开发板接到点烟器。你需要一个车载USB充电器(最好是多口、输出稳定的)来将12V转换为5V,再通过Micro-USB线给开发板供电。务必选择质量可靠的充电器,避免电压不稳损坏设备。
2.2 传感器与执行器功能详解
- 红外遥控与接收器(VS1838B):实现非接触式控制。我们将遥控器固定在方向盘上,驾驶员无需视线离开路面,通过拇指即可触发预设动作(如速拨)。接收器需正对遥控器方向安装。在代码中,我们通过
IRremote库解码特定按键值(如“1”、“2”、“OK”),并触发对应的Blynk虚拟引脚写操作。 - 干簧管(Reed Switch):这是一个磁控开关。我们将磁铁部分固定在换挡杆头部(P挡位置),开关本体固定在挡位面板下方。当换挡杆推入P挡时,磁铁靠近,干簧管内部簧片吸合,电路导通,ESP8266检测到D4引脚变为低电平(我们使用上拉输入模式,默认高电平,闭合时被拉低),从而判定车辆已驻车。
- 压电传感器(Piezo Sensor):用于检测振动。它不直接输出电压,而是在受到机械应力时产生电荷。我们将其连接到模拟引脚A0,通过测量其两端的电压变化来感知“敲击”强度。代码中会设置一个阈值,超过该阈值的振动信号将触发LED矩阵切换灯光模式。安装位置很灵活,仪表台、车门板甚至地板都可以,取决于你想如何互动。
- SG90微型舵机:扮演了一个“物理点击器”的角色。其控制线(橙色)接到PWM引脚(如D3)。代码控制它每隔6秒旋转一个特定角度再返回,模拟手指点击手机屏幕,防止手机屏幕因超时休眠而导致Blynk或Integromat应用后台被系统清理。你需要用胶带或支架将其臂杆固定在能触碰到手机屏幕的位置。
- WS2812B LED矩阵(8x8):作为氛围灯。每个LED像素点可独立编程控制RGB颜色。数据线(DIN)连接至ESP8266的D7引脚。需要注意的是,这种灯珠对时序要求严格,且工作电流较大。全亮时64个灯珠电流可能超过2A,因此绝不能直接从ESP8266板载的5V引脚取电,必须从面包板的电源正极(接车载USB的5V输出)单独供电,并确保电源线能承载足够电流。
- LED指示灯:两个普通LED,分别接在D5和D6,用作状态指示。例如,D5的LED在成功接收到红外信号时闪烁一下;D6的LED在检测到车辆挂入P挡时常亮。这在调试和日常使用中非常直观。
2.3 电路连接与布线安全要点
硬件连接图已在原项目图中清晰展示,但实际在车内部署时,有几个坑需要提前避开:
- 电源分离供电:这是最重要的一条。ESP8266开发板、舵机、LED矩阵必须从车载USB充电器的5V输出并联取电,共地。切勿让大电流设备(舵机、灯阵)通过开发板上的稳压芯片取电,否则极易导致开发板重启或损坏。
- 信号线防干扰:ESP8266的Wi-Fi模块工作时会产生高频噪声,可能干扰模拟信号(如压电传感器)和数字信号。建议:
- 为压电传感器的模拟输入线增加一个0.1uF的电容到地,以滤除高频噪声。
- 数字信号线(如红外接收、干簧管)如果较长,尽量使用双绞线或屏蔽线。
- 机械固定与绝缘:所有接线点必须用热缩管或电工胶带包裹,防止在颠簸中短路。面包板和ESP8266最好用一个塑料盒或(像原作者一样)乐高盒子封装起来,避免金属件掉落造成危险。所有线束要用扎带或胶带捆扎整齐,远离油门、刹车、离合器踏板以及换挡杆的活动路径。
- 接地参考:确保整个系统的“地”(GND)都连接到一起,并最终连接到车载USB充电器的地端。混乱的接地是许多诡异故障的根源。
3. 软件平台配置与云端逻辑打通
硬件是身体,软件和云服务则是灵魂。本项目巧妙地利用了多个轻量级云平台,各司其职,避免了自建服务器的复杂性。
3.1 Blynk:物联网设备的移动中枢
Blynk是一个极简的物联网平台,其App提供了丰富的控件(Widgets)来与硬件交互。我们的ESP8266通过Wi-Fi与Blynk云通信。
- 项目创建与鉴权:在App中创建新项目,选择硬件为“ESP8266”,连接方式为“Wi-Fi”。创建后,一个唯一的Auth Token会发送到你的邮箱。这个Token必须准确地填入后续的Arduino代码中,它是设备接入Blynk云的“身份证”。
- 控件配置与虚拟引脚:
- Webhook控件(x2):分别拖入两个,并绑定到虚拟引脚V1和V2。虚拟引脚是Blynk App与硬件代码之间数据交换的抽象通道。在控件设置里,填入从Integromat获取的Webhook URL。当我们在代码中执行
Blynk.virtualWrite(V1, 1)时,就会触发对应的URL调用。 - Email控件:绑定到V10。设置好接收邮箱。当代码向V10写入字符串时,Blynk云就会向该邮箱发送一封包含此字符串内容的邮件。
- GPS Stream控件:绑定到V0。这个控件会持续从手机获取GPS坐标,并通过Blynk云推送到ESP8266。我们在代码中监听V0的值变化,即可实时获得车辆位置。
- Terminal控件:绑定到V11。这是一个简单的文本收发器。你在App里输入文字并发送,ESP8266就能收到;反之,ESP8266发送的文字也会显示在App里。我们用它来接收驾驶员的临时备忘。
- Webhook控件(x2):分别拖入两个,并绑定到虚拟引脚V1和V2。虚拟引脚是Blynk App与硬件代码之间数据交换的抽象通道。在控件设置里,填入从Integromat获取的Webhook URL。当我们在代码中执行
- 能量机制:Blynk的免费账户有能量限制。每个控件消耗一定能量。本项目用到的控件基本在免费额度内。如果未来需要添加更多功能(如更多速拨按钮),可能需要购买能量或优化控件使用。
3.2 Integromat:无代码自动化桥梁
Integromat(现更名为Make)是一个强大的自动化工具,在这里我们用它来实现一个关键功能:将硬件触发的事件转化为手机的实际拨号动作。
- 场景(Scenario)搭建:
- 创建一个新场景,第一个模块选择“Webhooks” -> “Custom Webhook”。这会生成一个唯一的URL(例如
https://hook.integromat.com/abcdef123456)。这个URL就是Blynk中Webhook控件要调用的地址。记下它。 - 第二个模块选择“Android Devices” -> “Make a call”。在设置中,选择你的手机设备(需安装Integromat App并登录),并填入你想要一键拨打的电话号码。
- 创建一个新场景,第一个模块选择“Webhooks” -> “Custom Webhook”。这会生成一个唯一的URL(例如
- 权限与后台运行:在手机的Integromat App设置中,务必授予“拨打电话”的权限。更重要的是,为了让自动化场景能在后台运行,你需要根据手机品牌和系统版本,将Integromat App设置为“电池优化无限制”、“允许后台活动”,防止系统为了省电而杀死其进程。这也是为什么我们需要舵机来定期点亮屏幕,保持手机活跃。
- 扩展思考:Integromat的能力远不止于此。你可以轻松修改场景,将Webhook触发的事件改为发送短信、记录到Google Sheets、或者发布一条推文。例如,可以创建一个场景,当干簧管触发(停车)时,除了发邮件,还自动在家庭微信群中发送一条“已安全停车”的消息。
3.3 Adafruit IO:数据可视化仪表盘
Adafruit IO专注于物联网数据的展示。我们用它来创建一个简单的远程监控仪表盘,让家人或朋友可以查看你的车辆状态。
- 数据源(Feed)创建:创建两个Feed,
parked(布尔型,表示是否停车)和location(经纬度字符串,如“31.2304,121.4737”)。Feed就是数据流的通道。 - 仪表盘(Dashboard)与控件(Block):
- 新建一个仪表盘,然后添加一个“Indicator”块,关联到
parkedfeed。设置当值为“1”时亮起(比如绿色),表示车辆已驻车。 - 添加一个“Map”块,关联到
locationfeed。地图会自动将接收到的经纬度字符串解析为图钉位置。
- 新建一个仪表盘,然后添加一个“Indicator”块,关联到
- 密钥(Active Key):在Adafruit IO的“My Key”页面找到你的Active Key。这个密钥需要填入Arduino代码,以便ESP8266有权限向你的
parked和location这两个Feed推送数据。代码中会使用Adafruit_MQTT库来发布MQTT消息到对应主题(Feed)。
4. Arduino代码深度剖析与定制
完整的代码(PimpMyWreck.ino)包含了所有功能的集成。这里我们拆解核心逻辑,并说明如何根据你的硬件进行定制。
4.1 核心库与全局定义
代码开头需要引入所有必要的库,并定义网络凭据、平台密钥以及硬件引脚。
// 网络配置 char ssid[] = "你的手机热点名称"; char pass[] = "你的热点密码"; // Blynk鉴权令牌 char auth[] = "你的Blynk Auth Token"; // Adafruit IO配置 #define IO_USERNAME "你的Adafruit IO用户名" #define IO_KEY "你的Adafruit IO Active Key" // 硬件引脚定义 #define IR_RECV_PIN D2 // 红外接收器 #define SERVO_PIN D3 // 舵机 #define REED_SWITCH_PIN D4 // 干簧管 #define IR_LED_PIN D5 // 红外接收指示灯 #define PARK_LED_PIN D6 // 停车指示灯 #define NEOPIXEL_PIN D7 // LED矩阵数据线 #define PIEZO_PIN A0 // 压电传感器模拟输入 // 其他常量 #define PIEZO_THRESHOLD 50 // 压电传感器触发阈值 #define SERVO_INTERVAL 6000 // 舵机动作间隔(毫秒)4.2 关键功能函数解析
红外遥控处理: 在
loop()中,irrecv.decode(&results)不断检查是否有红外信号。一旦收到,就比对results.value是否与我们预设的按键值匹配。例如,如果匹配“1”键,则执行Blynk.virtualWrite(V1, 1),这会触发Blynk去调用Integromat的第一个Webhook,从而拨打电话1。停车状态检测与邮件发送: 这是一个状态机逻辑。持续读取
REED_SWITCH_PIN的电平。bool isParkedNow = digitalRead(REED_SWITCH_PIN) == LOW; // 假设干簧管闭合拉低引脚 if (isParkedNow && !wasParked) { // 状态从“行驶”变为“停车” digitalWrite(PARK_LED_PIN, HIGH); // 1. 获取最新GPS坐标(从Blynk虚拟引脚V0缓存的值) String lastLocation = getLastGpsLocation(); // 假设的函数 // 2. 通过Adafruit IO发布停车状态和位置 publishToAdafruitIO("parked", "1"); publishToAdafruitIO("location", lastLocation.c_str()); // 3. 组合备忘信息并发送邮件 String note = BlynkTerminalBuffer; // 从终端控件读取的缓存 String emailBody = "停车位置: " + lastLocation + "\n备忘: " + note; Blynk.email("你的邮箱主题", emailBody); // 4. 清空终端缓存,为下次做准备 BlynkTerminalBuffer = ""; } wasParked = isParkedNow;这段逻辑确保了只在挂入P挡的瞬间触发一系列动作,而不是持续触发。
压电传感器与灯光控制: 在
loop()中快速采样analogRead(PIEZO_PIN)。如果读取值超过PIEZO_THRESHOLD,则触发灯光模式切换。LED矩阵的控制通常封装成一个函数,通过改变全局变量lightMode,在switch语句中调用不同的灯光效果函数(如彩虹渐变、颜色闪烁等)。防休眠舵机逻辑: 使用
millis()进行非阻塞定时。unsigned long currentMillis = millis(); if (currentMillis - previousServoMillis >= SERVO_INTERVAL) { previousServoMillis = currentMillis; // 控制舵机在0度和20度之间摆动一次,模拟点击 servo.write(20); delay(200); servo.write(0); }
4.3 代码烧录与调试要点
- 开发板与端口选择:在Arduino IDE的“工具”菜单中,选择开发板为“WeMos D1 R2 & mini”或“NodeMCU 1.0”,并选择正确的串口端口。
- 库管理:务必通过库管理器安装以下库:
Blynk、IRremote、Adafruit_NeoPixel、Adafruit_MQTT。版本兼容性很重要,如果遇到编译错误,尝试安装库文档中推荐的版本。 - 串口监视器调试:首次烧录后,打���串口监视器(波特率115200)。这是你了解系统状态的窗口。你可以看到Wi-Fi连接状态、Blynk连接状态、红外按键的原始解码值(用于校准)、压电传感器的实时读数等。根据这些信息调整阈值和逻辑。
- 红外键值校准:不同品牌��红外遥控器,其按键编码可能不同。先不修改代码,上传后按下遥控器的“1”、“2”、“OK”键,在串口监视器中查看输出的十六进制或十进制码值。然后用这个实际值替换代码中
switch(results.value)语句里的预设值。
5. 车内部署、调试与安全规范
将实验室的原型安稳地放进行驶的车辆中,是项目成功的关键一步,也最考验动手能力和细心程度。
5.1 分步安装与固定
- 主机安置:将封装好的主控盒(内含ESP8266和面包板)放在中控台下方、手套箱内或座椅下方。原则是:隐蔽、稳固、通风、便于接线。避免放在阳光直射或空调出风口正对的位置。
- 传感器部署:
- 红外接收头:用双面胶或热熔胶固定在仪表盘上方,确保与方向盘上的遥控器之间无明显遮挡。
- 干簧管:这是安装的难点。需要拆下换挡杆防尘套(部分车型),将干簧管开关本体用胶固定在内饰板下方,正对P挡位置。将一小块强磁铁(如钕铁硼磁铁)用胶固定在换挡杆头的相应位置。反复挂入P挡测试,确保磁铁经过时开关能可靠吸合。可以使用万用表通断档辅助测试。
- 压电片:用蓝丁胶或双面胶固定在你想敲击的位置,如仪表台左侧。导线沿缝隙隐藏。
- LED矩阵:用尼龙扎带或橡胶圈固定在空调出风口格栅上。务必确保其光线不会直接反射到前挡风玻璃上形成倒影,或直射驾驶员眼睛,影响夜间行车安全。可以适当调整角度,让光打在副驾前方或车顶棚上。
- 舵机:用强力双面胶或螺丝(如果位置允许)固定在手机支架附近,调整舵机臂的长度和角度,使其末端能轻轻触碰到手机屏幕(通常是下方中间或右侧)。先在停车状态下反复测试,确保点击动作能有效点亮屏幕且不划伤屏幕。
- 布线规范:
- 走线路径:所有线束应沿着车辆原有的线束走向,用扎带固定。可以穿过中控台侧面的缝隙、地毯边缘下方。
- 电源线:从点烟器/USB口取电的线,要确保接头牢固,车辆行驶中不会松脱。多余的线材盘好固定,避免缠绕踏板。
- 防磨损:所有穿过金属孔洞或边缘的线缆,必须套上波纹管或至少用胶布包裹,防止长期震动磨破绝缘层。
5.2 上车调试与功能验证
安装完毕后,不要急于上路,进行完整的静态测试:
- 供电测试:启动车辆,检查所有设备是否正常上电。观察两个状态LED是否按预期亮起或闪烁。
- 功能逐一验证:
- 红外速拨:打开手机热点,启动Blynk App并运行项目,确保Integromat App在前台。按下方向盘上的遥控器按键,观察手机是否开始拨号。首次使用需在Integromat中授权拨号权限。
- 停车邮件:挂入P挡,检查P挡指示灯LED是否亮起。稍等片刻,检查邮箱是否收到包含坐标的邮件。点击邮件中的Google Maps链接,验证定位是否准确。
- 终端备忘:在Blynk App的Terminal控件中输入“买牛奶”,发送。然后挂入P挡,检查收到的邮件中是否包含了这条备忘。
- 氛围灯:敲击压电传感器安装位置,观察LED矩阵是否切换灯光模式。
- 防休眠:关闭手机屏幕,等待约6秒,观察舵机是否动作并点亮屏幕。
- 路试与抗干扰测试:在安全路段(如空旷停车场)进行短途路试。检查在车辆震动、发动机干扰下,系统是否工作稳定,有无误触发(如颠簸导致压电传感器切换灯光)或失灵。特别注意所有线束和设备在颠簸中是否牢固,有无异响。
5.3 安全警告与责任须知
这是最重要的部分。DIY车载电子设备必须将安全置于首位:
- 绝不干扰原车系统:本项目所有设备均为独立附加系统,严禁接入原车的CAN总线、OBD接口或任何车辆控制线路。只从点烟器/USB口取电,只读取开关量信号(干簧管),不向原车发送任何控制信号。
- 驾驶注意力第一:所有功能的设置,必须以不分散驾驶员注意力为前提。速拨功能是为了减少操作手机,而非鼓励频繁通话。灯光效果不应过于炫目。任何操作都应在视线不离路面、双手不离方向盘的前提下完成。
- 设备固定牢靠:任何松动的设备在碰撞中都可能变成致命抛射物。必须确保所有部件,尤其是主控盒、手机、舵机等较重或带棱角的物体,被绝对牢固地固定。
- 火灾风险:电子设备短路是潜在的火灾源。确保所有接线规范,绝缘完好,无裸露铜线。保险丝是必要的,建议在车载USB充电器与5V总线之间加入一个5V/2A的自恢复保险丝。
- 法律与合规:了解当地关于车载电子设备的法规。某些地区可能禁止在驾驶座附近放置可能遮挡视线的物品,或对改装灯光有严格规定。请确保你的改装合法合规。
6. 常见问题排查与进阶优化
即使按照指南操作,也可能会遇到问题。这里汇总一些常见故障及其解决方法。
6.1 连接类问题
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| ESP8266无法连接Wi-Fi | 1. SSID/密码错误 2. 手机热点未开启 3. ESP8266与手机距离过远或有屏蔽 | 1. 检查代码中ssid和pass。2. 确认手机热点已开启,并允许所有设备连接(或已绑定ESP8266的MAC地址)。 3. 打开串口监视器,查看连接过程的具体错误信息。 |
| Blynk App显示设备离线 | 1. Auth Token错误 2. 网络不稳定 3. Blynk服务器区域不匹配 | 1. 核对代码中的auth与App项目中的Token是否一致。2. 检查手机热点信号强度。 3. 在Blynk App项目设置中,检查服务器地址(一般默认即可)。 |
| 红外遥控无反应 | 1. 红外接收器引脚接错或损坏 2. 遥控器电池没电 3. 接收头被遮挡或方向不对 4. 键值未正确匹配 | 1. 用手机摄像头对准遥控器发射管,按键时观察是否有紫光,验证遥控器。 2. 通过串口监视器查看是否收到红外解码数据,验证接收器和代码。 |
| 停车后收不到邮件 | 1. Blynk Email控件邮箱未设置或错误 2. 邮件被归类为垃圾邮件 3. 干簧管未正确触发 4. GPS信号弱,坐标未更新 | 1. 检查Blynk App中Email控件的设置。 2. 检查垃圾邮件箱。 3. 挂P挡时,观察D6的停车指示灯是否亮起。 4. 确保手机GPS已开启,并在户外测试。 |
6.2 功能类问题
- 舵机点击不准或力度不够:调整舵机安装位置和臂杆角度。可以在臂杆末端粘贴一小块柔软的海绵或硅胶套,增加接触面积并保护屏幕。在代码中调整
servo.write()的角度和delay()的时间,找到能可靠点亮屏幕的最小动作。 - 压电传感器过于敏感或不敏感:调整
PIEZO_THRESHOLD的值。在串口监视器中观察analogRead(PIEZO_PIN)的读数,在静止和敲击时分别是多少,据此设置一个合理的阈值(例如,静止时读数±20)。 - LED矩阵发热严重或颜色异常:检查供电是否充足(5V/2A以上),数据线是否接触良好。确保代码中
Adafruit_NeoPixel对象初始化时指定的引脚正确。如果只是部分灯珠异常,可能是该灯珠损坏或数据信号在该点衰减,尝试降低亮度或检查焊接/连接。 - Integromat呼叫延迟或失败:检查手机是否授予了Integromat“后台弹出界面”或“悬浮窗”权限(不同手机名称不同)。确保在驾驶时,Integromat App位于前台或已在后台锁定。
6.3 项目优化与扩展思路
���础功能实现后,你可以考虑以下升级:
- 电源管理优化:增加一个电压检测模块,监测汽车电瓶电压。当电压低于一定阈值(如11.8V)时,通过Blynk发送报警通知,防止电瓶亏电。还可以利用ESP8266的深度睡眠功能,在车辆熄火后一段时间自动进入超低功耗模式,仅由干簧管中断唤醒。
- 增加更多传感器:
- 温湿度传感器(DHT11):监测车内环境,高温时联动手机发送警报。
- 三轴加速度计(MPU6050):实现碰撞检测(急刹车、侧倾过大)或非法移动报警(车辆被拖车)。
- 超声波传感器(HC-SR04):制作简易的前后泊车雷达,通过LED矩阵或蜂鸣器提示距离。
- 云平台集成:将Adafruit IO的数据通过Webhook转发到更强大的平台,如Google Sheets进行长期记录,或IFTTT实现更复杂的联动(如停车后自动关闭智能家居灯光)。
- 本地化与离线功能:考虑加入一个SD卡模块,在网络不佳时本地记录GPS轨迹和事件。或者使用蓝牙模块(如HC-05),在手机断开热点时,通过蓝牙串口与一个本地App通信,实现基础功能。
- 外壳与美化:为整个系统设计3D打印一个专业的外壳,将线束集成到插接件中,让安装更快捷、外观更整洁。
这个项目的魅力在于其高度的可定制性。它提供了一个坚实的物联网框架,你完全可以像搭积木一样,替换或增加传感器,修改云平台逻辑,创造出独一无二的、最适合你用车习惯的智能车载系统。动手的过程,既是学习,也是创造。享受它带来的乐趣和成就感吧,但请永远记住,安全驾驶是第一位的。