linux - AT 命令与/dev/tty* 交换

标签 linux go at-command modem

我有一个板载 GPRS 的设备。 GPRS 与第三方应用程序连接并且可以正常工作。我需要知道连接的信号强度,所以,我使用 ATZ,然后是 AT+CSQ 命令。当我使用某些终端软件工作时,它可以工作。然后,我尝试使用 https://github.com/ishuah/bifrost软如终端。它也有效。但是我怎样才能简单地与设备通信,而不是使用终端,没有重新连接或连接中止等?

我简单地尝试了 echo ATZ >/dev/ttyX - 没有答案

    // This writes, but reads only zeros (((

    package main

    import (
        "github.com/jacobsa/go-serial/serial"
        "io"
        "log"
        "time"
        "fmt"
    )

    func Sleep(duration int) {
        time.Sleep(time.Second * time.Duration(duration))
    }

    func printBuf(b []byte){
        for _, val:=range b {
            fmt.Printf("%x ", val)
        }
    }


    func main(){

    options := serial.OpenOptions{
            PortName:              "/dev/ttyX",
            BaudRate:              115200,
            DataBits:              8,
            StopBits:              1,
            MinimumReadSize:       0,
            InterCharacterTimeout: 50,
        }

    port, err := serial.Open(options)
        if err != nil {
            log.Printf("port.Read: %v", err)
            return
        }

        // Make sure to close it later.
        defer port.Close()

    var s string  = `AT+CSQ`
    b:=[]byte(s)

    n, err := port.Write(b)
        if err != nil {
            log.Printf("port.Write: %v", err)
        }

    log.Println("Written bytes: ", n)

    //Sleep(1)

    res := make([]byte, 64)
        n, err = port.Read(res)
        if err != nil && err != io.EOF {
            log.Printf("port.Read: %v", err)
        }

    log.Println("READ bytes: ", n)


    printBuf(res)


    }

/*
I expect (for example):
---------
ATZ
OK
AT+CSQ
+CSQ 22.4
*/

最佳答案

大多数串行设备需要一个终止字符来响应它们收到的命令。

如果添加它,您的代码应该可以工作:

var s string  = `AT+CSQ\r`

我看不出您的代码与使用串行终端发送命令有任何其他区别。当您将命令直接回显到端口文件描述符时,同样适用。

关于linux - AT 命令与/dev/tty* 交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56882078/

相关文章:

linux - `du -sh` 对于同一文件夹在不同机器上产生不同结果

c - 如何在Linux中读取和更改内存中的值?

c# - ASP.NET vNext Kestrel + Windows 身份验证

mongodb - 如何等待副本追上主副本

unicode - 使用 AT 命令发送 Unicode (USC2) SMS

c++ - 如何解析 Arduino 串行监视器中的字符串?

c - 串口环回/双工测试,用 Bash 还是 C? (过程替换)

xml - 压缩文件夹最终会出错,具体取决于1个文件

gsm - 验证调制解调器是否支持来电显示

file - 无法覆盖文件内容