4、开发环境搭建:TensorFlow Lite Micro环境配置、Arduino IDE与PlatformIO安装、ESP-IDF环境搭建、STM32CubeIDE配置、串口驱动与调试工具安装
说实话,搭建开发环境这件事,看着琐碎,但却是整个TinyML项目里最绕不开的一步。我见过太多人,模型跑通了,结果烧录到板子上死活没反应,最后发现是环境没配好。嗯,咱们今天就把这事一次性搞定。
4.1 TensorFlow Lite Micro环境配置
TensorFlow Lite Micro,简称TFLM,是专门为微控制器设计的推理引擎。它不依赖操作系统,内存占用极小。我个人习惯用源码编译的方式搭建,这样可控性最强。
第一步:拉取源码
git clone https://github.com/tensorflow/tflite-micro.git
cd tflite-micro
第二步:安装依赖
你需要Python 3.8以上版本,以及pip。我建议用虚拟环境,避免污染系统Python。
python3 -m venv tflm_env
source tflm_env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
第三步:编译测试
以ESP32为例,运行以下命令验证环境是否正常:
make -f tensorflow/lite/micro/tools/make/Makefile TARGET=esp generate_hello_world_make_project
4.2 Arduino IDE与PlatformIO安装
这两个工具是嵌入式开发的「瑞士军刀」。Arduino IDE适合快速验证,PlatformIO则更适合大型项目。
4.2.1 Arduino IDE
去官网下载最新版,安装过程没什么好说的。但要注意一点:安装完成后,一定要添加ESP32开发板支持。
- 打开Arduino IDE,进入「文件」→「首选项」
- 在「附加开发板管理器网址」中添加:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - 进入「工具」→「开发板」→「开发板管理器」,搜索ESP32并安装
4.2.2 PlatformIO
PlatformIO是VS Code的插件,但功能远不止于此。它支持超过1000种开发板,而且依赖管理做得很好。
# 安装VS Code后,在扩展商店搜索PlatformIO IDE
# 安装完成后重启VS Code
创建新项目时,选择你的开发板型号。比如ESP32-DevKitC,PlatformIO会自动下载对应的工具链和库。
为什么我推荐PlatformIO? 说白了,它帮你省去了手动配置编译器的麻烦。你只需要写代码,剩下的交给它。对于TinyML项目,我们经常需要切换不同平台,PlatformIO的跨平台支持简直是救星。
4.3 ESP-IDF环境搭建
ESP-IDF是乐鑫官方的物联网开发框架。如果你要用ESP32跑TinyML,这个环境是绕不开的。为什么?因为TFLM对ESP32的官方支持就是基于ESP-IDF的。
安装步骤:
# Linux/Mac
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh
. ./export.sh
# Windows
# 推荐使用ESP-IDF PowerShell环境,安装包在官网下载
安装完成后,运行一个示例项目测试:
cp -r $IDF_PATH/examples/get-started/hello_world .
cd hello_world
idf.py set-target esp32
idf.py menuconfig
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor
我的习惯: 每次打开新终端,我都会先执行 . ./export.sh。不然idf.py命令会找不到。你可以把它加到.bashrc里,省得每次都手动敲。
4.4 STM32CubeIDE配置
STM32CubeIDE是ST官方推出的集成开发环境,基于Eclipse。说实话,它有点重,但功能确实强大。对于TinyML项目,我们主要用它来生成初始化代码和调试。
安装要点:
- 从ST官网下载安装包,注意选择对应操作系统版本
- 安装过程中会提示安装驱动,全部勾上
- 首次启动时,选择工作空间目录。我建议单独建一个文件夹,别和项目混在一起
配置TFLM支持:
STM32上跑TFLM,需要手动添加源码。我一般这样做:
# 在项目根目录创建third_party文件夹
mkdir -p third_party
cd third_party
git clone https://github.com/tensorflow/tflite-micro.git
然后在CubeIDE中,右键项目→Properties→C/C++ Build→Settings,添加头文件路径和源文件路径。
注意: STM32的RAM通常很小,比如STM32F4系列只有192KB。加载TFLM模型时,一定要先算好内存占用。我曾经在STM32F407上跑一个80KB的模型,结果堆栈溢出,查了两天才发现是内存分配问题。
4.5 串口驱动与调试工具安装
串口是嵌入式开发的「眼睛」。没有它,你根本不知道板子在干什么。
4.5.1 串口驱动
常见的USB转串口芯片有CP2102、CH340、FT232等。不同芯片需要不同驱动:
| 芯片型号 | 驱动名称 | 下载方式 |
|---|---|---|
| CP2102 | CP210x Universal Windows Driver | Silicon Labs官网 |
| CH340 | CH340/CH341 USB driver | 南京沁恒官网 |
| FT232 | FTDI VCP Driver | FTDI官网 |
我的建议: 买开发板时,尽量选CP2102或FT232的。CH340虽然便宜,但驱动在Linux下偶尔会出问题。你想想看,调试时突然连不上串口,多耽误事。
4.5.2 调试工具
我常用的调试工具有三个:
- PuTTY:Windows下最轻量的串口终端,支持SSH和串口
- screen:Linux/Mac下的命令行串口工具,一行命令搞定
- CoolTerm:跨平台,支持数据记录和波形显示,调试传感器数据时特别好用
用screen连接串口的命令:
# 先查看串口设备
ls /dev/tty*
# 连接,波特率通常为115200
screen /dev/ttyUSB0 115200
# 退出:Ctrl+A,然后按K
调试小技巧: 在TinyML项目中,我习惯在模型推理前后打印时间戳,用来计算推理耗时。比如:
uint32_t start = micros();
model.Infer();
uint32_t end = micros();
Serial.printf("Inference time: %d us\n", end - start);
这样你就能直观地看到模型在板子上的实际表现,而不是靠猜。
好了,环境搭建这块就这些。看起来步骤多,但只要你按顺序来,基本不会出大问题。下一章咱们开始写第一个TinyML程序——让LED灯根据手势亮灭。嗯,那才是真正有意思的部分。
公众号:蓝海资料掘金营,微信deep3321