You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python+pyserial实现PC端控制RP2040(Pico)执行本地Python脚本

实现方案

方案1:沿用Pico本地存储脚本的思路

你只需要在Pico端新增一个开机自启的main.py常驻脚本,负责监听串口指令、匹配执行对应的本地文件即可,实现步骤如下:

  1. 把以下代码保存为main.py,存入Pico的根目录:
import sys
import os

def execute_script(filename):
    try:
        if filename not in os.listdir():
            return f"ERROR: File {filename} not found"
        exec(open(filename).read(), globals())
        return f"SUCCESS: Executed {filename}"
    except Exception as e:
        return f"ERROR: Execute {filename} failed: {str(e)}"

while True:
    cmd = sys.stdin.readline().strip()
    if cmd:
        result = execute_script(cmd)
        print(result)
  1. 微调PC端的串口发送代码,发送文件名时增加换行符匹配Pico端的读取逻辑,同时可接收执行结果做状态判断:
import serial

ser = serial.Serial('COM3', 38400, timeout=2, parity=serial.PARITY_EVEN, rtscts=1)
print(ser.name)
# 发送文件名时增加换行符
ser.write(b'ToggleLED.py\n')
# 读取Pico返回的执行结果
response = ser.readline().decode().strip()
print(response)
ser.close()

你之前写好的所有功能脚本依然直接存在Pico根目录即可,不需要做任何修改。

方案2:脚本逻辑放PC端(更灵活的推荐方案)

如果后续需要频繁调整控制逻辑,不用把脚本都存在Pico端,可以把所有业务逻辑放在PC的GUI代码里,Pico仅做底层硬件操作的执行单元:

  • Pico端的main.py只保留基础的命令解析逻辑,比如封装GPIO读写、SPI/I2C寄存器操作、外设启停等你需要的底层能力,收到PC发来的单条指令就执行对应操作并返回结果
  • PC端GUI直接根据用户操作生成对应指令发送,不需要提前把所有场景的脚本烧录到Pico,调整功能时不需要更新Pico的存储内容,调试效率更高

Pico端极简命令解析器示例:

import sys
from machine import Pin, SPI

def handle_cmd(cmd_parts):
    try:
        if cmd_parts[0] == "SET_GPIO":
            pin_num = int(cmd_parts[1])
            level = int(cmd_parts[2])
            pin = Pin(pin_num, Pin.OUT)
            pin.value(level)
            return f"OK: GPIO{pin_num} set to {level}"
        elif cmd_parts[0] == "SPI_WRITE":
            # 可自行扩展你需要的SPI读写、射频芯片配置等操作
            data = bytes([int(x,16) for x in cmd_parts[1:]])
            spi = SPI(0, baudrate=10000000, sck=Pin(18), mosi=Pin(19), miso=Pin(16))
            spi.write(data)
            return "OK: SPI write done"
        else:
            return "ERROR: Unknown command"
    except Exception as e:
        return f"ERROR: Command failed: {str(e)}"

while True:
    cmd = sys.stdin.readline().strip()
    if cmd:
        cmd_parts = cmd.split()
        result = handle_cmd(cmd_parts)
        print(result)

内容的提问来源于stack exchange,提问作者SamiH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:36:01