news 2026/9/6 9:56:22

Python嵌入式开发实战:从MicroPython到CPython的适用边界与选型指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python嵌入式开发实战:从MicroPython到CPython的适用边界与选型指南

先给结论:Python能做嵌入式开发,但跟很多人想象的不一样。它不是用来替代C语言写寄存器、啃时序、跑电机控制环的,而是在嵌入式系统里承担“应用逻辑”和“快速迭代”那部分工作。你可以在ESP32上写Python控制传感器、在树莓派上写Python处理视频流、在ARM Linux设备上用Python做设备配网和授权管理,甚至可以拿Python快速做出一个硬件产品的原型,验证完再决定要不要用C重写。这篇文章我会从自己实际折腾过的硬件和踩过的坑出发,把Python在嵌入式领域的生态、适用边界、硬件选型、开发流程和常见坑一次性说清楚。

做嵌入式硬件这行的人,多少都听过“Python是胶水语言”这种说法。这句话在嵌入式领域其实特别准确:Python的生态足够丰富,时钟、文件系统、网络协议栈、外设驱动都有现成的库;但它的运行效率、实时响应能力、内存占用又远不如编译型的C。所以真正靠谱的用法,不是“用Python做一切”,而是“在正确的层级用Python”,搞清楚这条线在哪,你就能少踩一大半的坑。

这篇文章适合这几类人看:想给硬件产品做快速原型的软件工程师;想用Python接手硬件项目的嵌入式新人;以及正在犹豫“要不要把Python引入工作流”的硬件工程师。我会把生态、硬件、工具链、实际案例和避坑经验都捋一遍,争取你看完就能动手。

1. 内容整体设计与思路拆解

1.1 先厘清概念:嵌入式开发里的“硬实时”与“软实时”

嵌入式开发有一个很核心的分水岭,就是实时性。汽车发动机控制、无人机飞控、伺服电机驱动这类场景,对任务的响应时间要求在毫秒甚至微秒级别,一旦超过时限就可能造成设备损坏或安全事故,这叫硬实时。这类任务基本只有C语言、汇编或者Rust能做,Python在最底层跑一个while循环读传感器或许勉强可以,但一旦有中断嵌套、DMA传输、精确PWM波形需求,GIL(全局解释器锁)和垃圾回收机制就会成为绊脚石。

还有一类场景叫软实时,比如智能家居面板、环境监测节点、农业灌溉控制器、实验室自动化采样设备。这些场景对响应时间的要求是“几十毫秒到百毫秒级别”,偶尔卡顿一下不会出事。这类场景恰恰是Python的主场:你不需要关心寄存器怎么配、中断向量表怎么排、内存怎么申请释放,只要把业务逻辑写清楚就行。

所以“Python能做嵌入式开发吗”这个问题的真正答案是:如果你的需求属于软实时、逻辑复杂、需要快速迭代的应用层,Python是很好的选择;如果你在做硬实时控制或极端低功耗任务,那就老老实实用C。理解这个边界,比学会某个工具更重要。

1.2 生态全景:MicroPython、CircuitPython 和标准 CPython 的定位

提到Python嵌入式开发,三个词逃不掉:MicroPython、CircuitPython、CPython。

MicroPython是专为微控制器设计的Python解释器,占用资源极少,可以在只有几十KB内存的MCU上运行。它实现了Python 3语法的一个精简子集,内置了machine、time、os、sys等模块,让你直接操作GPIO、ADC、PWM、I2C、SPI、UART外设。写起来基本就是“import machine; pin = machine.Pin(2, machine.Pin.OUT); pin.value(1)”这种风格,亲测学习成本极低,一名C语言嵌入式工程师半天就能上手。

CircuitPython是Adafruit在MicroPython基础上做的分支,主要面向教育和创客场景。它的优势是有大量预先写好的传感器驱动库和社区教程,硬件生态非常丰富。不过CircuitPython的底层架构改动较大,部分硬件平台需要专门移植,有什么问题得先检查你的板子有没有对应的固件。

