是否可以使用Linux机箱上的COM端口来读取交换机的值?我认为应该可以使用ioctl(),但我已经努力寻找一个类似的例子。我只需要一个输入,只需要它以高/低值读取。我以为我可以使用ioctl将其中一个引脚设置为高电平,并在该引脚和另一个引脚之间连接一个开关,再次使用ioctl读取第二个引脚的值()
理由是我在车库里有一个值得信赖的旧服务器,我想做一些会发出哔哔声并告诉车库门是否打开的东西,因为服务器就在门旁边,我想只需将一个开关连接到com端口的后面(当前未使用)
即可当然,我可以花几块钱,让自己头疼并使用arduino或ESP8266,但这让我很好奇!
答案 0 :(得分:5)
是的,确定你可以这样做。串行端口上有许多行可用作GPIO。其中一个(我认为在pin9上)是RING,它用于旧的串行模式以发出来电信号。
你可以这样读:
unsigned mask = TIOCM_RNG;
unsigned status;
int fd; // your serial port file descriptor.
/* Get current status of the control lines in mask */
if (ioctl(fd, TIOCMGET, &status) == -1) {
perror("ioctl(TIOCMGET)");
}
/* now evaluate status */
您还需要生成可应用于环形线的电压。一种廉价的方法是传输一些交替比特流。例如。以任何波特率发送0x55。
然后您可以点击TX引脚的电压。使用两个二极管分离正电压和负电压,并使用两个电容缓冲它们。这将为您提供与环线兼容的正负电压。
这是应该有效的示意图。调整二极管和电容器的味道,但不要对电容器发疯。 10μF应该是最大值。