一、echo和 cat
echo和cat是Linux和Android系统下和模块收发AT的一种简单方法。
注意这个方法如果商用存在风险
(1) 如果没有发ATEO关闭回显,可能导致通道无法使用
(2) 在个别设备里发给模组的“AT+CPIN?”命令会变成"AT+CAT+CPIN? ”引起错误,所以这个方法不推荐商用,仅用于调试
(3) 如果端口无法使用尝试重启模组
二、c程序
实际商用的情况下推荐用“.c”的方式实现
右边是一个简单的串口程序源码,用法如下在Linux下创建一个t.c文件,并且将下方的源码保存。在t.c 所在路径下执行 gcc -o t t.c 指令生成可执行文件“t”后 运行可执行文件 ./t
根据提示输入需要发送AT指令的端口,如: /dev/ttyUSBO此时弹出系统提示打开端口成功,可输入AT指令,若需要退出可按住 Ctrl+z 即可退出
也可以使用其他工具
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
//#define ATPORT "/dev/ttyUSB0"
#define BUFSIZE 1000
#define BAUDRATE B115200
char ATPORT[1024];
int open_port(char *port)
{
struct termios options;
int fd;
fd = open(port, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
printf("%s: Unable to open the port - \r\n",__func__);
} else {
fcntl(fd, F_SETFL, FNDELAY);
tcgetattr( fd, &options );
cfsetispeed( &options, BAUDRATE );
cfsetospeed( &options, BAUDRATE );
options.c_cflag |= ( CLOCAL | CREAD);
options.c_cflag &= ~(CSIZE | PARENB | CSTOPB | CSIZE);
options.c_cflag |= CS8;
options.c_cflag &= ~CRTSCTS;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_iflag &= ~(IXON | IXOFF | IXANY | ICRNL | INLCR | IGNCR);
options.c_oflag &= ~OPOST;
if ( tcsetattr( fd, TCSANOW, &options ) == -1 ) {
printf ("Error with tcsetattr = %s\r\n", strerror ( errno ) );
} else {printf ( "Open port %s succeed\r\n",ATPORT);
}}return (fd);}
int send(int fd,char *str){ printf("AT send :%s\r\n",str); write(fd,str,strlen(str)); write(fd,"\r\n",2);
return 0;}
int receive(int fd){
char buf[BUFSIZE] = {0}; read(fd,buf, BUFSIZE); printf("AT receive: %s\r\n", buf);
return 0;}
int main(){ system("ls /dev/ttyUSB*"); system("ls /sys/class/net");
printf("Please input port as /dev/ttyUSB0:\r\n");
scanf("%s",ATPORT);
char buf[1024];
int fd = open_port(ATPORT);
while(1){
printf("Please input command:\r\n");
scanf("%s",buf);
send(fd,buf);
sleep(1);
receive(fd);
}
close(fd);
return 0;
}