CPython就是你在电脑上跑的标准Python解释器,它通常运行在嵌入式Linux系统里,比如树莓派或者RK3588工控板。这种方案下Python能做的是标准Python能做的所有事情:HTTP服务、数据库、MQTT、图像处理、机器学习推理,全部可以跑。CPU和内存资源相对宽裕,不用像单片机那样精打细算。

三者定位完全不同:MicroPython面向MCU裸机开发,CircuitPython面向教育和原型验证,CPython面向嵌入式Linux上的复杂应用。很多人纠结“哪个Python好”,其实取决于你手上的硬件是哪一种。

1.3 开发模式辨析:MCU 与 MPU 两条路线

在选型的时候,你会发现嵌入式开发的路线其实分成了明显的两条。一条走MCU(微控制器,比如STM32、ESP32、RP2040),一条走MPU(应用处理器,比如树莓派、RK3566、全志H6)。

MCU路线上,Python以MicroPython/CircuitPython的形式运行在裸机或RTOS之上。优点是功耗低、成本低、实时性尚可(软实时没问题)、启动速度极快;缺点是运算能力有限,跑不了大模型、处理不了高清视频,而且Python解释器本身占了十几KB到几百KB的Flash,芯片选型时别忘了把这部分算进去。

MPU路线上,Python以标准CPython的形式运行在完整的Linux操作系统上。优点是生态完整、性能强、网络和存储能力强,很多“安卓开发板”和“工控板”都能直接跑Python;缺点是硬件成本高、启动时间慢、功耗高,比不得几十块钱的单片机方案。

两条路线没有优劣之分,只看你的项目落在哪个区间。我自己的习惯是:一个产品如果控制逻辑简单、体积功耗优先,优先考虑MCU + MicroPython;如果涉及复杂的UI交互、远程升级、数据分析,那直接上Linux + CPython,开发效率差好几倍。

2. 生态与硬件全景:动手派该认识哪些板子

2.1 主流开发板平台对比

市面上能跑Python的开发板非常多,而且价格都相当亲民。我把自己实测过、觉得靠谱的几类整理成一个速查表,方便你按场景挑:

平台处理器内存/FlashPython方案定位参考价格
ESP32 / ESP32-S3Xtensa双核 240MHz320KB RAM(部分型号有8MB PSRAM) / 4-16MB FlashMicroPython / CircuitPython物联网、Wi-Fi/BLE节点15-40元
ESP8266Xtensa单核 160MHz80KB可用RAM / 4MB FlashMicroPython极简Wi-Fi控制8-15元
Raspberry Pi Pico / Pico WRP2040双核 133MHz264KB SRAM / 2MB FlashMicroPython / CircuitPython教育、控制、原型10-25元
STM32F4/F7系列ARM Cortex-M4/M7128KB-1MB RAM / 512KB-2MB FlashMicroPython官方支持传统工业、复杂外设20-100元
树莓派 4B / 5ARM Cortex-A72/A762-8GB RAM标准CPython边缘计算、多媒体、AI200-600元
RK3588 工控板 / 开发板ARM Cortex-A76 + A554-32GB RAM标准CPython边缘AI、视频编解码500-1500元
nRF52840ARM Cortex-M4 64MHz256KB RAM / 1MB FlashCircuitPythonBLE低功耗30-60元

我不太建议初学者一开始就在开发板上砸太多钱。ESP32-S3开发板几十块钱一块,加上几个传感器、一块面包板、几根杜邦线,总成本不超过100元,就能把MicroPython的环境、GPIO控制、Wi-Fi联网、MQTT通信全跑通。这套东西毕业之后直接拿去做产品原型也是够用的。

2.2 为什么 ESP32 系列是 Python 嵌入式开发的首选

如果只推荐一块板子,我会推荐ESP32系列,尤其是ESP32-S3。原因有三点:性价比极高、无线通信开箱即用、MicroPython的支持非常成熟。

ESP32-S3的一大优势是内置Wi-Fi和BLE,这在物联网场景里太重要了。MicroPython的标准库里自带network模块,几行代码就能接入路由器或者创建热点,不用像STM32那样自己移植协议栈、调试驱动。我之前做过一个温湿度传感器节点,从焊板子到数据传到MQTT服务器,一共用了不到两个小时,大部分时间还是在写HTML做页面展示。

