node.js - 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”转义字符和空数据。我已经多次重写了我的命令和读取函数,但总是遇到同样的问题。任何人都知道为什么会发生这种情况或有类似的经历吗?
解决方案
推荐阅读
- java - 如何在android java中更改麦克风灵敏度
- mysql - 使用 IISNODE 在 IIS 10 中部署后 NodeJs 应用程序未连接到 MySql
- scala - Flink Parquet Writer forRowFormat
- xss - 如何在 HTTP 服务器中启用内容安全策略
- r - 在R中按多个条件拆分字符
- javascript - mapstatetoprops 返回未定义的反应 redux
- python - 运行两个 asyncio 协程,每个协程在自己的 Python 进程中
- haskell - Haskell List Comprehension - 并非所有数据都被传输
- c++ - 如何管理对象的初始化数据?
- ios - 如何删除“无标题”XCode 签名证书?