我想用这些线来打开/关闭传感器(5V 逻辑电平)。从 12V 到 5V 的转换将会完成,但我对协议有疑问。当这些线路通过程序控制时,UART/RS232 协议是否允许数据传输?我将使用 python 串行来实现这一点。
我测试了带有 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);
}
}
如果你的传感器设备不需要这些信号,并且对rts/dtr信号线的开/关时间精度没有要求,或者定时条件宽松的话,那就可以了。
在 PySerial 的 Serial 类 __init__ 中,除非您指定,否则默认情况下禁用信号线流控制。
pySerial API 类本机端口类serial.Serial
事实上,您可以将 rts 和 dtr 设置为所需的值。