Python能做嵌入式开发吗?从单片机到Linux的分层实践指南
2026/9/6 10:42:43 网站建设 项目流程

Python 能做嵌入式开发吗?这是我这几年来被问到最多的一个问题。问的人里既有刚转行的软件工程师,也有在实验室里焊板子焊了好多年的硬件老手。前者的潜台词多半是“我能不能不长时间啃 C 语言就玩得动单片机”,后者的焦虑则更具体:“我的产测脚本要不要整套换成 Python?”我的回答一直很直接:能,但你首先要搞清楚自己说的“嵌入式”到底是哪一层。

真正搞过嵌入式开发的人都知道,这个领域从来不是单层世界。最底层是单片机(MCU)裸机或者 RTOS 上的资源受限开发,中间是嵌入式 Linux 这类带操作系统的用户态应用开发,再往上还有一类经常被忽略、但每天被大量使用的环节——PC 上的上位机、烧录工具、产线自动化脚本。Python 在这三层里能做的事、该踩的坑、依赖的硬件生态,完全不是一回事。这篇全景图就是写给那些想动手的人,我会把三层分别拆开,讲清楚硬件选型、代码怎么写、实际工程中会遇到哪些麻烦,最后给一张可以直接对照的决策地图。

1. 先拆掉“嵌入式=单片机=必须用C”的认知门槛

1.1 这个根深蒂固的观念是怎么来的

很多人的认知其实停留在十几年前。那时候主流的单片机是 8 位机,主频不到 1MHz,RAM 只有几百字节,Flash 也就几 KB 到几十 KB。你想在这种资源里塞一个 Python 解释器,别说做产品,连把解释器装进去都是天方夜谭。

更重要的是,C 语言在那个年代几乎是“天然正确”的选择。指针可以直接操作寄存器、地址做位运算,编译出来的代码紧凑高效,中断响应时间可以用指令周期精确计算。嵌入式开发里最核心的几件事——操作寄存器、处理中断、管理内存——C 语言全部直击要害。所以“嵌入式必须用 C”在当时不只是一个习惯,而是一个基于物理现实的正确结论。

这个结论后来又通过大学课程、开发板教程、老工程师传帮带不断强化,最终变成了一种“行业常识”。哪怕是现在,你去任何一个社区问“新手学嵌入式从哪门语言开始”,八成回答还是 C。这个建议本身没错,但它遗漏了一个关键变量:硬件已经变了。

1.2 现代芯片的资源早已不是当年的瓶颈

我们看几款当前最主流嵌入式芯片的实际资源。STM32F407,168MHz 主频,1MB Flash,192KB RAM;ESP32,240MHz 双核,4MB 起步的 Flash,520KB SRAM;RP2040,133MHz,2MB Flash,264KB RAM。这些芯片的价格已经压到了几块钱到十几块钱的区间,资源谈不上奢侈,但绝对说不上局促。

MicroPython 官方推荐的运行条件大约是 256KB Flash 和 64KB RAM,在这个配置下可以顺畅使用 REPL 和大部分外设接口。以现代 MCU 的资源水平来看,这个门槛早就被跨过去了。换句话说,Python 之所以能进入嵌入式领域,不是因为语言本身突然变强了,而是因为芯片厂商把“跑解释器所需的成本”从奢侈打成了白菜价。

这种变化带来的直接结果就是,嵌入式开发的选型逻辑开始分化。一部分项目仍然需要把每一字节 RAM 抠到极限,另一部分项目则开始追求“开发效率”——毕竟在一个 200MHz 的芯片上,Python 和 C 的运行速度差异对很多业务逻辑来说根本不构成瓶颈。

1.3 诚实的禁区:Python 在嵌入式里确实碰不了的角落

把话说回去,我也见过很多人一听说 Python 能做嵌入式,就直接拿它去做电机控制、飞控算法,结果被真实世界狠狠教育了一顿。Python 作为解释型语言,有几个天然短板是跑不掉的。

第一是实时性。解释器执行字节码的耗时不稳定,垃圾回收(GC)停顿可能随时打断你的循环,中断响应路径上做复杂的 Python 运算更是大忌。凡是需要微秒级确定性响应的场景——比如六轴陀螺仪姿态环、高速 PWM 控制、精确步进电机细分——Python 都不合适,这类活 C 或者汇编才是正道。

