bash - 在 bash 中将十六进制字节发送到串行

标签 bash command-line serial-port serial-communication

我可以使用 将 hec 字节发送到串口

stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
echo -en '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > /dev/ttyUSB0

但是当我尝试在从文件读取测试的循环中执行此操作时,它不想工作

#!/bin/bash
stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
while read line
do
    name=$line
    echo -en $name | tr -d ' ' > /dev/ttyUSB0
    sleep 0.04
done < $1

我这样调用脚本

./sendData.sh file.txt

file.txt 有一些像这样的简单内容

尝试 1

\\ xFF\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00

尝试 2

\xFF\xF2\x00\xFF\xF2\x00\xFF\xF2\x00\xFF\xF2\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF

谁能指出我缺少的东西。

最佳答案

问题是 read 默认解释转义序列,有效地删除了反斜杠。让你的文件包含例如\x01\x02\x03 并使用 read -r:

while read -r line
do
  echo -en "$line" > /dev/ttyUSB0
done < "$1"

关于bash - 在 bash 中将十六进制字节发送到串行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511225/

相关文章:

c++ - Arduino在重新连接到USB后不接收数据

c - 如何将来自 8 位 Controller 的串行数据转换为 asci 格式?

bash - 如何在我的 git 提交消息中提交代码块

go - Cobra 更改帮助模板中的用法行

python - 如何在命令行中将参数传递给文件并使用 python 更改文件中的字符串?

python - 如何确定 Python 脚本是否通过命令行运行?

python - 串口导入python

mysql - 如何将星号传递给 bash heredoc?

bash - 使用 Lua 脚本启用 bash 输出颜色

linux - 在 Bash 脚本中通过管道传入/传出剪贴板