首页 > 解决方案 > 使用 cat 和 echo 写入 /dev/ttyUSB0

问题描述

我使用 cat 和 echo 读写 USB 串行设备。

# shell session 1
echo "send to device" >/dev/ttyUSB0

# shell session 2
cat /dev/ttyUSB0

如果我手动执行此操作,则效果很好。运行脚本时,echo 命令通常会丢失字符串的前 1-4 个字符,而设备只接收其余字符

示例:设备通常会收到“nd to device”

有人可以给我一个提示,为什么会这样?

标签: bashusbtty

解决方案


严格来说,这绝对不是解决方案,但在有更好的解决方案之前,我会延迟并逐个字符地缓慢发送。这样就可以了。

每个字符超过 0.1 秒就会变得不稳定。

我正在使用 Windows 10 WSL1

command=""
command+="command one to deliver$"
command+="command two to deliver$"
command+="command three to deliver$"
command+="command four to deliver$"

local loopindex=$command
for ((i = 0; i < ${#loopindex}; i++)); do
    if [[ ${loopindex:$i:1} = "$" ]]; then
        echo "debug: newline"
        echo "" >/dev/ttyUSB
    else
        echo "debug: char=${loopindex:$i:1}"
        echo -n "${loopindex:$i:1}" >/dev/ttyUSB
    fi
    sleep 0.1
done

推荐阅读