如何使用命令行从串口发送和接收数据?

如何使用命令行从串口发送和接收数据?

过去,我在Linux和Windows环境下使用c++和python进行串口通信。在Linux中,我还使用picocom、minicom和cutecom等程序进行串行通信,但现在我想使用简单的Linux命令读取和写入串行端口,不需要安装外部程序。我将在树莓派中使用这种方法与我的 Arduino 板进行通信。在下面的示例中,我使用 stty 来设置串行端口选项,并使用 echo 和 cat 命令从串行端口发送和读取数据,但最后,我没有看到任何输出,我已经阅读了此中的其他帖子与此相关的网站,但似乎没有什么对我有用。我可以使用 Cutecom 与 A​​rduino 进行通信,但是使用以下命令,我没有看到任何响应。

Linux(Ubuntu):

$ stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb
$ echo "1" > /dev/ttyUSB0 //send data
$ cat /dev/ttyUSB0

Arduino Mega代码供您参考:

#include <Arduino.h>

void setup() {
    Serial.begin(115200);
}

void loop() {

    if(Serial.available() > 0){
        Serial.println("[123,55,7777]");
    }
}

这里我发送 1 并得到 arduino 的响应: CuteCom 示例

这应该很简单,我向 Arduino 发送 1 个或任何字符,它应该在命令行中返回 [123,55,7777]。感谢任何形式的帮助和指导。

下面是我尝试过但没有返回任何数据的代码。

stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb  #CONFIGURE SERIAL PORT
exec 3</dev/ttyUSB0                     #REDIRECT SERIAL OUTPUT TO FD 3
  cat <&3 > /tmp/ttyDump.dat &          #REDIRECT SERIAL OUTPUT TO FILE
  PID=$!                                #SAVE PID TO KILL CAT
    echo -e -n "\x01" > /dev/ttyUSB0     #SEND COMMAND HEX 0x01 TO SERIAL PORT
    sleep 0.2s                          #WAIT FOR RESPONSE
  kill $PID                             #KILL CAT PROCESS
  wait $PID 2>/dev/null                 #SUPRESS "Terminated" output

exec 3<&-                               #FREE FD 3
cat /tmp/ttyDump.dat                    #DUMP CAPTURED DATA

谢谢

答案1

通常的问题是,当设备关闭时,它会重置回某些默认配置,因此您所做的任何更改都会丢失。持有打开的文件描述符可以避免这种情况。

像这样的东西(未经测试)

#!/bin/bash
# Keep the ttyUSB0 device open on fd 3
exec 3<>/dev/ttyUSB0
stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb
echo "1" >&3                 # send data
cat <&3                      # read the data

相关内容