串口通讯8N1:如何知道起始位和停止位格式?

问题描述 投票:0回答:1

我完全不熟悉串行通信,不幸的是,我有一个温度控制器,我想使用 python + pyserial 进行控制。

我设法通过 COM 端口连接到设备。现在我的下一个方法是通过serial.write命令设置新的温度。然而,什么也没有发生。

我的问题:

  1. 是否有可能我确实需要在“设置新温度”命令之前发送一个起始位并在之后发送一个停止位?
  2. 如果需要起始位/停止位,它通常是什么样子?
  3. 相应的起始位/停止位serial.write(„….“)命令是什么样的?

代码:

import serial

ser = serial.Serial()
ser.baudrate = 9600
ser.port = „COM3“
ser.timeout = 5
ser.stopbits = 1

ser.open()
#Serial<id=0x233e6e2e1a0, open=True>(port=„COM3“, baudrate=9600, bytesize=8, parity=„N“, stopbits=1, timeout=5, xonxoff=False, rtscts=False, dsrdtr=False)

ser.readline()
#b““
ser.write(bytes.fromhex(“01 06 00 00 00 69 49 E4“)) #<—- do i need to add start and stopbits here?

ser.readline()
#b““

到目前为止我尝试过的事情:

首先,我使用串行嗅探器并监控 COM 端口,同时利用制造商的软件来更改温度。嗅探器告诉我将温度更改为 10.5°C 的命令是:01 06 00 00 00 69 49 E4。

此外,嗅探器告诉我,当通过原始软件发送新温度时,它会返回并确认“十六进制代码”:01 06 00 00 00 69 49 E4。

当使用serial.write(bytes.fromhex(01 06 00 00 00 69 49 E4)) python与pyserial并随后使用serial.readline()时,它返回一个空字节。虽然我希望能拿回我的十六进制代码。最终温度设置应在设备显示屏上确认,但事实并非如此。

python serial-port pyserial
1个回答
0
投票

这是发送字节块以设置新温度的好方法。

import serial
import time

ser = serial.Serial('COM3', 9600, write_timeout=0)
time.sleep(3)

ser.write([0x01, 0x06, 0x00, 0x00, 0x00, 0x69, 0x49, 0xE4])

ser.close()

print("sent")

基本上,您正在发送十六进制字节列表。您不需要更改端口上的任何默认设置,例如停止位等。我在发送数据之前添加了 3 秒的暂停,因为我一直在使用 Arduino 对此进行测试,并且打开端口有不幸的一面 -重启Arduino的效果。所以你可能不需要那条线。

© www.soinside.com 2019 - 2024. All rights reserved.