我试图用串行端口(插孔)控制我的旧Samsung DLP SP-A600B。为此,我已经重新使用了我的Raspberry Pi 3,并且我已经在网上插入了USB到Jack电缆(UART)。
我制作了一个小的Python文件,但我不理解我收到的输出。这是我的代码:
import time
import serial
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.SEVENBITS
)
ON = b"\x08,\x22,\x00,\x00,\x00,\x00,\xD6"
# other hard-coded commands
ser.write(ON)
time.sleep(1)
out = ser.read(3)
# 0x03 0x0C 0x7F doesn't match the spec!
print out
ser.close()
5-2 RS-232C命令表
通信格式(符合RS232C标准)
- 波特率:9,600 bps
- 胎次:无
- 数据位:8,停止位:1
- 流量控制:无
串行通信协议
- 命令包结构[7bytes]
- 命令包总共包含7个字节。
- 两个字节0x08和0x22表示该数据包用于串行通信。
- 以下4个字节表示可由用户定义的预定义命令。
- 最后一个字节是校验和,用于检查当前数据包的有效性。
- 标题[2 Byte]:预定义值固定为0x08和0x22。
- Cmd1 [1 Byte]:命令列表中定义的代码的第一个值(十六进制)
- Cmd2 [1 Byte]:命令列表中定义的代码的第二个值(十六进制)
- Cmd3 [1 Byte]:命令列表中定义的代码的第三个值(十六进制)
- 值[1 Byte]:命令的输入参数(默认值:0)(十六进制)
- CS [1 Byte]:校验和(除了CS值之外的所有值之和的2的补码。)
- 醇>
响应数据包结构[3字节]
- 成功
醇>0x03 0x0C 0xF1
- 故障
醇>0x03 0x0C 0xFF
我使用这个website来计算第7个字节(D6)的2的补码(我更多的NodeJS / Android人)。不幸的是,我只收到
0x03 0x0C 0x7F
用于此命令。如果我尝试设置serial.PARITY_ODD或serial.EIGHTBITS等奇怪的值,我会收到失败的数据包
0x03 0x0C 0xFF
我没有成功收到一个成功的数据包。任何帮助将不胜感激!
答案 0 :(得分:1)
正如我们最终在评论中解决的那样,问题是命令字符串中有多余的逗号,数据需要是8位。
因此,具体而言,请使用:
bytesize=serial.EIGHTBITS
...
...
ON = b"\x08\x22\x00\x00\x00\x00\xD6"