经过前面的学习,主要使用C语言和ModusToolbox™开发边缘AI应用的方法。但对于许多快速原型开发和教育场景来说,C语言的复杂性往往成为入门障碍。接下来将采用更加简单直观的开发方式——使用MicroPython在CY8CKIT-062S2-AI上实现机器学习应用。
MicroPython是专为微控制器优化的Python3语言实现,它保留了Python简洁优雅的语法特性,同时又能在资源受限的嵌入式设备上高效运行。Infineon为PSoC™ 6提供了完整的MicroPython支持,并与DEEPCRAFT™ Studio无缝集成,实现了从数据采集到模型部署的全流程简化。这意味着你无需编写复杂的C驱动代码,只需几十行Python脚本就能完成传感器数据的WiFi无线传输和AI模型推理。
一、MicroPython开发环境搭建
1.1 理解MicroPython的优势
在深入实践之前,让我们先了解为什么要在嵌入式AI项目中选择MicroPython(https://micropython.org/)。传统的C语言开发虽然性能卓越,但需要开发者处理大量的底层细节。比如配置传感器寄存器时,你需要查阅数百页的数据手册,理解时序图和I2C协议的每一个细节。而使用MicroPython,同样的功能只需要调用一个简单的函数。

以PDM麦克风为例,在C语言中初始化麦克风需要配置时钟分频、DMA通道、中断优先级等十几个参数。代码量轻松超过一百行,调试起来也相当繁琐。但在MicroPython中,你只需要三行代码就能完成相同的工作,而且代码清晰易懂。这种简洁性不仅提高了开发效率,也大大降低了出错的概率。
另一个显著优势是交互式开发体验。MicroPython提供了REPL(Read-Eval-Print-Loop)交互式解释器,你可以在命令行中直接输入代码并立即看到执行结果。想测试传感器是否正常工作?只需在REPL中输入几行命令就能得到反馈。这种即时反馈循环对于原型开发和学习来说非常宝贵,大幅缩短了从想法到验证的时间。
当然MicroPython也有局限性,主要是执行效率。Python作为解释型语言,在计算密集型任务上的性能无法与编译型的C语言相比。但在大多数嵌入式AI场景中,真正的性能瓶颈往往在传感器数据获取和网络传输上,而不是Python代码执行。况且对于模型推理这种核心计算,我们会调用用C语言编写的优化库,实际性能差距并不明显。
1.2 安装MicroPython固件
开始MicroPython之旅的第一步是在CY8CKIT-062S2-AI上烧录MicroPython固件。这个固件替换了PSoC™ 6的默认应用程序,将整个芯片变成一个Python解释器。固件大小约500KB,包含了Python核心运行时、标准库以及针对PSoC™ 6优化的硬件驱动模块。
访问Infineon的MicroPython发布页面(https://github.com/Infineon/micropython/releases),下载最新版本的固件文件。文件名类似`CY8CKIT-062S2-AI-micropython-vX.X.X.hex`,目前最新版本为v1.4.0,大小约3.24MB。这个HEX文件包含了预编译的二进制代码,可以直接烧录到开发板的Flash中。注意一定要下载对应CY8CKIT-062S2-AI板型的固件,不同的PSoC™ 6开发板固件是不通用的。

烧录过程与之前的实验相同,使用ModusToolbox™ Programmer工具。将开发板的J1口(KitProg3端口)连接到电脑,打开Programmer软件并加载下载的HEX文件。在Programmer下拉菜单中选择KitProg3设备,Board下拉菜单选择CY8CKIT-062S2-AI,然后点击Program按钮开始烧录。整个过程大约需要30秒,完成后开发板会自动重启进入MicroPython环境。

烧录成功后,开发板的行为会有明显变化。打开设备管理器(Windows)或终端(Linux/Mac),你会发现开发板被识别为一个USB串口设备。在Windows上通常显示为COM口(如COM3),在Linux上是/dev/ttyACM0之类的设备节点。这个串口就是MicroPython的REPL接口,通过它我们可以与开发板进行交互式对话。

1.3 配置开发环境
MicroPython开发可以使用多种IDE,这里推荐使用ViperIDE网页编辑器,它专门为Python教学和嵌入式开发优化,界面简洁且对初学者友好。访问ViperIDE官网(https://viper-ide.org)即可在线使用。
首次启动ViperIDE后,需要配置解释器以连接到MicroPython设备。点击右上角的端口下拉列表中选择对应的COM口或ttyACM设备。如果列表中没有显示设备,点击"配置解释器"按钮进入设置界面,在这里可以手动指定端口。
正确配置后,ViperIDE界面会分为上下两部分。上半部分是代码编辑器,下半部分是Shell窗口显示REPL提示符。在Shell中输入 print("Hello PSoC")并回车,应该能看到输出。再输入 import sys; sys.implementation查看MicroPython版本信息,输出中包含 (name='micropython', version=(1, 23, 0))之类的字样表明MicroPython正在正常运行。

除了ViperIDE,也可以使用Visual Studio Code配合Pymakr插件进行开发。Pymakr提供了代码补全、实时同步等高级功能,适合有经验的开发者。但对于本教程的初学者来说,ViperIDE的简洁性和稳定性让它成为更好的选择。熟悉流程后,随时可以切换到功能更强大的IDE。
二、WiFi无线数据采集
2.1 概述
目标是实现一个完整的音频数据采集系统。开发板上的两个PDM麦克风负责录制声音,通过WiFi将音频数据实时传输到电脑上的DEEPCRAFT™ Capture Server,服务器自动保存为带时间戳的WAV文件。这些文件可以直接导入DEEPCRAFT™ Studio进行标注和模型训练,完全无需USB线缆连接。
参考:
Edge AI Made Easy with DEEPCRAFT™ & MicroPython - Part I(https://www.hackster.io/Infineon_Team/edge-ai-made-easy-with-deepcraft-micropython-part-i-657848#toc-step-2--start-sensor-data-acquisition-on-device-3)
Edge AI Made Easy with DEEPCRAFT™ & MicroPython - Part II(https://www.hackster.io/Infineon_Team/edge-ai-made-easy-with-deepcraft-micropython-part-ii-fa5edf?f=1)
整个系统分为三个组件。第一个是运行在CY8CKIT-062S2-AI上的MicroPython数据采集脚本,它负责初始化麦克风、连接WiFi网络、建立TCP服务器并持续发送音频数据。第二个是运行在PC上的DEEPCRAFT™ Capture Server,它作为TCP客户端连接到开发板,接收数据流并存储为标准格式的音频文件。第三个是DEEPCRAFT™ Studio本身,用于后续的数据标注和模型训练。

采用这种架构的好处是灵活性和可扩展性。开发板可以放置在任何WiFi覆盖的地方进行数据采集,不受USB线长度限制。Capture Server作为中间件隔离了开发板和上层应用,你可以轻松切换不同的后端处理工具。而且这套架构不限于音频,只需要修改传感器初始化部分,就能用于IMU、雷达等其他传感器的数据采集。
数据传输采用TCP协议保证可靠性。每个音频数据包包含512个采样点,以16位有符号整数(int16)格式编码。考虑到16kHz的采样率,每秒需要传输32KB数据,对于WiFi网络来说完全没有压力。Capture Server接收到数据后,会添加时间戳并按照WAV格式要求组织文件头和音频块,最终生成标准的音频文件。
2.2 克隆示例代码仓库
Infineon在GitHub上提供了完整的MicroPython数据采集示例代码,我们直接使用这些经过测试的代码可以避免从零编写。打开终端或命令提示符,执行以下git命令克隆仓库到本地目录。这个仓库不仅包含音频采集的代码,还有IMU、温度传感器等多个传感器的示例,是学习MicroPython传感器编程的宝贵资源。
bash
git clone https://github.com/Infineon/deepcraft-micropython-data-acquisition.git
cd deepcraft-micropython-data-acquisition
克隆完成后,目录结构非常清晰。根目录下的 data_acquisition.py是主程序入口。sensors文件夹包含各种传感器的驱动模块,每个传感器一个Python文件。config.py用于存储WiFi配置信息。network_utils.py和 tcp_server.py是网络通信的辅助模块。README.md文件提供了详细的使用说明和API文档。
