RS232 上的 DTR/RTS 可以用作 GPIO,来打开/关闭传感器吗?协议允许这种配置吗?

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

我想用这些线来打开/关闭传感器(5V 逻辑电平)。从 12V 到 5V 的转换将会完成,但我对协议有疑问。当这些线路通过程序控制时,UART/RS232 协议是否允许数据传输?我将使用 python 串行来实现这一点。

serial-port
2个回答
2
投票

我测试了带有 FTDI 芯片的 USB RS232 分线板,它工作得很好! 代码中的注释用于测试RTS状态变化期间是否可以进行通信。我使用 Arduino MEGA 来验证这一点,并且可以进行全双工通信。

import serial
import time
import sys

#rtccts should be set to False! Otherwise the output(Tx) stops after certain
#count(In this program after 86 print statements)

serPort = serial.Serial('/dev/ttyUSB0', 115200, timeout=1, rtscts=False, dsrdtr=False)

num = 0;
while True:
    try:
        #serPort.write((str(num)+"\n"))
        #print("Sent->" + str(num))
        #serPort.flushOutput()
        num = num + 1

        serPort.rts = 1
        #serPort.dtr = 1
        #print(serPort.readline())
        #serPort.flushInput()
        time.sleep(0.05)

        serPort.rts = 0
        #serPort.dtr = 0
        #print(serPort.readline())
        #serPort.flushInput()
        time.sleep(0.05)

    except KeyboardInterrupt:
        break

serPort.close()
sys.exit()

这是Arduino上的代码:

int val = 0;
int inPin = 7;
int ledPin = 13;
char incomingByte = 0;

void setup()
{
    Serial.begin(115200);
    pinMode(inPin, INPUT);
    pinMode(ledPin, OUTPUT);
}

void loop()
{
    static unsigned int num = 0;
    //  Serial.println(num);
    //  num++;
    delay(10);

    //  if (Serial.available() > 0)
    //  {
    // read the incoming byte:
    //    incomingByte = Serial.read();

    //    Serial.print("I received: ");
    //    Serial.println(incomingByte);
    //  }

    val = digitalRead(inPin);
    if(val == 0)
    {
        //Serial.println("LOW");
        digitalWrite(ledPin, 0);
    }
    else if(val == 1)
    {
        //Serial.println("HIGH");
        digitalWrite(ledPin, 1);
    }
}

1
投票

如果你的传感器设备不需要这些信号,并且对rts/dtr信号线的开/关时间精度没有要求,或者定时条件宽松的话,那就可以了。

在 PySerial 的 Serial 类 __init__ 中,除非您指定,否则默认情况下禁用信号线流控制。
pySerial API 类本机端口类serial.Serial

事实上,您可以将 rts 和 dtr 设置为所需的值。

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