2014-02-26 59 views
2

我使用名爲SIM340DZ的GSM/GPRS模塊,並使用AT commands來管理模塊。如何將UDP數據包發送到GPRS模塊

我可以從GPRS模塊的特定端口向遠程計算機發送UDP數據包。現在,我想將一個UDP數據包從計算機傳輸到GPRS單元。但是,GPRS單元有一個私人IP地址(例如10.46.123.25),並且接入點名稱(APN)是internet.tele2.se

任何人都可以請解釋我如何從一個(linux )電腦到GPRS單元?我需要了解哪些信息以及如何找到它?

此外,如果您有AT commands的經驗,如果您能解釋我需要使用什麼命令序列來配置UDP偵聽模式模塊,我還將不勝感激。

回答

2

對於誰需要處理類似的系統,我張貼,您可以發送UDP包代碼的那些一個使用AT commands destinated通過串口portIPaddress。解釋包括作爲評論的代碼:

int Serial_Close(int *fd); 
int Serial_Send(int *fd, char *string); 
int Serial_Open(int* fd, char *serial_Name, speed_t baudrate); 



int main(int argc, char** argv) 
{ 
    int fd; 

    Serial_Open(&fd, "/dev/ttyAPP0", B115200); //open the UART interface with 115200 boundrate, 8 1 N 
    if(tcflush(fd, TCIOFLUSH) != 0) 
    { 
     exit(1); //error 
     fprintf(stderr, "tcflush error\n"); 
    } 

    Serial_Send(&fd, "ATE0\r\n"); //ATE0 = echo mode(ATE) is off (0) 
    sleep(1); 
    Serial_Send(&fd, "AT+CGATT=1\r\n"); 
    sleep(1); 
    Serial_Send(&fd, "AT+AT+CSTT=\"internet.tele2.se\"\r\n"); //here you define the name the APN 
    sleep(1); 
    Serial_Send(&fd, "AT+CIICR\r\n"); 
    sleep(1); 
    Serial_Send(&fd, "AT+cipstart=\"UDP\",\"85.1.2.3\",\"20000\"\r\n"); //85.1.2.3 is the destination IP address, 20000 is the destination Port number 
    sleep(1); 
    Serial_Send(&fd, "AT+CIPSEND=5\r\n"); 
    sleep(1); 
    Serial_Send(&fd, "12345\r\n"); //12345 is the message 
    sleep(1); 
    Serial_Send(&fd, "AT+CIPSHUT\r\n"); 
    sleep(1); 
    Serial_Close(&fd); 

    return 0; 
} 


int Serial_Open(int* fd, char *serial_Name, speed_t baudrate) 
{ 

    struct termios serCfg; 
    memset(&serCfg, 0, sizeof(serCfg)); 
    if((*fd = open(serial_Name, O_RDWR)) < 0) 
     return -1; 
    else 
     if(tcgetattr(*fd, &serCfg) != 0) 
      return -1; 

    cfsetispeed(&serCfg, baudrate); 
    cfsetospeed(&serCfg, baudrate); 
    cfmakeraw(&serCfg); 

    if(tcsetattr(*fd, TCSANOW, &serCfg) != 0) 
     return -1; 
    return 0; 
} 


int Serial_Send(int *fd, char *string) 
{ 
    int len; 
    char *buffer; 
    int bytes_sent; 


    len = strlen(string); 
    if(len > 255) 
     return -1; 
    buffer = (char*)malloc((len+1)*sizeof(char)); 
    if(buffer == NULL) 
     return -1; 
    strcpy(buffer, string); 
    buffer[len] = 0; 

    bytes_sent = write(*fd, buffer, strlen(buffer)); 
    if(bytes_sent < 0) 
    { 
     close (*fd); 
     return -1; 
    } 
    else 
    { 
     free(buffer); 
     return 0; 
    } 
} 



int Serial_Close(int *fd) 
{ 
     if(close (*fd) < 0) 
      return -1; 
     else 
      return 0; 
} 

我希望它對某人有幫助。