第二是低功耗。电池供电的设备要进入微安级深度睡眠,唤醒源、唤醒时间、功耗曲线都必须精确可控,Python 的运行时和对象模型会带来不可控的开销。你要在待机 10 微安的设备上硬跑 MicroPython,不是不能,而是要把大量精力花在“避开解释器”上面,那就失去用 Python 的意义了。

第三是高频数据采集。连续高速 ADC 吞吐依赖 DMA 和专用外设,Python 适合做“拿到数据之后怎么处理”的逻辑层,而不是“高频采样”的执行层。

我把这些边界清楚地写出来,不是为了泼冷水,而是为了让你知道 Python 真正的价值在哪儿。它的价值是当一个系统里相对灵活、逻辑复杂、需要快速迭代的那一层,而不是去抢内核驱动和硬实时那碗饭。

2. 单片机这一层:MicroPython 与 CircuitPython 的真实分量

2.1 Python 是怎么被塞进单片机里的

聊到单片机上的 Python,主角是 MicroPython。它不是简单把 CPython 从一个平台搬到另一个平台,而是针对资源受限环境重写实现的解释器。Python 源码会先被编译成字节码,再在虚拟机上执行。硬件相关的基础驱动,比如machine.Pinmachine.I2Cmachine.SPI,底层全是 C 实现的寄存器操作;你在 Python 侧调用这些接口时,实际上是在调用封装好的驱动 API。

这意味着两件事。第一,你不需要手工去配置寄存器和相位,开发速度大幅提升。第二,你要意识到 Python 侧并没有拿到“完全控制权”,底层寄存器级的能力取决于固件实现。

MicroPython 还有一个在嵌入式世界里堪称革命性的特性——REPL。板子烧好固件之后,通过 USB 串口连接,你可以直接敲一行 Python 就立刻看到输出。你甚至可以在程序运行过程中动态改行为。这种交互式开发体验,放在 C 语言的环境里是不可想象的:以前改一个参数要重新编译、烧录、复位,现在敲两下键盘就行。

2.2 芯片和开发板生态地图一览

先放一张我实际用过或者观察过的主流平台表,方便你对着选板子。

平台代表模块/开发板MicroPython 支持度CircuitPython 支持度典型用途
ESP32 / ESP32-S3 / ESP32-C3ESP32-DevKitC、合宙 ESP32-C3成熟部分型号Wi-Fi 物联网终端、传感器采集
RP2040 / RP2350Raspberry Pi Pico成熟成熟教育、原型验证、低成本控制
STM32Nucleo、Blue Pill (F103)支持主流型号偏弱工业原型、实验室设备
nRF52nRF52840 Dongle成熟成熟低功耗蓝牙设备
国产 RISC-V/MCU各类开发板视型号而定视型号而定低成本批量产品验证

我个人给新手的建议是:入门首选 ESP32 或者 RP2040。ESP32 自带 Wi-Fi/蓝牙,MicroPython 里一行代码就能联网,这对物联网类项目帮助巨大。RP2040 的优势是资料极其丰富、文档友好、价格低,而且 MicroPython 和 CircuitPython 对它支持都非常成熟。STM32 在工业场景使用多,但选板子之前一定要去官方文档确认你手上的具体型号是否被支持,我见过太多人买了一块很冷门的 STM32 板子,结果固件文档里根本没有对应支持。

2.3 一段可以立刻跑起来的真实代码

假设你手头有一块 ESP32,并且已经刷好了 MicroPython 固件(刷固件的方法我放到第 5 章细讲)。下面这段代码可以直接把温湿度传感器和 ADC 的读数打到终端上:

from machine import Pin, ADC from dht import DHT22 import time dht = DHT22(Pin(4)) # 数据线接 GPIO4 adc = ADC(Pin(34)) # 模拟量接 GPIO34 while True: dht.measure() mv = adc.read_uv() // 1000 print(f"temp={dht.temperature()} degC, " f"humidity={dht.humidity()}%, adc={mv}mV") time.sleep_ms(2000)

这段代码的效果就是每两秒打印一行温湿度加 ADC 电压值。用 C 写同样的功能,你至少要先翻 DHT22 的数据手册,手动对齐单总线时序,踩上几个时序坑,再处理各种边界条件,半天时间可能没了。而在 MicroPython 里,dht.measure()已经把底层时序封得干干净净。你要做的是把精力放在“采集之后的数据怎么用”上。

