首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >树莓PI 3、SerialPort与奇异反应

树莓PI 3、SerialPort与奇异反应
EN

Stack Overflow用户
提问于 2017-11-04 01:33:34
回答 1查看 285关注 0票数 1

我正试图用串口控制我的旧三星DLP SP-A600B (杰克)。为了做到这一点,我已经恢复了我的Raspberry Pi 3,并插入了我在网络上找到的USB到Jack电缆(UART)。

我制作了一个小Python文件,但我不明白我正在接收的输出。这是我的密码:

代码语言:javascript
复制
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
  • 流量控制:无

串行通信协议

  1. 命令包结构7字节
    • 一个命令包总共由7个字节组成。
    • 两个字节0x08和0x22表示数据包用于串行通信。
    • 以下4个字节表示可以由用户定义的预定义命令.
    • 最后一个字节是校验和,它检查当前数据包的有效性。
    • 头2字节:预定义值固定在0x08和0x22。
    • Cmd1 1字节:命令列表中定义的代码的第一个值(十六进制)
    • Cmd2 1字节:命令列表中定义的代码的第二个值(十六进制)
    • Cmd3 1字节:命令列表中定义的代码的第三个值(十六进制)
    • 值1 Byte:命令的输入参数(默认值: 0) (十六进制)
    • Cs1Byte:校验和(除CS值外,所有值之和的2的补充)。

  1. 响应数据包结构3字节
代码语言:javascript
复制
1. Success

0x03 0x0C 0xF1

代码语言:javascript
复制
1. Fail

0x03 0x0C 0xFF

我使用这个网站来计算第七个字节(D6)的2的补码(我更多的是NodeJS / Android )。不幸的是,我只收到

代码语言:javascript
复制
0x03 0x0C 0x7F

为了这个命令。如果我试图设置像serial.PARITY_ODD或serial.EIGHTBITS这样的奇怪值,就会收到失败的数据包。

代码语言:javascript
复制
0x03 0x0C 0xFF

而我没有成功地收到一个成功的包裹。任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-04 21:06:37

正如我们最终在注释中指出的那样,问题是命令字符串中有多余的逗号,数据需要为8位。

因此,具体而言,请使用:

代码语言:javascript
复制
bytesize=serial.EIGHTBITS
...
...
ON = b"\x08\x22\x00\x00\x00\x00\xD6" 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47106515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档