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