Answers:
Unix上的所有设备都映射到设备文件,串行端口为 /dev/ttyS0
/dev/ttyS1
...。
首先查看该文件的权限,假设您正在使用/dev/ttyS1
。
ls -l /dev/ttyS1
您将需要读写访问,如果这是一个共享系统,则应考虑对所有人开放的安全性后果。
chmod o+rw /dev/ttyS1
一种非常简单的写入文件的粗略方法,将使用简单echo
命令。
echo -ne '\033[2J' > /dev/ttyS1
并阅读
cat -v < /dev/ttyS1
您可以让Cat在一个终端中运行,并在第二个终端中回显。
如果一切都是乱码,那么波特率,位设置可能需要在开始发送之前进行设置。stty
会做到的。!! 注意stty将使用stdin作为默认文件描述符来影响。
等效命令。
stty 19200 < /dev/ttyS1
stty 19200 -F /dev/ttyS1
这可能足以让您编写脚本并登录?不确定您要达到的目标。
对于更具交互性的内容,请记住您的默认设置方法是使用
minicom
它只是一个程序,该程序可以完成我到目前为止提到的所有事情。(类似于Windows中的超级终端,您可能很熟悉)。
一个中间解决方案,将使用screen
将在串行设备上运行的终端程序。
screen /dev/ttyS1
man screen
man minicom
man stty
想要查询更多的信息
# stty -speed 38400 -f /dev/ttyUSB1
返回stty: invalid argument '-speed'
您所要做的就是打开两个终端。在第一个终端中,您可以cat
从设备中获取所有信息
cat /dev/ttyS0
在另一个终端中,您可以向终端发送任意十六进制字符和文本,例如,如下所示:
echo -e "\x7E\x03\xD0\xAF und normaler Text" > /dev/ttyS0
该echo -e
命令启用反斜杠转义的解释。
当然,必须确保(i)串行设置(速度,字长,流量ctrl等)正确,并且(ii)串行设备(在另一端)没有阻塞。
与串行设备通信的程序:
picocom
minicom
socat
或从shell可以执行以下操作:
stty -speed 19200 < /dev/ttyS0 # sets the speed of the port
exec 99<>/dev/ttyS0 (or /dev/ttyUSB0...etc)
printf "AT\r" >&99
read answer <&99 # this reads just a CR
read answer <&99 # this reads the answer OK
exec 99>&-
exec 99<&-
或者exec 99>&-
应该使用。还是两者都有?
这可能是一个更好的方法:
stty -F /dev/ttyUSB0 115200 raw -echo #CONFIGURE SERIAL PORT
exec 3</dev/ttyUSB0 #REDIRECT SERIAL OUTPUT TO FD 3
cat <&3 > /tmp/ttyDump.dat & #REDIRECT SERIAL OUTPUT TO FILE
PID=$! #SAVE PID TO KILL CAT
echo "R" > /dev/ttyUSB0 #SEND COMMAND STRING TO SERIAL PORT
sleep 0.2s #WAIT FOR RESPONSE
kill $PID #KILL CAT PROCESS
wait $PID 2>/dev/null #SUPRESS "Terminated" output
exec 3<&- #FREE FD 3
cat /tmp/ttyDump.dat #DUMP CAPTURED DATA