再比如连接 Wi-Fi 并请求一个 HTTP 接口:

import network, urequests, time wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect("你的SSID", "你的密码") for _ in range(20): if wlan.isconnected(): break time.sleep(0.5) if wlan.isconnected(): r = urequests.get("http://192.168.1.100:8000/status") print(r.status_code, r.text) r.close() else: print("wifi connect failed")

这个片段的价值在于:一块裸板从没有任何代码到“能上网请求接口”,总共不到十分钟。很多物联网原型验证项目,一半以上的开发时间就是省在这种环节上的。

2.4 什么项目我会爽快选 MicroPython,什么项目我会建议你掉头就走

我建议用 MicroPython 的场景大致有四类。

第一类是快速原型验证。电路设计好了,想验证传感器正不正常、I2C 地址对不对、通信时序是否稳妥,Python 改代码秒级生效,比一遍遍改 C 再烧录快一个量级。

第二类是小批量物联网终端。设备对功耗和实时性没有特别极端的要求,主要任务就是定时采集、通过 MQTT 上报、接收远程配置。脚本逻辑方便后期维护,团队不用养一群专门写裸机 C 的新人。

第三类是硬件在环验证,也就是用一个辅助板子去模拟某个串口或者网络设备的上位机。烧一个 MicroPython 脚本进去,很快就能把协议交互跑起来。

第四类是教育、比赛、个人爱好。不用解释,这是最舒适的区域。

反过来,如果你要做电机驱动、飞控、需要微秒级确定性输出的设备,或者终端是纽扣电池供电、要求微安级深度睡眠并且毫秒级唤醒的设备,那就别勉强。这些场景用 C 还不是因为“习惯”,而是因为确定性和功耗控制确实需要贴近底层。

3. 嵌入式 Linux 应用层:Python 最大的主场

3.1 这一层才是真正属于 Python 的地盘

很多人的嵌入式认知还停留在“一块裸板 + 一个下载器”的阶段,但工业现场里大量设备其实是嵌入式 Linux:内嵌在设备里的 ARM 处理器跑着一个裁剪过的系统,承担网关、边缘计算、人机界面等任务。硬件的典型形态是 ARM Cortex-A 系列处理器,内存从 256MB 到几 GB 不等,系统镜像由 Yocto、Buildroot 或者厂商 SDK 制作。

这一层里 Python 的应用可以说顺理成章。原因很简单:你有内存、有完整的文件系统、有进程和 systemd 服务管理、有网络协议栈、有海量第三方库。业务逻辑的复杂度和迭代速度都远超裸机开发,用 C 不是不能写,但很多时间会花在重复造轮子上面。

我的经验是给团队立一个分工原则:Linux 内核配置、设备树、驱动适配留给 C 和设备树文件;业务逻辑、数据采集、协议解析、上云交互用 Python。这个分工基本可以覆盖大多数嵌入式 Linux 产品的需求。

3.2 用户态怎么控制 GPIO、I2C、串口

在嵌入式 Linux 里操作 GPIO,老一代开发者习惯用 sysfs,就是朝/sys/class/gpio/export写数据那一套。现在内核推荐的接口是 libgpiod,对应的 Python 绑定库就是gpiod

import gpiod import time chip = gpiod.Chip("gpiochip0") line = chip.get_line(17) line.request(consumer="app-relay", request_type=gpiod.LINE_REQ_DIR_OUT) line.set_value(1) time.sleep(5) line.set_value(0) line.release()

这段代码从板子的第一个 GPIO 控制器拿到 17 号引脚,申请为输出,然后拉高 5 秒再拉低。底层驱动还是内核模块在干活,但用户态不再需要直接碰特权寄存器。需要注意 libgpiod 有 v1 和 v2 两种 API,上面这段是 v1 的写法,目前大多数嵌入式 Linux 镜像仍以 v1 为主,如果你拿到的是 v2 库,API 会略有变化。

I2C 设备用smbus2,串口用pyserial,SPI 用spidev,这些库在嵌入式 Linux 板上都能直接用。有个细节要提醒:在离线环境里,你要提前把 wheel 包装好移过去,而不是指望开发板在线 pip install。

3.3 边缘 AI 和物联网网关的真实形态

嵌入式 Linux 板上的 Python 有一个非常诱人的应用组合:工业协议解析加云端对接。举一个典型网关场景——通过 Modbus RTU 采集电能表数据,再用 MQTT 上报云平台:

