歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

基於SIM300的GPRS網絡通訊

基於SIM300制作的通信模組在工程中使用的非常多,下面總結一下其在網絡通信方面的AT指令集應用方法

1、預備步驟:測試GPRS模組和業務是否好用
   AT           //測試網絡連接是否完後

   AT+ccid      //檢測是否裝有SIM卡

   AT+cgmr      //檢測軟件版本,5.0 以上的才有GPRS 功能支持

   AT+COPS?     //運營商檢測:

響應 +COPS:0

OK   未找到網絡
響應 +COPS:0,0,”UNICOM”          //聯通
OK
響應 +COPS:0,0,”CHINA MOBILE”   //移動
OK

   AT+csq//檢測信號質量,確定是否可以登陸上網絡;若返回10--31,0之間的信號數字則繼續,
             //如果信號是99,99,則應該考慮不停的的讓模塊去搜尋網絡。

2、網絡初始化工作

AT+CGCLASS="B"

A->WCDMA:       出廠默認設置  

B->GSM/GPRS:    AT命令不支持設置此模式?

CG->GPRS Only:  AT+CREG?返回未注冊,但能pppd撥號

CC->GSM Only:   AT+CREG?查看注冊上,但pppd不能撥號上網

AT+CGDCONT=1,"IP",”CMNET"                //首先定義PDP移動場景

AT+CGATT=1                               //激活PDP,返回OK則繼續

AT+CIPCSGP=1,"CMNET"                     //設置模塊連接方式為GPRS連接,接入點為“CMNET”

AT+CDNSORIP=0                            //0:通過IP訪問

                                         //1:通過域名訪問

AT+CDNSCFG="211.136.17.107"              //初始化本地dns,本例為中國移動


3、建立連接

AT+CIPSTART="TCP/UDP",221.216.163.44,2020

TCP/UDP指明是TCP連接還是UDP連接

221.216.163.44是SEVER端的IP地址  2020為端口

連接成功後模塊返回:

OK

CONNECT OK


4、發送信息

AT+CIPSEN

發送完此命令後出現一個 ">" 符號,這樣就可以在超級終端裡輸入要發送的信息,輸入完畢後按下"ctl+z"發送,即將所要發送的數據發送到指定IP的服務器上

5、關閉連接
AT+CIPCLOSE  //只有在TCP/UDP處於CONNECT OK的狀態下才返回OK,否則返回ERROR

AT+CIPSHUT   //關閉移動場景


6、應用舉例:

使用TCP向遠端SERVER傳輸數據

    服務器端是一台連接到互聯網上的PC機,pc機上可以運行一個接收軟件,這種只適合測試模塊是使用,其實最後開發時還要自己開發一個socket接收程序,注意該PC機的IP地址必須是公網IP,否則客戶端找不到。

    1)水木清華BBS訪問:

AT+CIPSTART="TCP","166.111.8.238","23"//清華大學telnet服務器

    2)自建一個tcp服務器:

在一個具有公網IP的電腦上運行以下服務器程序:

  1. //=============================================================   
  2. // 文件名稱:tcp_echo_srv.c   
  3. // 功能描述:TCP Echo Server   
  4. // 維護記錄:2011-8-15    V1.0   
  5. //=============================================================   
  6. #include <stdio.h>   
  7. #include <stdlib.h>   
  8. #include <string.h>                   // bzero   
  9. #include <unistd.h>   
  10. #include <sys/socket.h>   
  11. #include <netinet/in.h>   
  12. #include <arpa/inet.h>                    // inet_ntop   
  13. //=============================================================   
  14. // 語法格式:    void main(void)   
  15. // 實現功能:    主函數,建立一個TCP Echo Server   
  16. // 入口參數:    無   
  17. // 出口參數:    無   
  18. //=============================================================   
  19. i<span style="color:#3333ff;">nt main(int argc, char *argv[])  
  20. {  
  21.     char recvbuf[2048];         // 接收緩沖區   
  22.     int sockfd;             // 套接字   
  23.       
  24.     struct sockaddr_in servAddr;        // 服務器地址結構體   
  25.     unsigned short port = 8000;     // 監聽端口   
  26.   
  27.     if(argc > 1)             // 由參數接收端口   
  28.     {  
  29.         port = atoi(argv[1]);  
  30.     }  
  31.       
  32.     printf("TCP Server Started at port %d!\n", port);  
  33.       
  34.     //setp  1:          創建TCP套接字   
  35.     sockfd = socket(AF_INET, SOCK_STREAM, 0);  
  36.                                           
  37.     if(sockfd < 0)  
  38.     {  
  39.         perror("Invalid socket");  
  40.         exit(1);  
  41.     }  
  42.     //setp  2:          將socket套接字與端口號、本機IP地址綁定   
  43.     bzero(&servAddr, sizeof(servAddr));          // 初始化服務器地址   
  44.     servAddr.sin_family = AF_INET;               // 采用IPV4協議   
  45.     servAddr.sin_port = htons(port);             // 邦定端口號   
  46.     servAddr.sin_addr.s_addr = htonl(INADDR_ANY);    //綁定本機IP地址   
  47.       
  48.     printf("Binding server to port %d\n", port);  
  49.       
  50.     printf("servAddr.sin_addr.s_addr=%d\n",servAddr.sin_addr.s_addr);  
  51.       
  52.     if(bind(sockfd, (struct sockaddr*)&servAddr, sizeof(struct sockaddr)) != 0)  
  53.     {  
  54.         close(sockfd);  
  55.         perror("binding err!");  
  56.         exit(1);  
  57.     }  
  58.       
  59.     //setp  3   將套接字設置為監聽模式   
  60.     if(listen(sockfd, 1) != 0)  
  61.     {  
  62.         close(sockfd);  
  63.         perror("listen err!");  
  64.         exit(1);  
  65.     }  
  66.     printf("waiting client...\n");  
  67.     while(1)  
  68.     {  
  69.         char cliIP[INET_ADDRSTRLEN];                 // 用於保存客戶端IP地址   
  70.   
  71.         size_t recvLen;  
  72.         struct sockaddr_in cliAddr;          // 用於保存客戶端地址   
  73.         size_t cliAddrLen = sizeof(cliAddr);  
  74.                                  // 必須初始化!!!   
  75.         //setp  4:阻塞等待客戶端的連接   
  76.         int connfd = accept(sockfd, (struct sockaddr*)&cliAddr, &cliAddrLen);  
  77.                                  // 獲得一個已經建立的連接   
  78.         if(connfd < 0)  
  79.         {  
  80.             close(sockfd);  
  81.             perror("accept err!");  
  82.             exit(1);  
  83.         }  
  84.         inet_ntop(AF_INET, &cliAddr.sin_addr.s_addr, cliIP, INET_ADDRSTRLEN);  
  85.         printf("client ip = %s\n", cliIP);  
  86.           
  87.         //setp  5:讀取客戶端發送的數據並回送給客戶端   
  88.         while((recvLen = read(connfd, recvbuf, 2048)) > 0)  
  89.         {  
  90.             write(connfd, recvbuf, recvLen);  
  91.         }  
  92.         close(connfd);  
  93.         printf("client closed!\n");  
  94.     }  
  95.     close(sockfd);  
  96.     return 0;  
  97. }

使用以下方式連接:

  AT+CIPSTART="TCP","124.*.*.139","8000"

使用以下命令發送數據:

  AT+CIPSEND

服務器會把發送的數據回給你

Copyright © Linux教程網 All Rights Reserved