如何记录 USB 调制解调器 AT 命令输出?

如何记录 USB 调制解调器 AT 命令输出?

我希望能够每 5 秒向 /dev/ttyUSB1 发送一次命令“AT+CSQ”,并将响应记录到文本文件中。我可以通过屏幕手动执行此操作(屏幕 /dev/ttyUSB1 并输入 AT+CSQ 并查看响应),但我如何将其作为 bash 脚本执行?

答案1

下面是一个示例脚本,其中包含一些用于在脚本终止(命令trap)时进行记录和清理的逻辑。重要的技巧是保持串行端口的输入打开,否则端口关闭时的输入可能会丢失。

#!/bin/bash

LOGFILE=/var/tmp/modemlog
MODEM=/dev/ttyUSB1
MODEMCMD=AT+CSQ
INTERVAL=5

LOGDATE="date +%Y%m%dT%H%M%S"

# write command to modem
wrmodem () {
    echo -ne "$*"'\r\n' >"$MODEM"
    log "--- sent: $*"
}

# log message to a logfile
log () {
    echo "$($LOGDATE) $@" >>"$LOGFILE"
}

# logger
{
    trap 'log "=== logger stopped $BASHPID"' EXIT
    log "=== logger started: $BASHPID"
    while true ; do
        if read ; then
            log "$(tr -d \\r <<<"$REPLY")"
        fi
    done
} <"$MODEM" &

LOGGERPID=$!
trap 'kill $LOGGERPID' EXIT

# requester
while true ; do
    wrmodem "$MODEMCMD"
    sleep $INTERVAL
done

答案2

expect工具就是为此类任务而设计的。man expect将帮助您入门。

相关内容