“Python能做嵌入式开发吗?”
这个问题的答案在知乎、技术群、硬件论坛里翻来覆去吵了很多年。有人拿Python点亮一颗LED就兴奋得发帖庆祝,有人拿Python做工业网关被同行嗤之以鼻,两边都有道理,但都没讲透。作为常年泡在硬件工具链和驱动堆里的工程师,我把话说在前头:Python不仅可以入嵌入式,在某些场景下已经是主流。但如果你抱着“一门语言打天下”的心态去学,大概率会踩得鼻青脸肿。
这篇文章不打算复述那些“Python性能差所以不能做嵌入式”的刻板结论,而是站在动手派的角度,把硬件分层、开发板选型、两种Python运行时、工具链搭建、真实项目案例、翻车场景、C/Python混编、AI时代的新机会挨个捋一遍。看完之后你能得到一个清晰判断:手里的项目到底该不该用Python,以及用什么姿势用。
1. 开门见山:Python在嵌入式圈子里到底算什么段位
在回答“能不能”之前,得先把“嵌入式开发”这个概念拆碎。嵌入式是个大伞,底下至少有三类截然不同的场景:
- 裸机MCU开发:51、STM32、ESP32这类单片机,没有操作系统,资源以KB计,实时性要求高,传统上是C语言的天下。
- 嵌入式Linux应用开发:CPU有MMU,跑的Linux系统,应用层写Python/C/Go都行。智能盒子、边缘网关、工业HMI大多数属于这一类。
- 异构计算与底层硬件开发:MPU+FPGA/DSP的复杂架构,比如常见的Zynq平台,既要写ARM侧的Linux和裸机,又要处理FPGA逻辑和硬件驱动的协同。
Python在这三类场景里的位置完全不一样。
在裸机MCU场景里,Python多半以MicroPython或CircuitPython的形式出现,扮演的是“快速验证、交互开发”的角色。它能跑,但要说完全替代C,那还不现实。在嵌入式Linux场景里,Python却是绝对的“主力配角”:设备端的网络服务、数据采集、边缘推理、自动化脚本,到处都是Python的影子。到了Zynq这类异构平台,Python反而常常做最上层应用调度,让C负责底层驱动,FPGA负责高速并行逻辑。
所以你要是问我“Python能做嵌入式开发吗”,我的回答非常明确:能做,但得先搞清楚你处在哪一层。拿嵌入式Linux的日常开发来说,Python的熟练程度已经快变成硬件工程师的基础能力了;而在MCU裸机层面,Python更像一把瑞士军刀——不是每件事都能干,但关键时刻远超好用。
这种生态现状不是偶然。Python最核心的价值是“开发效率高”,这种效率体现在三件事上:语法接近自然语言,写起来快;第三方库极度丰富,网络、数据、图像、AI相关能力几乎拿来即用;调试体验好,尤其REPL模式可以逐行执行,和硬件交互就像在聊天。对于动辄要翻数据手册、查寄存器、调时序的嵌入开发来说,Python的解放感是实实在在的。
但那句“MicroPython只是玩具”的说法也不全是偏见。它确实在性能、实时性、功耗、库覆盖面上和C有差距。理智的态度是把它当成新的工具,而不是信仰。接下来的内容,我都围绕一个核心思路展开:在正确的层级做正确的事。
2. 硬件分层:搞懂MCU、MPU和SBC,才知道Python能跑到哪一层
我见过太多人一上来就问“我能用树莓派跑Python吗”,结果买回来发现不是功耗太高就是价格太贵,要么就是根本没有那些外设需求。根源在于没理解硬件分层。嵌入式硬件的选择,外行看型号,内行看架构。
2.1 MCU与MPU的分界线究竟在哪
MCU(微控制器)和MPU(微处理器)最本质的区别,是有没有MMU(内存管理单元)。MCU通常不带MMU,运行的是裸机或RTOS,内存小、Flash小、外设集成度高;MPU带MMU,可以跑完整的Linux,内存可以上GB,处理器性能也高一个量级。
这个差别的直接结果是:MicroPython这类解释器在MCU上必须“精打细算”,因为解释器本身、运行时堆、对象占用的内存都要挤在一个几百KB甚至几十KB的空间里。而MPU上跑的是标准Python解释器(CPython),你可以安装requests、opencv、numpy这些通用库,甚至跑个PyTorch模型,体验和PC上几乎没区别。
所以嵌入式工程师判断一个项目能不能用Python的MTBF第一屏,就会先问:“这个设备是MCU系统还是Linux系统?”
2.2 MCU层级:Python需要的最低资源门槛
跑MicroPython有个基本资源底线。以我常用的ESP32-S3为例,它拥有双核240MHz RISC-V或Xtensea核心,520KB SRAM,8MB Flash,这个配置跑MicroPython非常舒服,REPL响应飞快,GPIO翻转、I2C读取传感器数据都游刃有余。
再低一个档位呢?经典STM32F103C8T6,“蓝丸”,72MHz,20KB RAM,64KB Flash,也能跑MicroPython。官方社区有很多人用它在跑,但内存比较紧张,跑稍微复杂一点的任务就会MemoryError。用比较粗的话说:RAM少于16KB、Flash少于128KB的MCU,裸奔MicroPython会很痛苦,不建议上手。
再看RP2040(树莓派Pico),双核133MHz,264KB RAM,2MB Flash,支持原生MicroPython和CircuitPython,它是这几年MCU入门Python最好的平台之一。因为正是树莓派基金会主动把MicroPython列为官方开发语言。
2.3 SBC层级:Python是这里的原生公民
SBC(单板计算机)就是另一回事了。树莓派4B、Zero 2W,或者RK3566、RK3588这些国产主控做的开发板,运行完整Linux系统,Python调用通用库、做网络服务、跑模型推理,和服务器开发几乎一致。这里的Python不仅能做应用层,还能通过sysfs、ioctl、libgpiod等接口操作GPIO、SPI、I2C、PWM等硬件资源。
比如在Linux下部署一个Chromium浏览器做屏幕显示,想调用Rockchip芯片的硬件解码能力去播放视频,用Python处理上层逻辑就非常合适:底层交给GStreamer或者vaapi,Python只负责写业务逻辑。这种工作方式在工业触摸屏、电子相框、智能广告机里已经很常见了。
所以Python能与不能,先看硬件属于MCU还是SBC。这一步分清楚,后面所有决策都顺了。
3. 给动手派的开发板选型:按场景买,别只看“哪个板子好看”
很多新手选开发板的标准是“销量高”或者“视频里看着不错”,这是个误区。选板子要从硬件资源、生态支持、你准备做的项目类型三个维度考虑。下面这张表是我自己的实践总结,价格是参考行情,具体会浮动。
| 开发板/主控 | 核心配置 | 运行Python方式 | 价格区间 | 适合做什么 |
|---|---|---|---|---|
| ESP32-S3 | 双核240MHz,520KB RAM,8MB Flash,WiFi+BLE | MicroPython / CircuitPython | 30~60元 | MQTT数据采集、智能家居、电池设备 |
| ESP32-C3 | 单核160MHz RISC-V,400KB RAM,4MB Flash,WiFi+BLE | MicroPython | 20~35元 | 性价比物联网节点、小体积设备 |
| Raspberry Pi Pico W | 双核133MHz,264KB RAM,2MB Flash,WiFi | MicroPython / CircuitPython | 25~50元 | 学习入门、硬件原型、电机控制 |
| STM32F407 | 168MHz,192KB RAM,1MB Flash | MicroPython | 40~80元 | 连接更多外设、比较正式的MCU项目 |
| nRF52840 | Cortex-M4@64MHz,256KB RAM,1MB Flash,BLE | CircuitPython / MicroPython | 60~100元 | BLE低功耗外设、可穿戴原型 |
| 树莓派 4B/Zero 2W | 四核1.5~1.8GHz,1~8GB RAM | 标准CPython | 150~600元 | 边缘AI、网关、屏幕交互、轻量服务器 |
| RK3588开发板 | 四核A76+四核A55,8GB RAM,6 TOPS NPU | 标准CPython + NPU工具链 | 800~2000元 | 边缘计算、多路视频解码、AI盒子 |
这张表不是让你按价格从低到高全买一遍,而是提醒你:先定应用场景,再定板子。做低功耗传感器节点,ESP32-C3就够了,不必买树莓派;要处理视频流和人脸识别,那就直接上RK3588这级别,别指望用MCU做。
一个常见的坑是——有人直接用树莓派代替MCU做嵌入式入门。树莓派跑Linux,开发是方便,但它体积大、功耗高、启动慢,而且外设接口基本都是靠系统抽象出来的,和MCU裸机编程的逻辑完全不同。如果你想真正理解“控制硬件”这件事,建议从ESP32或RP2040开始,成本低、裸机感强、翻车损失也小。
另外还要提一下,Python的“快”在选型时也有迷惑性。以ESP32为例,你用它跑MicroPython开发传感器上报,一两天就能跑通原型;但如果你要做一个工业级、要过认证、要超低功耗的产品,最终还是会考虑C。因为MicroPython的解释执行开销会让“快速原型”和“产品量产”之间存在一道不小的沟。
4. 两大Python运行时:MicroPython与CircuitPython的底层逻辑差异
在MCU上,Python主要由两个运行时把持,很多人只知道名字,却不知道两者的关系,选型的时候容易踩坑。
4.1 两个运行时的前世今生
MicroPython是2014年由Damien George发起的开源项目,最初目标是让Python能在微控制器上运行,也顺带实现了对WiFi(通过配套硬件)和大量外设的驱动支持。它的设计偏“工程向”,性能优化意识很强,REPL和文件系统都做得比较紧凑。
CircuitPython是Adafruit在2017年从MicroPython分叉出来的,目的是让硬件开发对教育和快速原型更友好。它重构了USB栈、原生支持“即插即用U盘模式”——插上USB就能看到一个虚拟磁盘,把.py文件拖进去就自动运行,上手门槛被压得很低。
4.2 两者关键差异
实操中差异表现在这些方面:
- 驱动库风格:MicroPython更多是“你要自己写驱动或者找社区库”,难度稍高但可控;CircuitPython则自带大量传感器驱动依赖模块,官方库覆盖非常广,很多情况下一条import就能读传感器。
- USB协议栈:CircuitPython的USB CDC/HID支持比MicroPython完整,甚至能让开发板模拟成键盘鼠标,这个在做HID自动化设备时特别香。
- REPL行为:两者都有REPL,但CircuitPython的Auto-reload机制(文件保存后自动重启运行)适合调试,MicroPython则需要手动复位或按Ctrl+D软重启。
- 底层定制:如果要做真正产品化、要裁剪固件、要深度定制,MicroPython的社区和资料更多,CircuitPython的开发更偏乐高式。
4.3 怎么选才不拧巴
我的经验是:做教育、原型验证、快速DIY,首选CircuitPython,尤其Adafruit的板子配合度极高;做稍微正式一点的IoT产品原型或嵌入式课程项目,选MicroPython,它的资源占用更小、可控性更强。还有个小窍门:在ESP32上,MicroPython的固件普遍更精简,对比使用过份剧烈的回声可以明显感受到响应速度差异;如果你需要在板上跑线程,MicroPython提供_thread模块,而CircuitPython对线程的支持不理想。
无论选哪个,记住一个事实:它俩都是解释型实现,底层依然靠C/C++。你写的Python最终会被解释器翻译成硬件操作,这意味着它做事件循环、字符串处理很方便,但做位级实时翻转,比如高速PWM或复杂时序驱动,约等于用手摇计算器做傅里叶变换——硬凑也能干,但不经济。
5. 手把手搭建开发环境:VS Code、固件烧录和REPL调试三板斧
工欲善其事,必先利其器。Python嵌入式开发的环境搭建,其实比C的开发流程简单很多,不需要挣扎于交叉编译器、链接脚本、启动文件的配置。以ESP32-S3为例,我把整个流程拆成三板斧:装固件、传代码、调REPL。
5.1 工具链全家桶
- Python解释器:PC上安装Python 3.10+,这不是为了跑嵌入式代码,而是需要esptool、mpremote、ampy这些工具都是Python程序。
- esptool:烧录固件的命令行工具,
pip install esptool即可。 - mpremote:MicroPython官方推荐的远程控制/文件传输工具,
pip install mpremote。 - VS Code:代码编辑器,外加MicroPython插件和Pylance,能获得语法提示和代码补全。
- Thonny:如果不想折腾,也可以直接用Thonny这个轻量IDE,它自带REPL和文件浏览器,新手特别友好。
5.2 烧录固件的完整步骤
先到MicroPython官网下载ESP32-S3对应的固件(.bin文件)。然后按住板子上的BOOT键,接USB,在终端执行:
pip install esptool esptool.py --port COM8 erase_flash esptool.py --port COM8 --baud 460800 write_flash -z 0x0 ESP32_GENERIC_S3-20240602-v1.23.0.bin第一次玩的人容易卡在两个地方:一是Windows下驱动没装好,设备管理器看不到COM口;二是端口号写错,写成自己键盘鼠标的端口。这两个都属于基本操作,但踩的人非常多。烧录完成后用串口工具(或mpremote)打开对应COM口,会直接进入REPL提示符>>>,这时候输入print('hello'),看到输出就说明固件活了。
5.3 用VS Code做日常开发
VS Code打开项目文件夹,安装RFM MicroPico(原MicroPico)或MicroPython插件,设置板子的串口。完成后就能一键运行当前文件到板子,也可以通过内置终端直接连接REPL。
我自己的习惯是:把main.py放根目录用于启动,其余模块用mpremote上传:
mpremote connect /dev/ttyUSB0 mount . mpremote cp boot.py :boot.py mpremote cp main.py :main.py mpremote reset这套命令式操作比界面点击更稳定,对于批量部署非常有帮助。
5.4 说点AI辅助开发的题外话
现在大家都很关注VS Code里集成AI代码助手,比如Claude Code这类工具写嵌入式代码。我的实测感受是:它确实能提高效率,但它的价值不在“帮你写代码”,而在“陪你读文档”。嵌入式开发现在80%的时间是在查数据手册、理解寄存器、排查驱动时序。把数据手册PDF丢给AI,让它总结初始化序列、配置时钟、配置GPIO复用功能,比一页页翻芯片参考手册快得多。让它生成MicroPython控制传感器读取的demo,也基本能一次跑通。
但务必保持怀疑:AI生成的外设配置一旦到了高速通信或者时序敏感场景,翻车的概率很高,它没法替你实测硬件。我的做法是让AI先生成骨架,然后自己对着示波器和逻辑分析仪做验证。AI像是实习生,能打下手,但别让它上手术台。
6. 两个能真正“跑起来”的项目:从闪烁LED到MQTT温湿度上报
环境搭好之后,光看教程没用,得动手做点东西。这里分享两个我最近在ESP32-S3上复现过的项目,第一个用于理解GPIO和定时器,第二个串起“传感器-网络-云”这条物联网主线。
6.1 项目一:PWM呼吸灯与按键消抖
不是简单闪灯那种“Hello World”,而是加入PWM渐变和按钮中断的概念,把MCU最基础的三件事——输出、输入、中断——全过一遍。
from machine import Pin, PWM import time led = PWM(Pin(48), freq=1000) btn = Pin(0, Pin.IN, Pin.PULL_UP) brightness = 0 direction = 1 def pwm_breath(timer): global brightness, direction brightness += direction * 10 if brightness >= 1023 or brightness <= 0: direction = -direction led.duty_u16(int(brightness * 64)) timer = machine.Timer(0) timer.init(period=10, mode=machine.Timer.PERIODIC, callback=pwm_breath) while True: if btn.value() == 0: time.sleep_ms(50) if btn.value() == 0: led.deinit() break time.sleep_ms(10)这段代码有几个值得掰扯的点。machine.PWM底层用的是硬件PWM外设,PWM频率和分辨率两者会互相牵制,不是想多高就多高。Pin(48)是ESP32-S3板载RGBLED对应的引脚,不同开发板差异很大,一定要查自己的板子的原理图。按键消抖用了最经典的延时重读法,虽然不高级,但简单可靠。
实测下来,MicroPython的定时器回调做不到非常精确的实时执行,周期20ms的呼吸效果毫无压力,但如果你拿它做微秒级定时,那就会看到明显的抖动。这就是前面提到的“边界”,一旦触及边界,就得换C或者用硬件外设的DMA功能。
6.2 项目二:DHT11温湿度传感器+MQTT上报
要让一个嵌入式系统有“联网”这层意义,最典型的落地方式就是MQTT上报。这里选DHT11,因为它便宜、协议简单,适合理解“传感器时序”的问题。
import machine, ubinascii import network from umqtt.simple import MQTTClient import dht import time d = dht.DHT11(machine.Pin(4)) wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect("YourSSID", "YourPassword") while not wlan.isconnected(): time.sleep(0.5) client = MQTTClient("esp32client", "192.168.1.100", port=1883) client.connect() while True: d.measure() temp = d.temperature() hum = d.humidity() payload = '{{"temp": {},"hum": {}}}'.format(temp, hum) client.publish("sensor/room1", payload.encode()) print(payload) time.sleep(10)这个项目看起来简单,但跑通之后非常实用。我在这条流程里遇到过两个印象深刻的坑。
第一个是DHT11的时序问题。DHT11单总线协议对时序非常敏感,MicroPython的dht模块虽然封装了底层,但在某些板子、某些供电条件下依旧会偶发读取失败。遇到这种情况,绝大多数不是代码错了,而是硬件问题——传感器供电不稳定、杜邦线太长、上拉电阻缺失。我用逻辑分析仪抓过波形,DHT11的数据线在上电后需要1秒以上的稳定时间,如果测量间隔太短,又会产生新的坑。
第二个是umqtt.simple这个库的坑。这个库是MicroPython社区提供的最简MQTT客户端,但它的重连机制几乎为零。如果WiFi中途断开或者broker重启,程序会卡在client.publish()直接报错退出。解决方法是加异常捕获和重连逻辑,另外用client.ping()做心跳保活。这提醒我们:不要迷信任何“开箱即用”的库,生产环境里的可靠性都是自己一层层补出来的。
7. Python会被硬件“打脸”的地方:中断响应、功耗与内存墙的实测感受
做了几个项目之后,你自然就会碰上Python“不适合干”的场景。这些坑不是网上的抽象讨论,而是真刀真枪测出来的。
7.1 中断延迟不是“慢一点”的问题
MCU里中断响应要求的是“确定时间内必须执行”,而MicroPython代码执行到某一行字节码的时候,GC(垃圾回收)可能正在整理内存,一个中断回调就可能被拖住几十毫秒。我用ESP32做过测试:GPIO触发外部中断,Python回调函数的响应时间在几微秒到几十毫秒之间抖动。做按键,无感;做电机编码器计数,直接废掉。
C语言的中断延迟是以微秒甚至纳秒为单位的,而且可以关闭中断、进临界区来保证确定性。Python天然做不到,因为解释器和GC本身就是不确定性的来源。所以在实时性要求高、需要精确控制的场景,必须把热路径放到C层。
7.2 内存墙和GC暂停
MicroPython的堆大小默认只有几十KB到几百KB。你写Python时觉得列表很方便,但一个包含几千个浮点数的列表就可能把堆撑爆。而且GC触发时,整个解释器都会stop-the-world,内存越大、对象越多、暂停就越明显。
我在做一个数据记录设备时,需要每100ms采样一次,持续一小时。用Python写,数据存列表,到后面明显感觉采集线程被GC拖慢,偶发丢数据。后来改成环形缓冲区+把数据定期写SD卡,情况才好转。这个过程的本质是:不要让Python驻留大数据结构,数据流起来才是正解。
7.3 功耗不可能靠解释器省出来
低功耗是整个MCU设备最重要的卖点之一,电池供电的设备,待机电流需要在微安级别。但MicroPython在空闲状态也只能让MCU进入浅层睡眠,配合外部中断唤醒可以降到比较低,但和C裸机那种深度睡眠加定时器唤醒的功耗优化策略比,差距明显。
有朋友做过对比:同一个ESP32板子,C固件深度睡眠电流约10uA,MicroPython的deepsleep能到20uA左右,但如果你想在睡眠期间保持某些外设供电或者用RTC做复杂调度,Python代码的灵活性会大打折扣。低功耗产品里的“最后一公里”,基本还是要用C。这也是为什么很多量产产品即使前期用Python做原型,量产时也依旧会移植到C/C++。
7.4 翻车之后的正确姿势
遇到翻车,不需要硬刚Python。一个成熟的嵌入式工程师会这样处理:整个系统用Python搭骨架,把性能瓶颈抽出来用C重写;或者整体迁回C,但保留Python测试脚本用于产线测试和功能验证。我没有见过一个负责任的量产项目把所有逻辑都倾倒在MicroPython里,更没见到过一个用Python做上位机工具链、用C写固件的嵌入式工程师被市场淘汰。
Python和C不是对立关系,而是一对搭档,只是你要知道每个工具的发力点在哪。
8. Python与C混编:把实时肉体交给C,把业务灵魂交给Python
既然Python不能包打天下,那工程上最舒服的姿势就是混编。这里分两个层面讲:MCU层面的混合,以及Linux层面的混合。
8.1 MCU层面:为MicroPython编写C扩展模块
MicroPython本身支持用户自定义C模块。做一个简单模块,先在C文件里实现功能,然后编译进固件。比如你要写一个高速步进电机控制函数,Python负责解析参数和调度,C模块负责脉冲输出和加减速计算。这样Python代码仍然简单、可维护,但关键路径的性能已经回归C。
思路可以参考MicroPython官方文档里的“Creating modules”章节。要注意的是,MicroPython的C扩展API和CPython原生的Python C API差别很大,不能把在树莓派上的ctypes经验直接套过来。
8.2 Linux层面:Python调用C库和系统接口
在SBC这类Linux设备上,混编的姿势更多。Python可以通过ctypes、cffi调用系统的.so动态库,也可以直接通过mmap、ioctl访问内存和外设寄存器。我见过一个很实用的项目:底层驱动用C,上层控制逻辑用Python,业务报表和AI分析也用Python,整个系统的开发效率极高。
例如在Zynq或RK3588平台上,FPGA侧做好硬件解码和高速信号处理,ARM侧跑Linux,应用层用Python调用硬件解码模块的接口,就能实现多路视频流的同时AI分析。这个架构里,Python负责“做什么”,C负责“怎么做”,FPGA负责“什么最底层”。这是近几年边缘设备开发里用得最多的分工方式。
8.3 团队协作里的隐性收益
混编不仅是技术问题,还是组织问题。在团队里,把实时性算法交给资深嵌入式工程师用C写,把交互逻辑和数据AI交给应用组用Python写,可以减少大量沟通成本和集成摩擦。硬件工程师也不用从头学一遍完整的JavaScript或Go栈,用Python就可以快速做原型联动。
这样的团队氛围下,Python反而促进了硬件和软件之间的协作效率。我认识不少硬件工程师,最早就是靠Python做上位机和自动测试脚本“曲线救国”,慢慢成长为能独立负责整个产品生态的技术负责人。
9. AI时代的嵌入式Python:边缘推理、AI辅助开发与技能树调整
最后聊点新的东西。边缘AI和AI辅助开发是这几年嵌入式行业最大的变量,而Python在中间的位置非常微妙。
9.1 边缘推理是Python的“主场加成”
以前做嵌入式视觉或语音识别,要写一堆传统图像处理算法,痛苦不堪。现在edge端推理框架基本都有Python接口:TensorFlow Lite Micro有Python工具链,PyTorch可以导出量化模型给NPU,Edge Impulse直接支持MicroPython部署。
在RK3588这类带NPU的板子上跑YOLO或人脸检测,用Python加载模型、抓帧、处理结果,推理本身交给NPU硬件,这个流程的体验已经非常接近“AI算法工程师”的日常了。Python在这里不再是“玩具”,而是原生开发语言,因为模型训练、数据预处理、精度评估本身就在Python生态里完成。
再比如Rockchip平台上的视频硬件解码,配合GStreamer管道,用Python做上层逻辑编排,能在保持实时性的同时把业务逻辑写得很清晰。这类能力在AIoT产品里是绝对的加分项。
9.2 AI辅助编程让硬件开发“画风突变”
借助VS Code集成Claude Code这类AI助手,嵌入式开发最近两次质变跑得飞快。以前看一份几百页的芯片数据手册,花一周时间摸索驱动的初始化顺序,现在可以让AI快速提取寄存器配置、生成示例代码、解释时钟树。这对Python同样适用:让它生成MicroPython控制外设的模块、排查MQTT断连原因、建议调整I2C时序,效率提升不是一点半点。
但AI的幻觉在硬件领域危害极大。它可能编造出一个不存在的寄存器地址,或者给出与实际芯片版本不符合的初始化序列,硬件不会撒谎,一旦指令错误,轻则功能异常,重则烧掉电路板。所以我的铁律是:AI生成的每条硬件操作,我会先看数据手册确认,再用逻辑分析仪验证,最后才进代码库。
9.3 给动手派的能力升级建议
在AI时代,嵌入式开发者的能力模型也在变化。过去是从C语言、寄存器、RTOS一路往上堆;现在另一种路径是先Python、再硬件、再性能优化,同样能走得通。对动手派来说,我认为最值钱的组合是:
- 扎实的Python基础,能用最短时间把软硬件链路跑通;
- 足够的硬件常识,看懂原理图,知道怎么用示波器、逻辑分析仪验证波形;
- 对性能瓶颈的嗅觉,知道哪些场景必须降级到C,或者借助NPU/DSP这类硬件加速单元;
- 会用AI工具做文档阅读和代码生成,同时能辨别哪些“生成结果”不可靠。
如果你是从Python转嵌入式,不要直接买一堆板子吃灰,先挑一个ESP32-S3或者RP2040,从点灯、传感器读取、网络上报三步走,把REPL、固件烧录、外设驱动这些流程体验一遍。如果你已经是C语言老手,不妨在下一个原型项目里用MicroPython做快速验证,你会感受到“半小时亮屏”这件事带来的巨大愉悦。
硬件世界不会因为Python而改变物理定律,但Python会让更多人有能力去触碰硬件世界,这本身就是嵌入式行业最值得庆幸的事情。