import paho.mqtt.client as mqtt from pymodbus.client import ModbusSerialClient client = ModbusSerialClient(method="rtu", port="/dev/ttyS4", baudrate=9600) client.connect() rr = client.read_input_registers(0x0000, 4, slave=1) voltage = rr.registers[0] / 10.0 client.close() mqtt_client = mqtt.Client() mqtt_client.connect("broker.example.com", 1883, 60) mqtt_client.publish("factory/line1/meter", f"{voltage:.1f}") mqtt_client.disconnect()

这种“协议转换 + 数据上报”的活,在工业现场非常普遍。用 C 做当然可以做,但那些字节序处理、CRC 校验、超时重传、断线重连的代码写起来相当折磨人。Python 里因为生态成熟,半天就能把逻辑跑通。生产级别再补上异常处理、systemd 守护和日志轮转,就是一个合格的服务。

另一个让我觉得 Python 在嵌入式 Linux 上不可替代的领域是边缘 AI。在树莓派、Jetson、瑞芯微 RK3588 这类平台上,摄像头采集用 OpenCV,推理用 TensorFlow Lite 或者 ONNX Runtime,识别结果再走 MQTT/HTTP 上报。Python 几乎是这些 AI 框架的官方母语。硬件加速可能需要调底层 API,但业务编排全在 Python 侧完成,开发效率高得不是一点半点。

3.4 交叉编译和离线部署的经典坑

嵌入式 Linux 和 PC 开发最大的差异是目标架构不同。你在 x86 笔记本上编译一个带了 numpy 的 Python 环境,直接复制到 ARM 设备上,大概率报Illegal instruction。好不容易找到一个“通用 wheel”,又可能发现它依赖的 glibc 版本比设备上的系统版本还高。

我的建议是分两步走。第一步,尽量在目标设备上直接用系统包管理器安装依赖,Debian/Ubuntu 系的镜像用 apt 装 Python 包往往比自己编译省事得多。Yocto 的镜像则通过 SDK 或者镜像配方来集成 Python 包。第二步,如果必须离线部署,就在设备上把依赖全部下载好,做成本地 wheel 目录,部署时用:

pip install --no-index --find-links=/opt/wheels/ -r requirements.txt

OpenCV 是这里面的头号麻烦精。编译一次几个小时,依赖库体积动不动几百 MB。很多嵌入式 Linux 镜像并不自带完整版本,我建议优先用系统包管理器或者官方预编译轮子安装,非得自己编的时候,把模块裁剪到只剩需要的部分。

4. 上位机与工程流水线:容易被忽略却极其关键的 Python 位置

4.1 烧录、调试、固件管理里的 Python

很多人总以为嵌入式开发里的 Python 一定跑在板子上,其实大量重量级 Python 代码跑在你的 PC 上。这个位置虽然不显眼,却是整个团队效率的隐形支柱。

举个例子,用 Python 枚举当前连接的串口设备:

import serial.tools.list_ports for p in serial.tools.list_ports.comports(): print(p.device, p.description, p.hwid)

再写一个批量烧录 ESP32 的小工具,本质上是调用 esptool,但你可以把它封装成一次刷多块板子的脚本:

import subprocess import serial.tools.list_ports for p in serial.tools.list_ports.comports(): if "CP210" in p.description: subprocess.run([ "esptool.py", "--port", p.device, "write_flash", "0x0", "firmware.bin" ])

类似的还有 pyftdi 访问 FTDI 设备、pyusb 操作 HID 设备、pylink 连接 J-Link 调试器。你不必每次烧录调试都打开一个图形界面点按钮,而是可以把烧录、复位、自动检查回放全部写进脚本,甚至接入 CI 流水线。这一套做法对于需要频繁验证固件版本变化的团队来说,节省的时间非常可观。

4.2 产测自动化是我最想安利的一个方向

我在实际项目里感受最深的一个应用,是产线测试台自动化。很多硬件团队在开发阶段投入大量精力,到了产测环节却还在用最原始的人工方式:插上电源、看灯亮不亮、拿万用表量电压、在纸上记录结果。这种做法效率低,还特别容易漏检。

用 Python 搭产测台,流程可以完全程序化。

