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

树莓派3与Nextion HMI通过FT232通信按键响应延迟问题求助

优化方案:解决Nextion按键响应延迟问题

核心问题分析

你的代码采用ser.read(ser.in_waiting)读取所有缓冲数据,但Nextion的按键返回帧是固定7字节结构(0x65 + 组件ID + 事件类型 + 0x00 + 0xFF 0xFF 0xFF)。当串口数据分批次到达时,单次读取可能只拿到部分帧,导致程序需要等待后续字节凑齐完整帧才会匹配,这就是延迟的根源。而Arduino的Nextion库是按固定帧长读取,避免了这个问题。

具体优化措施

1. 固定读取完整帧长度

修改读取逻辑,每次读取固定7字节(Nextion按键事件帧的标准长度),确保拿到完整的响应帧:

import serial
import binascii

# 初始化串口,添加超时参数避免阻塞
ser = serial.Serial('/dev/ttyUSB1', 9600, timeout=0.1)

while True:
    # 等待凑齐完整的7字节帧再读取
    if ser.in_waiting >= 7:
        data = ser.read(7)
        hex_data = binascii.hexlify(data).decode('utf-8')
        if hex_data == '65010200ffffff':
            print("Button 1")
            # 此处调用你的目标函数
        elif hex_data == '65010300ffffff':
            print("Button 2")
        elif hex_data == '65010400ffffff':
            print("Button 3")

2. 优化串口参数配置

添加串口超时、关闭不必要的流控,减少通信等待:

ser = serial.Serial(
    port='/dev/ttyUSB1',
    baudrate=9600,
    timeout=0.1,  # 100ms超时,避免无限阻塞
    rtscts=False,
    dsrdtr=False
)

3. 简化数据匹配逻辑(可选,提升效率)

直接比较字节序列而非转成十六进制字符串,减少转换开销:

import serial

# 预定义按键对应的字节帧
BUTTON1_FRAME = b'\x65\x01\x02\x00\xff\xff\xff'
BUTTON2_FRAME = b'\x65\x01\x03\x00\xff\xff\xff'
BUTTON3_FRAME = b'\x65\x01\x04\x00\xff\xff\xff'

ser = serial.Serial('/dev/ttyUSB1', 9600, timeout=0.1)

while True:
    if ser.in_waiting >= 7:
        data = ser.read(7)
        if data == BUTTON1_FRAME:
            print("Button 1")
        elif data == BUTTON2_FRAME:
            print("Button 2")
        elif data == BUTTON3_FRAME:
            print("Button 3")

4. 平衡CPU占用与响应速度(可选)

在循环中添加短暂延迟,避免树莓派CPU空转:

import time

while True:
    if ser.in_waiting >= 7:
        # 读取和处理逻辑
    time.sleep(0.01)  # 10ms延迟,不影响响应速度的同时降低CPU负载

额外检查项

  • 确认Nextion显示屏的按键事件设置:确保按键的Touch Press事件为单次触发,而非长按触发(在Nextion编辑器的组件属性中调整)
  • 检查FT232接线:确认TX/RX交叉连接正确,电源供电稳定(电压不足可能导致通信延迟)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:30:25