点此回到专栏首页
一、前言
软件工程中,无论是前端开发、后端开发甚至是小程序、移动端开发,都形成了固定的工作模式和开发框架,以及非常成熟方便的测试工具链。开发者按固定的工作模式,专心于业务开发。无论是代码的可读性、灵活性,都有完善的模式和解决方案。非常适合团队沟通和交接。
唯独嵌入式软件行业比较特殊,大部分项目都是个人独立完成,软件质量和可维护性依赖于个人开发素质。但是很遗憾,大部分嵌入式软件工程师都以完成功能需求为目标,欠缺这方面的意识,随着功能需求的变动,软件质量慢慢不可控,既对产品本身造成风险,也对后来接任者造成巨大的障碍。同时,由于嵌入式软件工程师关注的是软件功能的实现,而欠缺对软件本身架构的要求以及调试、测试工具链的引入,随着软件需求的变动而慢慢变的庞大臃肿。自身也会陷入大量的调试、找BUG过程中。
本人自工作以来,参与过多个行业产品开发中,在工业控制、物联网设备、智慧农牧行业中吸取了大量的知识。同时也逐步掌握了一些嵌入式软件开发的规范和习惯。这些习惯让我在工作中如鱼得水。
这些习惯,无非是一些代码的固定写法,从而从框架上提高代码可读性、灵活性、稳定性,节约了我们大量的精力,使得我们专注于产品功能创新上。笔者将通过一个微型项目,向大家分享我的一些浅薄认知。希望能帮助到大家。
本文目标读者对象: 刚入行,尚未对开发流程形成连贯认知的初级嵌入式工程师。
本系列文章以乐鑫的 ESP32-C3模块 作为主控,从0到1实现《多功能智能培植机》的全部开发。
需要强调的是,在本系列文章中,ESP32本身的知识不是重点,只会用较小的篇幅讲解。更多的内容是以项目的实现过程,穿插框架模板依据各功能模块的典型写法,目标是使一个未有实际产品经验或者缺乏编程思路的人快速掌握工程开发的基本要领,独立开发出可读性、稳定性、灵活性都合格的软件。
大致上,我将讲述以下内容:
- 工程的搭建
- ESP32工程模板搭建
- ESP32自动初始化组件实现
- ESP32工作队列实现与使用
- 驱动与APP分层及示例写法
- 通用状态机的抽象与实现
- 通用工具文件的介绍
- 开发调试效率
- 日志的管理和使用习惯
- shell调试与单元测试
- 最佳实例
- 项目参数管理的典型写法
- 网络通信,MQTT、HTTP等设备的介绍和使用
- protobuf协议介绍与最佳实例
- IAP在线升级的最佳实例、软件版本管理
- bug诊断的方法
- 其他
- 状态判断与告警管理
- 编程习惯
二、项目概述
《多功能智能培植机》: 一款用于个人\家庭培养植物的小型培养箱,内置多种类型植物生长参数,自动调节光照、温度、湿度等。
基于该项目需求,我们将完成以下功能:
- 参数存储校验
- 温湿度传感器的检测
- 水位高低检测
- 光照、光强的控制
- 喷淋功能
- 人机交互(LCD、按键)
- 联网通信:状态上传、参数下发、告警推送、手动调节
- 智能培养模式
- 在线升级
重要提示: 这个设备需要后台配合,然而笔者暂时没有提供公共的服务后台供大家调试,所以涉及网络这一块,大家重点在于理解笔者的写法和内容。
三、准备知识
1、必备知识
①C语言知识 读者必须掌握基本的C语言知识,有一定的代码阅读和编写调试经验。
②硬件知识 读者必须懂基本的模数电知识,能看懂原理图。
③单片机知识 读者必须有一定的单片机开发经验,了解单片机常见外设。知道单片机工作原理。
2、非必备知识,但是需要提前了解
①ESP32 SDK开发知识。
②git相关操作,了解git概念。最好熟悉gitee网站。
③最好能提前了解一下物联网通信方面的知识。如HTTP、MQTT、TCP\IP等
四、内容安排
考虑到本系列文章面向的是初级入门者,所以本文章不会使用太多设计模式以及太高的设计理念,而是以最基本的C语言知识带领读者完成一个微型项目的开发,过程中不会太考虑芯片、RTOS方面的解耦,也不会引入太多例如事件模型之类的概念。期望读者最大程度的接收本系列文章的知识点,快速掌握独立开发的基本要领。
后期我会制作一个高级篇,对本系列文章代码进行重构。
五、工具软件
IDE:VsCode
版本管理:git,Sourcetree。代码托管在github和gitee网站上。
硬件:ESP32-C3模块。方便调试。
其他:万用表、示波器、路由器等。