【问题标题】:Sending and reading ASCII values in pySerial在 pySerial 中发送和读取 ASCII 值
【发布时间】:2013-01-07 14:26:59
【问题描述】:

我正在尝试与使用 python 和 pySerial 以 ASCII 格式进行通信的秤进行通信。我从来没有使用过 ASCII 格式的经验。所以我有基本的问题。 例如,我将如何使用 pySerial 发送一个字符 T 并使用 ASCII 格式使用 CRLF 终止它? 我试过了

 myserialport.write('TCRLF')
 myserialport.write('T\r\n')
 myserialport.write('T\n\r')

我还尝试从我希望以“208.01 g”的形式读取的数据。但是当我使用

myserialport.read(10)

或

myserialport.readline(10)

我从秤上得到这个

]ëýýÿ]W
ÿ]u_u]ÿ]uÕ
ýWýWë]uÝõW
ÿ½õÿ½WW]Ýý
WýW]Wÿ½ÿ×ë

从谷歌搜索看来,pySerial 默认情况下应该接收 ASCII 格式的数据,并发送它......但我不知道它为什么不工作。任何帮助将不胜感激。

【问题讨论】:

  • 很可能是你的速度(波特率)不对
  • scale 和 pySerial 都设置为 9600。我一开始也是这个问题,所以我尝试了 2400 但没有运气
  • 检查它是否可以从超级项运行,并且您的速度/位/停止/奇偶校验设置正确
  • 有一条新电缆。现在我可以通过超级终端发送和读取秤上的数据。但pyserial没有运气。我尝试使用这个命令 myserialport.write('T\r\n') 发送它,但没有得到规模的响应。有什么想法吗?

标签: python pyserial


【解决方案1】:

这是将带有 CRLF 的字符发送到串口的正确方法:

myserialport.write('T\r\n')

关于混乱响应 - 确保正确设置波特率、数据位数、停止位和奇偶校验位。您可以在秤的数据表中找到所需的值。

例如:

from serial import Serial, SEVENBITS, STOPBITS_ONE, PARITY_EVEN
myserialport = Serial('/dev/ttyS0', baudrate=9600, bytesize=SEVENBITS, parity=PARITY_EVEN, stopbits=STOPBITS_ONE)

【讨论】:

  • 因为他们是打印扩展的 ascii 字符,我猜他们的数据/停止位的数量是错误的
  • 嗯,谢谢。我将仔细检查停止位和 paratiy 位是否设置正确。现在我将它作为 serial.Serial(portnum,9600,bytesize=8,parity='N',stopbits=1,timeout=5) 并将比例设置为相同的设置。如果我不能让它工作,那可能是秤的硬件或软件问题。
【解决方案2】:

问题是 USB 到串行转换器的接地连接(引脚 7 需要接地)。如果您有同样的问题,请检查您的引脚。 (Fisher Scintific 秤使用引脚 7 作为接地,这是不正常的,因为引脚 5 接地......奇怪......)谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 2013-01-17
    • 2013-02-08
    • 2021-01-07
    • 2021-01-04
    • 2016-12-14
    • 2021-04-30
    • 1970-01-01
    相关资源
    最近更新 更多