【问题标题】:Moving Sign Communication Protocol v1.2 with Raspberry Pi带有树莓派的移动标志通信协议 v1.2
【发布时间】:2015-01-12 08:43:12
【问题描述】:

这是我在这里的第一篇文章,如果有些问题可能超出范围,请原谅我,但基本上我正在尝试编写自己的程序,通过串行通信将消息从 Raspberry Pi 推送到 LED 滚动标志(USB on Pi -> RS232 适配器 -> LED 标志)。

我一般对串行通信不是很熟悉,但我正在尝试以移动符号协议 V1.2 (http://www.brgprecision.com/pdffiles/Protocol12.pdf) 的格式在 Pi (http://pyserial.sourceforge.net/pyserial.html) 上使用 PySerial 库。

到目前为止,这是我的 python 代码,没有错误,但插入的标志没有收到任何数据。

import serial
#default port is /dev/tty/USB0
#portname, baudrate, timeout
port = serial.Serial('/dev/ttyUSB0', 9600)
port.open()    port.write('0x00\0x01\"FF"\"03"\0x02\'A'\'A'\'A'\'2'\'2'\'7F'\'0100'\'1200'\'000'\'1'\"OMFG"\0x03\"0564"\0x04')
port.close()

基本上,我不知道如何解析我试图写入正确串行数据包的消息。我是否像上面一样一次性发送协议和短信?或者我必须解析每个字段并分别发送它们:

port.write('01')   # start of head
port.write('46')   # pc address
port.write('46')   # number 1 display

ect...

我应该提一下,我还嗅探了我 PC 上的 USB 串行通信,并且可以确认此串行信息是正确的,我只是不知道如何在 RPi 上使用它。任何帮助将不胜感激!

【问题讨论】:

    标签: python linux serial-port raspberry-pi


    【解决方案1】:

    你想使用字节

    0x00 == 0 == "\x00" 
    

    这与"0x00" 不同,"\x30\x78\x30\x30" 是 4 个字符,而不是您希望实现的单个字节

    所以发送A部分

    ser.write("\x00"*5) # 5 null bytes
    

    发送 SOH 部分

    ser.write("\x01")
    

    我不确定地址是什么……但希望能给你一个想法

    【讨论】:

    • 谢谢 Joran,因为您对字节格式的见解(特别是每次再见前的 \x 前缀)我已经成功地与我的标志沟通。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2022-10-08
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多