import pyvisa import serial # 串口与被测板通信 ser = serial.Serial("COM3", 115200, timeout=1) ser.write(b"AT+VER\r\n") version = ser.readline().decode().strip() assert version == "v2.1", f"version mismatch: {version}" # 万用表量输入电压 rm = pyvisa.ResourceManager() dmm = rm.open_resource("USB0::0x1AB1::0x0588::...::INSTR") dmm.write("MEAS:VOLT:DC?") voltage = float(dmm.read()) print(f"vin={voltage:.3f}V") assert 3.1 < voltage < 3.5, "voltage out of range"

实际产测脚本可以比这个复杂得多:通过可编程电源控制上电顺序,通过串口发指令校验模组返回,用 pyvisa 读取示波器和万用表数据,所有结果写进 CSV 并且给每块板子生成唯一序列号。这个环节做成自动化之后,整批产品的良率和故障记录瞬间数字化。我觉得有意做硬件的团队,不管产品多小,都应该把产测自动化列入计划,这比在开发阶段拼命压代码效率的回报大得多。

4.3 采集数据与可视化

串口数据可视化也是 PC 侧 Python 的常见任务。一种简单有效的做法是用 Python 读串口,把解析后的数据通过 WebSocket 推到浏览器,前端用 ECharts 画实时曲线;不想写前端的话,matplotlib 的动画模式也能凑合。

这类上位机工具做得越顺手,整个团队的调试效率就越高。因为你不再需要人肉盯着十六进制数据流猜含义,而是一眼就能看到传感器波形、协议字段、时间戳分布。这套“PC 上位机 + 板端日志”的组合,在我的项目里几乎是标配。

5. 从 Thonny 到 mpremote:实测顺手的开发工具链组合

5.1 编辑器和运行环境怎么选

工具链的选择,按两层来分,思路会比较清晰。

针对单片机层(MicroPython / CircuitPython),我实际用过且认可的工具有这些:

工具适用场景备注
Thonny编程新手、教育自带板子连接管理,REPL 和变量查看很直观
mpremote命令行爱好者文件同步、挂载、运行一条命令搞定
VS Code + MicroPico 插件VS Code 用户日常 MCU 开发有补全、烧录、REPL,接近现代 IDE 体验
Mu 编辑器CircuitPython 阵营轻量、开箱即用

针对嵌入式 Linux 应用层,我的方法很简单:VS Code 远程开发连上板子,代码直接改在设备上,配合 pdb 做断点调试,配合 systemd 做服务管理。这与 PC 开发的区别不大,真正要花心思的是日志和进程守护,而这些多数已经被 systemd 解决。

5.2 一个可以复制的日常开发循环

以 ESP32 为例,我推荐一套很顺滑的工作流。

第一步,在 VS Code 或 Thonny 里写代码。第二步,用 mpremote 把当前目录同步到板子并运行:

mpremote connect /dev/ttyUSB0 mount .

第三步,REPL 输出直接出现在终端,你实时看日志。第四步,改代码、保存,板子文件更新后新逻辑立即生效。验证完毕后把 main.py 固化进启动流程。需要软复位时直接:

mpremote reset

这个小命令省掉了我大量插拔 USB 线的时间。以前用 C 开发,改一次代码要经历编辑、编译、烧录、复位几道工序;现在从“改代码”到“看到新行为”只要几秒钟。这种循环速度上的差距,会在长周期开发里积累出惊人的效率差。

5.3 高频踩坑清单

这些坑我基本都是亲身踩过的,列出来给你避雷。

串口被占用是最常见的问题。Windows 下 COM 口被其他程序占用时,Python 打开串口会直接 Access denied,解决方案通常是找到那个占用的串口助手或者后台进程,把它关掉,或者在设备管理器里检查端口是否残留。

驱动缺失也很常见。ESP32 开发板上最常见的 USB 转串口芯片是 CP2102 和 CH340,这两个在 Win10 上偶尔需要手动安装驱动,macOS 上驱动路径又不完全一样。建议买板子时顺便确认主控芯片型号,提前把驱动装好。

USB 线质量是个容易被忽略的元凶。很多便宜线只能供电不能传数据,插上板子灯亮但刷不进固件。这种问题排查起来特别耗时间,所以我的习惯是固定用几根靠谱的数据线,不随意混用。

固件与文件系统残留也需要留意。同一块板子如果先后刷过 CircuitPython 和 MicroPython,建议在换固件前用esptool.py erase_flash清一下,否则可能出现文件系统残留导致的启动异常。

