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

Micro:Bit与Python串口通信出现字符丢失问题求助

解决micro:bit串口向Python发送数据丢包问题

问题分析

当前Python串口接收存在字符丢失,比如预期的1000变成100、000,核心原因是串口参数配置不全、超时设置缺失,同时代码存在未定义变量的错误。

修复步骤

1. 修复Python代码的未定义变量错误

原代码中paused变量未初始化,直接运行会抛出NameError,先添加初始化代码:

import serial
import time

paused = False  # 新增:初始化暂停状态
ser = serial.Serial()
counter = 0

# Set the serial port and baud rate
ser.port = '/dev/tty.usbmodem14102'
ser.baudrate = 115200

2. 完善串口核心参数配置

默认serial.Serial()仅设置端口和波特率,缺少超时、数据位等关键参数,参数不匹配会直接导致丢包。修改串口初始化部分:

ser = serial.Serial(
    port='/dev/tty.usbmodem14102',
    baudrate=115200,
    timeout=1,  # 设置1秒超时,避免无限阻塞
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    xonxoff=False,  # 关闭软件流控
    rtscts=False    # 关闭硬件流控
)

3. 优化数据读取逻辑

MakeCode的serial.writeLine默认发送\r\n作为换行符,需明确指定Python串口的换行匹配规则,避免数据截断:

ser.newline = '\r\n'  # 匹配micro:bit的换行格式

while True:
    if not paused:
        data = ser.readline().decode('utf-8').strip()
        if data:  # 仅打印非空有效数据
            print(data)
    else:
        print('Nothing Coming this way....')
        time.sleep(0.5)

4. 可选:优化micro:bit发送逻辑

确保每次发送固定长度的字符串,便于校验完整性,修改MakeCode的JavaScript代码:

serial.writeLine(`${p5}${p6}${p7}${p8}`)
// 替代原拼接方式,确保输出始终为4位字符

额外验证方案

如果修改后仍存在丢包:

  • 尝试降低波特率至9600测试(高波特率在部分串口设备上兼容性较差)
  • 检查macOS串口权限:通过ls -l /dev/tty.usbmodem14102查看设备权限,确保当前用户拥有访问权限,必要时将用户添加至staff组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:40:26