/***************************************************************************** * Name: * printf_usb * In: * s: string to be sent * Out: * * Description: * Put one string into tx_buffer. * * Assumptions: * -- *****************************************************************************/ void printf_usb(char *s) { while(*s) { #if 0 while(*s != (char)cdc_putch(*s)){}; #else putchar_usb(*s); #endif s++; } }
void Tarefa_GPRS(void) { /* task setup */ /* Tarefa do Logger para comunicacao com modem na UART2 a 9600 bps */ #define SEND_STRING0 "AT+CIPSENDI=0,\"GET node/set.json?nodeid=10&data=" #define SEND_STRING1 "}&apikey=90a004390f3530d0ba10199ac2b1ac3d HTTP/1.1\\r\\nHost: emon-gpsnetcms.rhcloud.com\\r\\n\\r\\n\\r\\n\"" #define SEND_STRING2 "AT+CIPSENDI=0,\"GET /input/post.json?json={pow:" //#define SEND_STRING3 ("}&" API_KEY " HTTP/1.1\r\nHost: " ESP_TCP_SERVER_NAME "\r\n\r\n\r\n") #define SEND_STRING3 "}&apikey=90a004390f3530d0ba10199ac2b1ac3d HTTP/1.1\\r\\nHost: emon-gpsnetcms.rhcloud.com\\r\\n\\r\\n\\r\\n\"" const char resp_200_OK[] = "HTTP/1.1 200 OK"; #define REPLY_LENGTH (sizeof(resp_200_OK) + 2) char valor[] = "01"; INT8U cnt = 1; volatile char c; static char resp_serv[REPLY_LENGTH]; static INT8U resp_cnt = 0; INT16U tentativas = 0; /* init ESP_UART */ uart_init(ESP_UART,ESP_BAUD,ESP_UART_BUFSIZE,ESP_UART_PINS,ESP_MUTEX,ESP_MUTEX_PRIO); /* init modem */ modem_send("AT\r\n"); modem_wait_reply(); modem_send("AT+CWMODE=3\r\n"); modem_wait_reply(); modem_send(("AT+CWJAP=\"" ESP_AP "\",\"" ESP_PWD "\"\r\n")); modem_wait_reply(); modem_send("AT+CIPCREATE=\"TCP\",10201,2048\r\n"); modem_wait_reply(); modem_send("AT+CIPCONNECT=0,\"54.160.189.224\",80\r\n"); modem_wait_reply(); /* task main loop */ for (;;) { DelayTask(5000); /* delay de 5s */ /* Comando de envio GET /input/post.json?json={campo:valor}&apikey=90a004390f3530d0ba10199ac2b1ac3d HTTP/1.1 Host:emon-gpsnetcms.rhcloud.com GET /node/set.json?nodeid=10&data=20,20,20,20&apikey=90a004390f3530d0ba10199ac2b1ac3d HTTP/1.1 Host:emon-gpsnetcms.rhcloud.com */ tentativas++; modem_send(SEND_STRING2); sprintf(valor,"%d", cnt); modem_send(valor); modem_send(SEND_STRING3); NEWLINE(); //modem_wait_reply(); INT8U keep_data = 0; DelayTask(1000); /* delay de 1s */ resp_cnt = 0; while((c=modem_receive()) != (CHAR8)-1) { putchar_usb(c); if (keep_data < 2){ if (c=='+') { keep_data++; } }else{ resp_server_ok[resp_cnt++]=c; if(resp_cnt == 9) { if(c=='1'){ resp_cnt = 0; break; } } } } while((c=modem_receive()) != (CHAR8)-1) { putchar_usb(c); } modem_send("AT+CIPRD=0\r\n"); DelayTask(10); /* delay de 10ms */ /* resposta: HTTP/1.1 200 OK .Date: Wed, 03 Dec 2014 18:43:17 GMT .Server: Apache/2.2.15 (Red Hat) .Content-Length: 2 .Content-Type: application/json .Vary: Accept-Encoding .Accept-Ranges: none . .ok */ while((c=modem_receive()) != (CHAR8)-1) { putchar_usb(c); } cnt++; /* TODO: timeout */ #if 0 while(1){ c=modem_receive(); if ((c != '\r') && (c != '\n') && ((resp_cnt < sizeof(resp_serv)-2))){ resp_serv[resp_cnt++]=c; }else{ resp_serv[resp_cnt++]='\0'; if(strcmp (resp_serv,resp_200_OK) == 0){ cnt = (++cnt)%100; } resp_cnt = 0; break; } } #endif } }