小智项目架构分析
小智代码架构
.github
这就是github项目上拉下来的一些信息 没什么好看的,这跟项目代码无关
.build
编译时生成的文件,没什么可看的,与项目代码无关
.main
主要的代码都在这里面了
.managed_components
这里是小智用到的一些第三方移植库,例如lvgl啊这些,都是第三方库,main文件夹里会引用这些库函数
.scripts
这里面是一些espidf烧录时用到的工具,与烧录相关,与项目代码无关,没什么看点
剩下文件
partitions.csv 这些文件保存了 段的起始地址与大小,太底层了,看看就好
.config文件都是一些配置文件,配置项目是否启用某些功能,其实也不用怎么看,因为esp32idf支持图形化配置功能
main文件夹架构
assets
这里面保存了一些音频文件,例如系统WiFi连接失败时要播放的音频之类的,以及一些定义好的字符串,总的来说没什么好看的
audio_codecs
看名字就知道这里里面保存了,音频播放的相关函数,里面有多个文件,可以看到有不同型号的音频解码芯片,最开始的俩个文件就是通用函数
audio_processing
这个文件夹里存放着,音频处理的文件,就是音频数据如何上传云端,如何从云端接收数据,理解即可,不必深究,也没必要
boards
这是一个比较重要的内容了,开发者主要修改的代码也在这里面,根据你板子的型号选择一个进行开发,
例如我这个是esp-sparkbot,我就在这里面进行开发
这里面的内容主要有以下几个文件,我们主要改的是最后一个esp_sparkbot_board.cc文件,里面是板子整个运行前所需要的初始化工作,初始化spi,i2c,按钮,屏幕,其他的可能会改的就是config.h,里面定义了硬件的引脚,以及屏幕的一些尺寸大小,主要与硬件相关的宏定义
display
这里面存储着屏幕的主要函数,前俩个是通用函数,这里面函数就是一些基本的绘图函数,分为lcd和oled俩种屏幕的驱动函数
iot
这里面存储的板子上硬件设备的控制逻辑,在这里面你可以编写硬件的控制逻辑,例如你要叫小智调大音量,那你就要在things文件夹里面添加调节音量大小的文件,里面有个speaker就是负责调节音量大小的,其他的电池啊背光啊灯啊 这些都可以用,如果硬件有支持都是有效果的。
你添加完了新设备,你要在sample_interface.json里去描述,具体都是照葫芦画瓢。
其他的文件都可以不用管,他们都是服务与things里面的文件,开发者开发时不用去管其余的文件的
led
这里面没什么好说的,就是拓展库,可以用可以不用,就是给你写好了一些灯带的控制函数,或者单独一盏灯的控制函数,可以实现一些基础的流水灯类似的操作,没必要
protocols
协议层,这个就比较高深了,开发者也用不到,主要是服务于小智通信协议的,开发者开发时基本不用看这里,看了也没用,除非你想做个类似小智一样的完整项目。
剩余文件
main.cc是程序最开始执行的程序,然后会跳转到application.cc里去执行程序,main里面啥也没写。主要的功能就是在application.cc实现了,里面写了很多初始化要做的工作,例如初始化板子的硬件,配网,ota升级,然后创建了几个freertos任务,其中一个是主循环任务,负责一直处理事件响应。另一个是ota升级检测任务,有新版本就升级,不过这个任务被我屏蔽了,因为升级很耗时间。
因此开发者需要关心的只有application.cc,以及application.h ,其他的不用关心,我修改的程序也主要在这。
CMakeLists.txt 这个有点特殊,其实就是make指令执行时,要怎么去编译整个项目,根据这里面的来,玩过嵌入式Linux的都懂