如何向串口发送数据并看到任何答案?

如何向串口发送数据并看到任何答案?

在Linux上,我想将命令字符串(即一些数据)发送到串行端口(包含控制字符),并监听响应(通常也可能包含控制字符)。

我怎样才能在 Linux 上尽可能简单地做到这一点?举个例子表示赞赏!

答案1

Unix 上的所有设备都映射到一个设备文件,串行端口将是 /dev/ttyS0 /dev/ttyS1...。

首先查看该文件的权限,假设您正在使用/dev/ttyS1.

ls -l /dev/ttyS1

您将需要读写访问权限,如果这是一个共享系统,那么您应该考虑向所有人开放它的安全后果。

chmod o+rw /dev/ttyS1

写入文件的一种非常简单粗暴的方法是使用简单的echo命令。

echo -ne '\033[2J' > /dev/ttyS1

并阅读

cat -v < /dev/ttyS1

您可以让 cat 在一个终端中运行,并在第二个终端中运行 echo。

如果一切都是乱码,那么波特率、位设置可能需要在开始发送之前设置。stty会那么做。 !!注意 stty 将使用 stdin 作为默认文件描述符来影响。

等效命令。

stty 19200 < /dev/ttyS1
stty 19200 -F /dev/ttyS1

这可能足以让您编写一些脚本并记录?不确定您想要实现什么目标。

为了更具交互性,请记住您的默认设置方法是使用 minicom它只是一个程序,它可以执行我到目前为止提到的所有操作。 (类似于 Windows 中的超级终端,您可能很熟悉)。

screen中间解决方案将使用可在串行设备上运行的终端程序。

screen /dev/ttyS1

man screen man minicom man stty了解更多信息

答案2

您所要做的就是打开两个终端。在第一个终端中,您可以cat从设备中获取所有内容,例如

cat /dev/ttyS0

在另一个终端中,您可以将任意十六进制字符和文本发送到终端,如下所示:

echo -e "\x7E\x03\xD0\xAF und normaler Text" > /dev/ttyS0

echo -e命令启用反斜杠转义的解释。

当然,必须确保(i)串行设置(速度、字长、流量控制等)正确,并且(ii)串行设备(另一端)没有阻塞。

答案3

与串行设备通信的程序:

picocom
minicom
socat

或者从 shell 你可以这样做:

stty -speed 19200 < /dev/ttyS0 # sets the speed of the port
exec 99<>/dev/ttyS0 (or /dev/ttyUSB0...etc)
printf "AT\r" >&99
read answer <&99  # this reads just a CR
read answer <&99  # this reads the answer OK
exec 99>&-

答案4

您可以同时读取和写入设备,如下所示:

cat /dev/cu.usbmodem411 & cat > /dev/cu.usbmodem411

cat您的消息从发送到第二个stdin,第一个cat将响应转发到stdout,将您的终端变成聊天室。

要完成, ,然后再次ctrl-c运行。fgctrl-c

相关内容