我先从入门级的小项目说起吧,刚入行的时候,做过智能温湿度监测节点。那会儿用的是 STM32F103 单片机,外接 DHT11 传感器采集温湿度数据,再通过 LCD1602 实时显示,还加了个蜂鸣器做超限报警。当时最头疼的是传感器数据抖动,折腾了好几天,才琢磨出用滑动平均滤波来处理,最后调试到数据稳定在 ±0.5℃、±3% RH 的误差范围。这个项目让我彻底摸透了单片机 GPIO 配置、外设驱动编写和简单的数字滤波算法。
后来接触到带 RTOS 的项目,做过工业级 CAN 总线数据采集终端。主控用的是 STM32F407,跑的 FreeRTOS 系统,分了好几个任务:CAN 数据接收任务、串口透传任务、数据存储任务。那会儿卡在 CAN 总线的总线仲裁和错误处理上,好几次因为终端电阻没接对,导致整个总线通信瘫痪,后来查了好多资料,才搞明白 CAN 总线的物理层规范,还学会了用 CANoe 工具做总线调试。这个终端最后是给工厂的生产线用的,能稳定采集设备的运行参数,还能通过 485 上传到上位机,连续运行三个月没出过一次故障。
再往后做过物联网网关项目,主控是瑞芯微的 RK3399,跑的 Linux 系统。这个项目要对接多种外设:RS485、以太网、Wi-Fi、LoRa 模块,核心是把不同接口的设备数据做协议转换,再通过 MQTT 上传到云平台。当时最费劲儿的是 Linux 驱动开发,比如 LoRa 模块的串口驱动适配,还有根文件系统的裁剪 —— 因为网关要做轻量化,得把没用的库都删掉,最后把系统镜像从原来的 2G 压缩到了 512M。另外还做了个简单的 Web 管理页面,方便用户配置网关参数,那会儿边学 Nginx 边写 CGI 脚本,熬了好几个通宵才搞定。
这些项目下来,最大的感触就是嵌入式开发讲究 “软硬兼施”,不仅要写得好代码,还得懂硬件电路,知道怎么排查电磁干扰、电源纹波这些问题,而且稳定性永远比功能实现更重要 —— 毕竟很多嵌入式设备都是 24 小时不间断运行的。