ESP32-S3还支持外置PSRAM扩展内存,这对Python这种需要较多内存的解释型语言很关键。虽然MicroPython做了很多内存优化,但复杂的正则表达式、字典操作、HTTPS请求仍然可能吃几十KB内存,有了PSRAM就从容很多。

注意一点:MicroPython在ESP32上有一个常见坑,就是Wi-Fi连接期间的功耗较高,如果做电池供电设备,建议代码里加入深度睡眠逻辑,让设备每几分钟醒来一次传数据,然后继续睡。实测下来,一节18650电池让一个“每小时上报一次温湿度”的节点跑两三个月没有压力。

2.3 RP2040 和 STM32:另一类值得尝试的 MCU 选择

Raspberry Pi Pico用的RP2040芯片也是MicroPython的好搭档。这颗芯片双核133MHz,性能中规中矩,但胜在功耗低、价格极低、SDK文档清晰,而且板子上的MicroPython固件维护很积极。Pico没有Wi-Fi(Pico W有),适合做纯本地控制逻辑,比如桌面风扇控制、步进电机驱动、LED点阵屏动画。

STM32系列是传统MCU里的“老大哥”,如果你是硬件工程师,手上多半有几块F103或F407的开发板。MicroPython官方对部分STM32型号提供了很好的支持,比如STM32F4系列可以直接刷入MicroPython固件,内置的machine库和pyb库可以访问几乎所有片内外设。不过有一点要提醒:STM32的MicroPython固件大多针对特定开发板定制,如果你用的是自己画的板子,引脚定义可能对不上,需要手动修改引脚映射表重编固件,对新手来说有一定门槛。

2.4 嵌入式 Linux:真正的“ Python 自由”

如果你的项目需要跑Web服务、连数据库、处理图片视频,MCU路线的性能就不够了。这时候嵌入式Linux平台就是更合理的选择。树莓派是最常见的方案,RGB、4B、5代我都用过,MicroPython当然也能装,但我更推荐直接跑系统自带的标准CPython,这样可以用pip install装任何想要的库。

在嵌入式Linux上用Python,最常见的组合是:Python + Flask/FastAPI + MQTT + SQLite + 各类驱动库。比如我要做一个家庭能源监测盒子,树莓派接几个电流互感器模块,Python后台定时读取Modbus RTU数据,写入SQLite,再通过Flask提供API给手机端展示。这套东西逻辑并不复杂,但是用纯粹的C语言去写会非常痛苦,用Python两天就能拉起一个像样的demo。

工业场景里RK3588这类板子更常见。它自带6TOPS算力NPU和强大的视频编解码能力,在Python里可以用ffmpeg调用硬件编解码、用RKNN-Toolkit做模型推理。我之前在RK3588上用Python读取RTSP视频流推流、跑YOLOv5检测,整个过程流畅度比树莓派高一个量级。这种设备基本就是一台“小电脑”,Python的好处在这里发挥得淋漓尽致。

3. 实操过程与开发环境搭建

3.1 安装 MicroPython 固件到开发板

纸上谈兵没意思,我们直接实操一遍。以ESP32-S3开发板为例,讲解MicroPython固件的烧录步骤。

烧录工具推荐esptool,这是乐鑫官方的Python工具,可以通过pip安装。下载MicroPython固件的推荐渠道是micropython.org/download/,选择对应芯片型号和子版本,注意别下成ESP32和ESP32-S3混用的固件,这两个不能通用。下载下来是一个.bin文件。

先确认开发板连接电脑后出现在设备管理器里的串口号,比如COM4或/dev/ttyUSB0。如果串口没识别出来,多半是没装CH340或CP2102驱动,先解决驱动问题再往下走。

按住开发板上的BOOT按键不放,插上USB线,电脑会识别出一个特殊的下载串口。Windows下通过PowerShell执行烧录命令:

