当看到这一点东西时,不要觉得很简单,它也确实很简单,但对于一个初学者,或对sbus协议,或者串口通讯,还不太了解的人来说,这是非常困难的东西,
对于串口通讯, 一定要有一个数据帧的概念, 什么是数据帧, 通俗说就是一段数据,二进制的也好,十进制的也好,十六进制的也罢,总之就是一段数据,这段数据,在传输时是电平(电压也可能是频率)信号,反应成数字信号是就0和1,在程序中看到的,一般情况下就是十进制,也可能是转成的十六进制,这些数据表示了某种意思,比如,以什么数据开头,以什么数据结尾,一共有多少数据,数据内容的意义是什么,以及校验位等等, 而这些是提前规定好的, 也就是所谓的协议.
SBUS 数据帧通常包括 16 个通道的数据,其中前几个通道是用于摇杆的控制值(如左右摇杆的 X、Y 轴),
其余通道则可以对应到手柄上的开关和按键(如 SWA、SWB 等)。
为了获取所有按键和开关的状态,你需要解析更多的通道数据,并处理帧末尾的标志位。
SBUS 帧格式:
每个帧为 25 字节:
1 个字节的起始标志。
22 个字节的数据,表示最多 16 个通道(每个通道 11 位)。
1 个字节的标志位(表示丢失帧或故障标志)。
1 个字节的结束标志。
import serial
# 初始化串口
port = '/dev/ttyUSB0' # 根据实际串口设备修改
baudrate = 100000
ser = serial.Serial(port, baudrate, timeout=0.01)
def parse_sbus_frame(frame):
if len(frame) != 25:
return None