【发布时间】:2021-10-23 06:41:08
【问题描述】:
我有一个带有 SIM7600X 调制解调器的 Raspberry Pi 4,通过 USB 连接。我正在用 C 编写一个程序,我需要检查移动网络的信号质量,并连接到互联网。在 Minicom 和 Cutecom 中一切正常,但我无法让它通过 C 可靠地与调制解调器通信。这是我的代码示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
FILE *modem;
int exitflag=0;
char buf[256];
char *line;
int res;
modem = fopen("/dev/ttyUSB2", "r+b");
if (modem == NULL) {
fprintf(stderr, "Unable to open modem\n");
return(-1);
}
res = fputs("\n\nAT+CSQ\n", modem);
if (res < 0)
{
fprintf(stderr, "failed to send to modem (res = %d)\n",res);
fclose(modem);
return(-1);
}
exitflag=0;
while (exitflag==0)
{
line = fgets(buf, 256, modem);
if (line >= 0)
{
fprintf(stderr,"%s",buf);
}
else
{
exitflag=1;
fprintf(stderr,"nothing\n");
}
}
fclose(modem);
return(0);
}
输出结果可能是这样的。
AT+CSQ
+CSQ: 23,99
OK
AT+CS
ERROR
AT+CS
ERROR
AT+CS
ERROR
AT+CS
ERROR
AT+CS
ERROR
AT+CS
ERROR
AT+CS
ERROR
AT+CS
【问题讨论】:
-
试试
fputs("AT+CSQ\r", modem);,而不是fputs("\n\nAT+CSQ\n", modem);,然后回来找我们。 -
在串行终端(即/dev/ttyUSB2)上使用文件操作(fopen()、fgets()) >) 并不理想。当您没有 open() 终端并且没有 tc[gs]etattr() 的文件描述符时,您将如何配置串行终端? “输出结果可能是这样的......” -- 发布的代码与发布的输出不匹配。