pip install esptool esptool --port COM4 erase_flash esptool --port COM4 --baud 460800 write_flash -z 0x1000 ESP32_GENERIC_S3-20240602-v1.23.0.bin

Linux或macOS把COM4换成/dev/ttyUSB0或者/dev/cu.usbserial-xxx即可,烧录命令没有区别。

烧录完成后,打开你喜欢的串口工具(Thonny、PuTTY、minicom都行),连接对应串口,波特率设置115200。按一下开发板上的RST复位键,如果看到类似“MicroPython v1.23.0 on 2024-06-02; ESP32-S3 module with ESP32S3”的提示符(>>>),恭喜,你的硬件已经跑起来了。

提示:初次接触时,建议把板和电脑用质量好一点的USB线连接。很多“识别不了芯片”“刷不进固件”的问题,根源就是那根几块钱的劣质线,只能充电不能传数据。

3.2 用 Thonny / VS Code 编写并运行第一段代码

固件搞定之后,下一步是写代码。Thonny是MicroPython新手最推荐的工具,界面简洁,内置REPL(交互式命令行)、文件管理器、代码补全,甚至可以直接把脚本写入开发板再运行。打开Thonny,右下角选择解释器为“MicroPython (ESP32)”,软件会自动识别串口并连接。

在文件的代码区输入第一段测试程序,比如让开发板上的LED灯实现呼吸效果:

import machine import time led = machine.PWM(machine.Pin(2), freq=1000) duty = 0 direction = 1 while True: led.duty(duty) duty += direction * 10 if duty >= 1023: direction = -1 if duty <= 0: direction = 1 time.sleep_ms(5)

点击绿色的运行按钮,你就会看到板载LED的亮度像呼吸一样缓缓变化。这里用到了machine.PWM,在MicroPython里控制PWM就是这么简单,不需要配置定时器、不需要处理中断回调匹配。

VS Code用户可以在插件市场搜索“MicroPython”相关插件,比如RT-Thread MicroPython插件或MicroPico,把开发板连接到VS Code的集成终端里调试代码。对于已经熟悉VS Code的人来说,这个方式更顺手,代码管理、远程开发都更统一。

有一点想提醒:MicroPython本身包含一个REPL环境,你可以直接在里面逐行敲代码测试,非常方便。遇到不确定的API,先用REPL验证一下再写入文件,能少烧很多次固件。

3.3 借助 VS Code + Claude Code 开发 MCU 工程

稍微提一句最近比较流行的开发方式。很多同事在VS Code里装了Claude Code之类的AI辅助编程工具,直接通过自然语言描述需求,让AI生成MicroPython代码,再刷到开发板上验证。这种方式在原型验证阶段效率极高。比如你只需描述“读取DHT11温湿度传感器,打印到串口”,AI可以立刻生成可运行的代码。

但AI生成的代码不能盲信。我踩过几次坑,比如AI写出的代码里使用了MicroPython不支持的语法,或者引脚号写错、固件版本太旧导致某模块不可用。建议流程是:让AI生成代码,先逐行阅读理解,再丢进Thonny的REPL里试运行,确认每行都符合预期。AI是提效工具,不是教你写代码的替代品。

3.4 嵌入式 Linux 环境下的 Python 环境配置

如果走嵌入式Linux路线,环境的搭建相对简单,但也有一些细节。以RK3588工控板为例,系统通常预装了一个精简的Ubuntu或Debian发行版,自带Python3。检查版本:

python3 --version pip3 --version

如果pip没有安装,先手动装:

sudo apt update sudo apt install python3-pip

这里有个实际经验:嵌入式设备的系统往往比较精简,直接pip install大包依赖容易遇到编译报错。比如你安装pandas或者numpy,系统可能缺少gcc、python3-dev头文件,需要先把编译工具链补全:

sudo apt install build-essential python3-dev

安装完基础的库之后,建议再创建一个虚拟环境,管理不同项目的依赖非常方便,避免在一个系统环境里装一堆不兼容的包:

python3 -m venv myenv source myenv/bin/activate pip install flask paho-mqtt requests

