Linux下收发AT指令的方法

    2025-10-15 01:55:05

    一、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

    #include

    #include

    #include

    #include

    #include

    //#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;

    }