还有 Windows 中文路径问题。工程路径里带中文时,esptool 有过路径解析报错的记录,我现在的习惯是嵌入式工程一律放在纯英文目录下。

最后提一个与定时相关的坑:MicroPython 里用time.sleep做精确延时,多少会受到解释器循环和 GC 的影响,计时要求高的场景应该用machine.Timer这类硬件定时器,而不是靠软件延时凑合。

6. 可以直接套用的选型决策地图与入门路线

6.1 一张表格帮你判断该用哪种方案

看完前面这么多生态介绍,你可能会有点迷茫:道理我都懂了,但落到自己项目上到底该怎么选?我整理了一张决策表,你可以直接对照。

项目类型核心需求推荐路线理由
硬件原型 / 课设验证快速试错MicroPython on ESP32/RP2040改代码秒级生效,联调成本低
低功耗物联网终端长期电池供电C / 裸机为主,Python 做配置工具深度休眠和唤醒只有 C 可控
嵌入式 Linux 网关数据采集、协议转换、上云嵌入式 Linux + Python生态成熟,开发效率高
边缘视觉识别图像处理、AI 推理Linux 板 + Python + OpenCV/TFLiteAI 框架在 Python 侧最完善
硬实时控制微秒级确定性C/C++,Python 做测试辅助解释器做不到确定性
产测自动化多设备、报告输出Python on PCpyserial/pyvisa 生态成熟,报表方便
现有 C 产品升级稳定迭代保留 C 主体,Python 做上层策略层避免推倒重构风险

这张表背后的逻辑是:实时性要求越高、资源越紧,越往 C 走;逻辑复杂度越高、迭代越频繁、生态依赖越重,越往 Python 走。大多数项目并不是二选一,而是两者在一个系统里分工协作。

6.2 一条可执行的从零开始路线

如果你是新手,想真正动手验证 Python 嵌入式开发,我建议按下面这条路线走,每个阶段都能获得正向反馈。

第一步,买一块 ESP32-C3 或者 RP2040 开发板,烧好 MicroPython 固件,用 Thonny 连接,通过 REPL 让板载 LED 闪起来。这一步大概花一个晚上。

第二步,挑一个便宜的传感器,比如 DHT22 或者 BMP280,读取数据并在串口打印。这个阶段的目标是理解 Pin、I2C、SPI 这类抽象,不用急着去啃寄存器手册。

第三步,让板卡连上 Wi-Fi,向本地电脑启动的 HTTP 服务发送一两条数据。这一步能让你理解整个物联网链路:设备端采集、网络传输、服务端接收。

第四步,升级到一块能跑 Linux 的小板子,把 Python 程序部署成 systemd 服务,测试开机自启。到这一步,你已经进入嵌入式 Linux 应用开发的大门了。

第五步,倒过来回看整个过程,你会发现已经能自主判断一个项目应该用裸机 C、MicroPython 还是嵌入式 Linux 加 Python。这个能力比会写几个脚本值钱得多。

6.3 团队协作层面的务实建议

在团队里引入 Python,我建议采用渐进策略,不要动不动就喊“推翻重写”。

先从产测、上位机、原型验证这些对实时性要求不高的环节切入。这类工具直接在 PC 上运行,不碰产品代码,风险低,收益立竿见影。等团队在 Python 项目里积累了足够信心,再考虑把嵌入式 Linux 产品的业务逻辑层用 Python 封装,C 代码只负责驱动适配,两个小组可以并行开发。如果团队现有的 C 代码底座已经跑得很稳,完全没必要为了用 Python 而去重写,把 Python 当作增量模块加进系统反而控制住了风险。

最后说回我自己实际项目里的体会。我们一条小批量产线的测试系统,以前靠人工目检加 Excel 记录,每天下班后要花一小时整理数据。后来我用 Python 重写了一套产测脚本——串口发指令、万用表读数、CSV 自动归档、二维码关联序列号一次搞定。上线之后,整条产线的测试时间缩短了将近三分之二,数据准确率也高了一个级别。这件事给我最大的启发是,Python 在嵌入式领域的价值,更多时候不在“替代 C”上,而在把复杂劳动变成重复逻辑、把重复逻辑变成代码这件事上。你今天问 Python 能不能做嵌入式开发,我可以说:它早就已经在做了,而且做得越来越好。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询