如果是RK3588上做视频解码,一定要用官方的ffmpeg或Rockchip的mpp硬解码,直接在Python里调用。CPU软解8K视频是跑不动的,硬解码却能非常轻松。我之前处理4路1080P RTSP视频流,硬解加Python后处理,单板负载不到20%,稳得很。

4. 实操项目拆解:从原型到交付完整走一遍

4.1 案例一:智能环境监测节点

用ESP32 + MicroPython做一个环境监测节点,是一个很经典的上手项目。

硬件清单:ESP32开发板一块、DHT22温湿度传感器一个、SSD1306 OLED显示屏一个(0.96寸)、面包板一块、杜邦线若干。

接线表如下:

传感器引脚开发板引脚
DHT22 VCC3V3
DHT22 GNDGND
DHT22 DATAGPIO5
OLED VCC3V3
OLED GNDGND
OLED SCLGPIO4
OLED SDAGPIO18

代码思路分三步:第一步把DHT22驱动封装好,第二步把OLED的显示逻辑写好,第三步把采集到的数据通过MQTT上报。MicroPython的标准库支持和驱动库很多,不需要自己造轮子。

import machine import dht import ssd1306 import network from umqtt.simple import MQTTClient import time sensor = dht.DHT22(machine.Pin(5)) i2c = machine.I2C(0, scl=machine.Pin(4), sda=machine.Pin(18), freq=400000) oled = ssd1306.SSD1306_I2C(128, 64, i2c) wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect('你的WiFi名称', '你的WiFi密码') while not wlan.isconnected(): time.sleep(0.5) client = MQTTClient('esp32-client', '192.168.1.100', port=1883) client.connect() while True: sensor.measure() temp = sensor.temperature() hum = sensor.humidity() oled.fill(0) oled.text('Temp: %.1f C' % temp, 0, 16) oled.text('Hum: %.1f %%' % hum, 0, 32) oled.show() client.publish('sensors/env', '{"temp":%.1f,"hum":%.1f}' % (temp, hum)) time.sleep(60)

这个例子里最需要留意的就是DHT22的采样间隔。DHT22温湿度传感器的物理特性决定了它两次读取之间需要至少2秒时间,频繁读取会返回空值。另外MicroPython的umqtt.simple库在断线重连方面比较弱,实际部署时建议代码里加一个心跳检测和自动重连逻辑,不然MQTT连接断了不会自动恢复。

4.2 案例二:基于 RK3588 的视频推流与 AI 识别

另一个方向是边缘AI盒子。这里我用RK3588工控板,Python调用摄像头或RTSP流,做实时视频推理并把结果推送出去。

在嵌入式Linux里跑Python做AI推理,通常是这个套路:

import cv2 import numpy as np import requests from yolov5 import YOLOv5 model = YOLOv5('/home/user/models/best.pt', device='cpu') # 或使用rknn模型 cap = cv2.VideoCapture('rtsp://192.168.1.64:554/stream1') out = None while True: ret, frame = cap.read() if not ret: break results = model.predict(frame) # 处理结果,画框、过滤置信度 # 推送结构化数据到MQTT或HTTP API

上面的代码里我故意混用了两种模型格式。实际项目中YOLOv5可以转成ONNX,也可以用RKNN-Toolkit转成RK3588的NPU格式,后者推理速度更快。但关键点在于,Python的opencv、numpy这些库底层都是C/C++实现的,性能瓶颈在数据拷贝和后处理循环。建议用Cython或numba把后处理部分加速,或者直接用OpenCV的C++接口做。

实际上,在RK3588这类高性能开发板上,Python的优势在于“快速搭建流水线”,而不是“极致性能”。整条链路的瓶颈通常不在CPU或NPU算力,而在你的代码写法。比如用缓存池批量处理帧、用队列异步化I/O,都能让吞吐量上一个台阶。

4.3 案例三:设备台账与软件授权中硬件指纹采集

接着说一个很多硬件工程师都会遇到的场景:设备台账管理和软件授权。以前大家用Excel记录设备信息,用U盘或License文件做软件授权。后来发现设备一多,密码容易泄露、授权文件容易被复制,于是衍生出“硬件指纹绑定”的需求:每台设备生成唯一的ID,软件在启动时校验ID和授权信息是否匹配。

