首页 > 解决方案 > gps模块停止输出信息

问题描述

为了尽可能简洁,我连接到由 multitech 制造的 telit ME910c1-nv 套接字调制解调器。这并不真正相关,但我知道有人会认为这个问题与硬件有关,但实际上并非如此。

该设备有一个 4g cat m-1 调制解调器和一个内置的 gps 模块。我通过 UART 将它们连接到树莓派。

问题是当我发送 AT 命令来获取 GPS 位置时,最终模块将停止发送和/或我的代码无法再从串行端口读取。

我正在使用节点 js 与模块进行通信,但我也遇到了与 python 相同的问题。不过,我在 C 语言中没有问题,这让我认为这是一个更高级别的编程问题和时间问题。

一个基本的例子是:

getGpsData=(modem, callback)=>{
   modem.write("AT$GPSACP\r");
   const timer = setTimeout( ()=>{
     callback(null);   
   }, 5000); //wait 5 sec before returning null
   modem.on('readable', readRaw=()=>{
     let data = modem.read();
     let output = "";
     if(data){
       data = data.toString();
       output += data;
       if(data.includes(escape_character)){ //escape character is "OK" or "ERROR"
         clearTimeout(timer);
         callback(output);
       }
     }
   });
}

//connect to serial port
modem = new serialport("/dev/serial0");
on.('connect', ()=>{
//on connect read gps data at constant interval
   setInterval(()=>{
     getGpsData(modem, (data)=>{
        modem.removeListener('readable', rawRead);
        console.log(data); 
     }
   }, 10000); //loop every 10 sec
});

当我运行它时,我会得到大约 10 - 20 gps 读数,然后是所有空值。当我停止我的代码并重新启动它时,它工作正常。有时它运行一个小时或更长时间没有任何问题,然后开始产生空值并且永远不会恢复。如果我直接连接到调制解调器并发送 AT 命令,我根本不会遇到这个问题。就好像我的读取与它写入串行端口的模块不同步。

模块的输出如下:

$gpsacp: "gpsdata..........."

OK

我得到空数据读取,因为它超时并且我的转义字符从未被读取。有时我也会得到“OK”转义字符和空数据。我已经多次重写了我的命令和读取函数,但总是遇到同样的问题。任何人都知道为什么会发生这种情况或有类似的经历吗?

标签: node.jsgpsserial-portuartat-command

解决方案


推荐阅读