Almacenar el valor en la variable después de HTTPREAD

Estoy trabajando con un GSM SIM900 y un Arduino Uno. Estoy usando comandos AT para el SIM900. Estoy obteniendo datos de solicitudes GET y mostrando en el monitor serial, pero después del comando AT+HTTPREAD quiero almacenar datos en una variable. ¿Cómo puedo hacer esto? Obtengo un Objeto JSON del servidor web y deseo obtener la propiedad Status de ese objeto y guardarlo en una variable.

 #include  SoftwareSerial gprsSerial(2,3); void setup() { gprsSerial.begin(9600); Serial.begin(9600); Serial.println("Con"); delay(2000); Serial.println("Done!..."); gprsSerial.flush(); Serial.flush(); // See if the SIM900 is ready gprsSerial.println("AT"); delay(1000); toSerial(); // SIM card inserted and unlocked? gprsSerial.println("AT+CPIN?"); delay(1000); toSerial(); // Is the SIM card registered? gprsSerial.println("AT+CREG?"); delay(1000); toSerial(); // Is GPRS attached? gprsSerial.println("AT+CGATT?"); delay(1000); toSerial(); // Check signal strength gprsSerial.println("AT+CSQ "); delay(1000); toSerial(); // Set connection type to GPRS gprsSerial.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\""); delay(2000); toSerial(); // Set the APN gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"wap.mobilinkworld.com\""); delay(2000); toSerial(); // Enable GPRS gprsSerial.println("AT+SAPBR=1,1"); delay(10000); toSerial(); // Check to see if connection is correct and get your IP address gprsSerial.println("AT+SAPBR=2,1"); delay(2000); toSerial(); } void loop() { // initialize http service gprsSerial.println("AT+HTTPINIT"); delay(2000); toSerial(); // set http param value // ToDO : send dynamic value gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://smockfyp.azurewebsites.net/api/Device/GetStatus?did=1\""); delay(4000); toSerial(); // set http action type 0 = GET, 1 = POST, 2 = HEAD gprsSerial.println("AT+HTTPACTION=0"); delay(6000); toSerial(); // read server response gprsSerial.println("AT+HTTPREAD"); delay(1000); toSerial(); gprsSerial.println("AT+HTTPTERM"); toSerial(); delay(300); gprsSerial.println(""); delay(10000); } void toSerial() { while(gprsSerial.available()!=0) { Serial.write(gprsSerial.read()); } } 

Esta es una pieza de salida que quiero almacenar en una variable:

 AT+HTTPINIT OK AT+HTTPPARA="URL","http://smockfyp.azurewebsites.net/api/DeviceAT+HTTPACTION=0 OK +HTTPACTION: 0,200,17 AT+HTTPREAD +HTTPREAD: 17 [{"Status":true}] OK 

Primero debe inicializar una matriz de caracteres llamada a para almacenar el valor y también declarar una variable int flag=0; .

Luego modifique su función toSerial() siguiente manera:

 void toSerial() { while(gprsSerial.available()!=0) { if( gprsSerial.read() == '[' ) flag=2; else if(flag == 2 && gprsSerial.read() == ':') while(gprsSerial.read() != '}') { a[i]= gprsSerial.read(); i++; } else if(flag == 0) Serial.write(gprsSerial.read()); else flag--; } } 

Comience adquiriendo una gran hoja de papel A3, busque un bolígrafo rojo y escriba 1000 veces

Nunca usaré la delay como sustituto de las respuestas de lectura y análisis de un módem.

Nunca usaré la delay como sustituto de las respuestas de lectura y análisis de un módem.

Nunca usaré la delay como sustituto de las respuestas de lectura y análisis de un módem.

Nunca usaré la delay como sustituto de las respuestas de lectura y análisis de un módem.

Nunca usaré la delay como sustituto de las respuestas de lectura y análisis de un módem.

Luego lea esta respuesta , siguiendo las instrucciones con respecto a V.250 . Y cuando haya digerido correctamente toda la información de la respuesta (probablemente le lleve algo de tiempo dejar que todo se hunda), siga el enlace a otra respuesta en el comentario debajo (que contiene información para capturar el contenido de la respuesta).


Por supuesto, la primera parte estaba destinada a ser graciosa, pero estoy hablando en serio del rest; tienes algunos enormes “agujeros” de conocimiento del comando AT que debes llenar. No podrá obtener información hasta que lo haga. No debería ser muy difícil, pero requerirá un poco de esfuerzo.