Python在这块非常合适。在嵌入式Linux上,可以通过读取CPU序列号、MAC地址、磁盘序列号等信息生成一个指纹。代码大致如下:

import uuid import subprocess import hashlib import platform def get_hardware_fingerprint(): cpu_sn = subprocess.check_output("cat /proc/cpuinfo | grep 'Serial' | awk '{print $3}'", shell=True).decode().strip() mac = uuid.getnode() raw = f"{cpu_sn}|{mac}" return hashlib.sha256(raw.encode()).hexdigest()

这个指纹再配合公钥加密、授权到期时间,就构成了一个相对可靠的正版授权体系。当然真正的商业级授权系统要复杂得多,还会加入代码混淆、防调试、防篡改等手段。但在原型验证和内部分发阶段,Python这十几行代码已经能挡住大部分“复制粘贴”式的盗用。

还有一点值得提:做设备台账时,让每台设备上报指纹、IP地址、固件版本、运行时间来服务器的API接口,由服务器统一展示和分析。这个系统的后端完全可以用Python(FastAPI + SQLite/PostgreSQL)来搭,设备端用Python脚本定时上报。整个链路从硬件到云端全是Python,开发效率非常高。

5. 常见问题与排查技巧实录

5.1 MicroPython 运行报错:内存不足 / 无法分配内存

这个问题我遇到过无数次。MicroPython在内存很小的MCU上运行,一旦你创建比较大的列表、字典或者字符串,很容易触发MemoryError。排查思路是先检查代码里是否有不必要的全局变量和动态分配,然后看是否用了过大的缓冲区。

常用对策分为三类:一是改用生成器或流式处理,不要一次性把大量数据load到内存;二是减少正则表达式和复杂字符串拼接,改用格式化字符串或字节流;三是如果项目确实需要更大内存,就换带PSRAM的芯片(ESP32-S3 8MB PSRAM版本价格也还好)。

在MicroPython里用垃圾回收是一种赌博,你无法精确控制什么时候触发GC。虽然micro:bit和ESP32的MicroPython都内置了gc.collect(),但频繁调用会增加耗时。如果代码经常出现“卡顿一下再动一下”的现象,多半就是GC在作祟。优先考虑不产生垃圾的写法,而不是事后调用gc。

5.2 引脚定义与固件不匹配

MicroPython的machine.Pin(x)里的编号,不一定跟芯片数据手册里的GPIO编号一致。比如ESP32的引脚编号是0-39,但有些USB转串口的引脚、SPI Flash占用的引脚是不能当作普通GPIO用的。用错了会导致上电后板子不工作、反复重启或引脚输出异常。

排查方法:查官方文档确认你的开发板的引脚复用表;或者用REPL里的machine.Pin模块列一遍可用引脚;再或者直接先用一个最简单的LED点灯程序测试每个引脚是否能正常控制。别嫌麻烦,这个步骤能省掉后面无数的调试时间。

5.3 嵌入式 Linux 下 Python 依赖安装失败

前面提到过,在嵌入式设备上pip装包失败很常见,尤其是交叉编译环境下。遇到pip在安装时卡住或报错,先看错误信息里有没有缺少头文件或No space left on device。一个容易忽略的点是:嵌入式设备的root分区往往很小(几GB),pip缓存和虚拟环境可能把磁盘塞满,导致后续所有操作都失败。解决办法是把虚拟环境放在数据分区(比如/mnt/data、/home),并设置PIP_CACHE_DIR指向空间比较充足的地方。

如果编译某个Python包太慢或报错,试试能不能直接装预编译的wheel:pip install --only-binary=:all: xxx。有些包提供ARM版wheel,直接装上,省去从头编译的时间。对于实在编译不过的,查查有没有conda-forge或apt源里现成的包。

5.4 串口通信乱码或数据丢失

