我有一个板载 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/