在bash中将十六进制字节发送到串行
我能够使用以下命令将hec字节发送到串行端口在bash中将十六进制字节发送到串行,bash,command-line,serial-port,serial-communication,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
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
txt有一些类似这样的简单内容
./sendData.sh file.txt
试试1
试试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
并使用读取-r
:
while read -r line
do
echo -en "$line" > /dev/ttyUSB0
done < "$1"
读取时-r行
做
echo-en“$line”>/dev/ttyUSB0
完成<“$1”
echo
很棘手,请尝试printf
或像xxd
或hextump
@tripleee这样的专用十六进制转换工具。您能推荐任何示例来尝试吗?printf“%s\n”“$line”
?祝你好运。@Sheller不起作用:(如果你收到错误消息,最好编辑你的问题以包含该信息。最好说明你将如何知道它起作用。这耗尽了我的知识(没有)关于与/dev/USB*
通信。我无法调试那里发生的事情。祝你好运!它成功了。只是一个小小的修改。我不得不使用echo-en$行(不带引号)请编辑它以防有人碰到它。不应该是这样。你能做读取-r行<“$1”echo-en$行| od-t x1-c;echo-en吗“$line”| od-t x1-c;
和post输出?两者都给出相同的输出。在这里输入输出有点长。但是奇怪的是,序列号只得到了正确的输出,没有引号。抱歉,我只是重复检查了一下。两个都有效!我的代码中有一个输入错误。
while read -r line
do
echo -en "$line" > /dev/ttyUSB0
done < "$1"