如何用Python通过串口向microbit发送变量(含整数列表)?
解决microbit串口接收并处理Python发送数据的问题
一、先修正microbit端的代码逻辑
你之前的代码有两个核心错误:
colour == 0是比较运算符,不是赋值语句,正确写法是colour = 0- 缺少串口输入监听逻辑——microbit根本没读取你从TeraTerm发送的内容
下面是能持续监听串口、解析整数列表的microbit代码:
from microbit import * import serial # 重定向串口到USB serial.redirect_to_usb() while True: # 读取串口一行完整数据(直到换行符) incoming = serial.readline() if incoming: try: # 把字节数据转成字符串,去掉首尾空白后按逗号分割为整数列表 num_list = list(map(int, incoming.decode().strip().split(','))) # 验证是否为三个整数 if len(num_list) == 3: val1, val2, val3 = num_list # 这里可添加你的业务逻辑,比如根据数值执行对应操作 display.scroll(f"{val1},{val2},{val3}") if val1 == 1: display.show(Image.HAPPY) except ValueError: # 解析失败时显示错误提示 display.show(Image.SAD) sleep(100)
二、Python端发送数据的实现
使用pyserial库完成串口通信,先安装依赖:
pip install pyserial
编写发送代码时,注意替换为你的microbit对应的串口端口(Windows为COMx,Mac/Linux为/dev/tty.usbmodemxxxx):
import serial import time # 初始化串口,波特率与microbit保持一致(默认115200) ser = serial.Serial('COM3', 115200, timeout=1) time.sleep(2) # 给microbit预留启动时间 # 待发送的三个整数列表 target_data = [255, 127, 0] # 转成逗号分隔的字符串并添加换行符(匹配microbit的readline读取逻辑) send_content = ','.join(map(str, target_data)) + '\n' # 编码为字节后发送 ser.write(send_content.encode()) print(f"已发送数据: {target_data}") ser.close()
三、关键注意事项
- 串口参数必须一致:microbit默认波特率为115200,Python端需保持相同配置
- 数据格式约定:用逗号分隔整数、末尾加换行符,确保microbit能完整读取单条数据
- 错误处理:microbit端加入异常捕获,避免解析无效数据导致程序崩溃
内容的提问来源于stack exchange,提问作者T3CHN0BL4ST
相关产品推荐
相关产品推荐

