如何使用Python+pyserial实现PC端控制RP2040(Pico)执行本地Python脚本
实现方案
方案1:沿用Pico本地存储脚本的思路
你只需要在Pico端新增一个开机自启的main.py常驻脚本,负责监听串口指令、匹配执行对应的本地文件即可,实现步骤如下:
- 把以下代码保存为
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)
- 微调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
相关产品推荐
相关产品推荐

