장치에 올바른 읽기 쓰기 권한이 있어야합니다. 다음과 같이 볼 수 있습니다.
$ls -l /dev/[serial device]
나는 당신이 찾은 스크립트에 의존하고 약간 수정했습니다.
지금까지 사용한 개발 시스템에는 다음이 필요했습니다.
이 값은 스크립트의 기본 값입니다.
따라서 연결하려면 다음과 같이 간단하게 사용할 수 있습니다.
./connect.sh /dev/[serial device] [baud speed]
예:
$./connect.sh /dev/ttyUSB0 19200
스크립트:
#!/bin/bash
# connect.sh
#Taken from example modified by: ihatetoregister
# On stack exchange, thread:
# http://unix.stackexchange.com/questions/22545/how-to-connect-to-a-serial-port-as-simple-as-using-ssh
# Modified by Rafael Karosuo <rafaelkarosuo@gmail.com>
# - parity enabling and amount of stop bits
# - no execution without minimum params
# - exit code for stty
# - bgPid fix, used $! instead of $? to take the PID of cat proc in background.
# - exit command to end the program
# - CR termination and strip of NL added by READ command, in order to make $cmd\r\n format instead of \n$cmd\n
# Usage:
# $./connect.sh <device> <port speed> [# Stop bits] [parity]
# Stop bits 1|2
# Parity even | odd
# If no last two params, then default values stopbits=1, parity=disab
# Example:
# connect.sh /dev/ttyS0 9600 1 even, this will use 1 stop bit and even parity
# connect.sh /dev/ttyS0 9600, this will take default values for parity and stopbit
#Check if at least port and baud params provided
if [ -z "$1" ] || [ -z "$2" ]; then
printf "\nusage: ./connect.sh <device> <port speed> [# Stop bits 1|2] [parity even|odd]\n\tNeed to provide at least port and baud speed parameters.\n\texample:connect.sh /dev/ttyS0 9600\n\n"
exit 1;
else
case "$3" in
2) stopb="cstopb";;
*) stopb="-cstopb";;
esac
if [ "$4" = "even" ]; then
par="-parodd"
elif [ "$4" = "odd" ]; then
par="parodd"
else
par="-parity"
fi
printf "\nThen stty -F $1 $2 $stopb $par\n";
fi
# Set up device
stty -F "$1" "$2" "$stopb" "$par" -icrnl
# Check if error ocurred
if [ "$?" -ne 0 ]; then
printf "\n\nError ocurred, stty exited $?\n\n"
exit 1;
fi
# Let cat read the device $1 in the background
cat -v "$1" &
# Capture PID of background process so it is possible to terminate it when done
bgPid="$!"
# Read commands from user, send them to device $1
while [ "$cmd" != "exit" ]
do
read cmd
echo -e "\x08$cmd\x0D" > "$1" #strip off the \n that read puts and adds \r for windows like LF
done
# Terminate background read process
kill "$bgPid"
추신 : 수신기 시스템을 사용하는 종류의 줄 바꿈을 알아야합니다.이 경우 내 명령에서 어떻게 명령을 보내야하는지 결정하기 때문에 LF와 같은 Windows가 필요합니다.
command\r
다음에 대한 ASCII 값 :
- LF : 0Ah, 줄 바꿈 "\ n"
- CR : 0Dh, 캐리지 리턴 "\ r"
- BS : 08h, 백 스페이스 "<-"