串口是嵌入式开发最常用的调试手段。如果出现乱码,第一件事检查波特率和数据位/停止位是否匹配,MicroPython默认的REPL波特率是115200,但有一些开发板或固件改成了74880或其他值。乱码也可能是USB转串口芯片硬件问题或接线问题导致地电位不一致,尝试换线、换口。

数据丢失则多半是缓冲区溢出。如果双方通信频率很高,而接收端处理慢,数据就会丢失。解决方法是增加接收缓冲或改用带硬件FIFO的串口芯片,或者把通信协议改成带确认重传的握手方式。

5.5 硬件指纹方案里的坑

用Python做硬件指纹时,最大的坑是读取到的“唯一标识”不够唯一或不够稳定。比如用uuid.getnode()获取MAC地址,在某些虚拟化平台上可能返回全0的地址;用/proc/cpuinfo获取Serial在部分新内核上需要权限或者路径不同。建议至少组合两个以上信号源(CPU序列号+MAC地址+硬盘ID),再做一个容错逻辑:如果某个信号取不到,就用其他信号替代,保证指纹算法在绝大多数环境下都能产出稳定的结果。

6. 总结:Python 在嵌入式开发中的适用边界

写到这,其实想说的核心就一句话:Python在嵌入式开发里不是万能的,也不是鸡肋,它是效率和灵活性的利器。选型时别问“能不能用Python”,而要问“这个项目的瓶颈在哪,Python能否覆盖住”。如果项目核心是数据采集、界面交互、网络通信、快速原型,Python非常适合;如果项目核心是高频控制、底层驱动、低功耗睡眠,Python就不适合,老老实实上C。

从我个人的经验来看,嵌入式开发的最佳方案往往是混合式的:底层用C编写驱动和实时控制,上层用Python编写业务逻辑和运维脚本。两块之间通过串口、共享内存、MQTT或文件接口通信。这种结构既保证了硬实时的底线,又保留了Python的高迭代效率。

最后分享一个实际感受:我最早入门单片机的语言就是C,后来接触Python写了几乎所有的PC端工具,再后来开始在ESP32上跑MicroPython。当初以为“Python做嵌入式”只是玩玩,直到用Python给一个客户快速做出了样机,比预期早了两个月,才真正意识到这个生态的威力。希望这篇文章也能帮你少走一些弯路,把精力花在真正有价值的事情上。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 9:54:08

精准锁定建筑企业刚需,数字化拓客提升成交效率

在建筑资质代办行业&#xff0c;传统拓客方式普遍存在线索质量差、客户意向模糊、筛选成本高的痛点。企业耗费大量人力盲目打电话、搜集企业名单&#xff0c;最终转化效果却不理想。沃创云优选商机针对行业痛点推出建筑资质专属线索模板&#xff0c;搭建精细化的客户筛选体系&a…

作者头像 李华
网站建设 2026/9/6 9:54:04

HCIA-DCF认证备考指南:从数据中心基础设施到H12-411通关要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 9:53:09

i.MX6ULL Linux驱动开发:Platform总线匹配机制深度解析

我做了这么多年i.MX6ULL的Linux驱动开发&#xff0c;Platform总线匹配机制是绕不开的一座山头。刚接触驱动开发那阵子&#xff0c;我也被设备树compatible、of_match_table、platform_driver这些概念搞得晕头转向&#xff0c;明明照着教程抄了代码&#xff0c;probe函数就是不执…

作者头像 李华
网站建设 2026/9/6 9:49:00

AI视频生成选云端还是本地?从原理到选型全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 9:45:51

【前沿AI准入分层技术解析】当模型访问权取代价格成为新的稀缺资源

文章目录前沿AI准入分层技术解析&#xff1a;当模型访问权取代价格成为新的稀缺资源一、引言二、纵向演进&#xff1a;AI供给为何从开放接口走向阵营2.1 API时代曾把可替换性写进产品叙事2.2 从模型竞争转向“模型入口数据”竞争三、访问权到底包含什么3.1 “能调API”只是最低…

作者头像 李华
网站建设 2026/9/6 9:45:17

大模型训练网络抖动之痛:HPN 7.0 可预期网络架构深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华