2014-02-26 22 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; 
} 

我希望它对某人有帮助。