Linux与RS485的串行通信

Linux与RS485的串行通信,linux,bash,communication,rs485,Linux,Bash,Communication,Rs485,我一直在尝试将字节(按顺序):2201、2211等发送到我的Arduino板,我已使用USB到RS485适配器将其连接到我的计算机 但是,当我将它连接到我的计算机时,每当我尝试使用命令echo 2>/dev/ttyUSB0将2201发送到我的Arduino时;echo 2>/dev/ttyUSB0;echo 0>/dev/ttyUSB0;echo 1>/dev/ttyUSB0,它有时工作,正常打开LED,但有时不工作,显示bash:/dev/ttyUSB0:Input/output error

我一直在尝试将字节(按顺序):
2201
2211
等发送到我的Arduino板,我已使用USB到RS485适配器将其连接到我的计算机

但是,当我将它连接到我的计算机时,每当我尝试使用命令
echo 2>/dev/ttyUSB0将
2201
发送到我的Arduino时;echo 2>/dev/ttyUSB0;echo 0>/dev/ttyUSB0;echo 1>/dev/ttyUSB0
,它有时工作,正常打开LED,但有时不工作,显示
bash:/dev/ttyUSB0:Input/output error


如果你有办法渡过难关,那就太好了。另外,请告诉我是否有比
echo X>/dev/ttyUSB0
更好的命令将数据发送到我的Arduino。我不熟悉串行通信,所以我不确定最好的方法是什么。

首先,一个问题:为什么要使用多个
echo
语句,而不是单个
echo 2201>/dev/ttyUSB0
?后者需要更少的打字

您的解决方案和我刚才提出的解决方案都存在一个问题,
echo
命令在其输出中附加了一个换行符。所以,如果我将输出直接指向一个文件;像这样:

echo 2 >afile; echo 2 >>afile; echo 0 >>afile; echo 1 >>afile
我最终得到一个包含以下内容的文件:

2\n2\n0\n1\n
这正是你发送的串口。您可以使用
-n
选项回显以抑制换行,因此:

echo -n 2201 > /dev/ttyUSB0
您最好使用shell以外的其他工具与串行端口进行交互。Python(带有
pyserial
模块)是一个不错的选择,但其他任何东西也是如此。如果您继续使用shell,那么还有一些其他stackexchange问题值得一看,例如和


如果您想以交互方式访问串行端口,有许多常用的应用程序可以提供帮助(screen、ckermit、picocom、moserial、minicom等)。

您没有回答我的问题,为什么会出现“输入/输出”错误。