首页 文章

Linux - 与RS485的串行通信

提问于
浏览
2

我一直在尝试将字节(按顺序): 22012211 等发送到我的Arduino板,我已经连接到我的电脑,使用USB转RS485适配器 .

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

Screenshot

如果你有任何办法解决这个问题,'d be great. Also, please let me know if there'比 echo X > /dev/ttyUSB0 更好的命令将数据发送到我的Arduino . 我'm new to serial communication, so I'我不知道最好的办法是什么 .

1 回答

  • -1

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

    您的解决方案和我刚刚提出的解决方案的一个问题是 echo 命令会在其输出中附加换行符 . 所以,如果我要将输出直接输出到文件;像这样:

    echo 2 >afile; echo 2 >>afile; echo 0 >>afile; echo 1 >>afile
    

    我最终得到一个包含以下内容的文件:

    2\n2\n0\n1\n
    

    并且's exactly what you'重新发送串口 . 您可以使用 -n 选项回显以抑制换行,因此:

    echo -n 2201 > /dev/ttyUSB0
    

    使用shell之外的其他东西与串口进行交互可能会更好 . Python(带有 pyserial 模块)是一个不错的选择,但其他任何东西都是如此 . 如果你继续使用shell,还有一些值得关注的其他stackexchange问题,例如this onethis one .

    如果您想要对串口进行交互式访问,可以使用许多常见的应用程序(屏幕,ckermit,picocom,moserial,minicom等) .

相关问题