Сохранить значение в переменной после HTTPREAD

Я работаю с GSM SIM900 и Arduino Uno. Я использую AT-команды для SIM900. Я успешно получаю данные из запросов GET и показываю их на последовательном мониторе, но после AT+HTTPREAD Команда Я хочу сохранить данные в переменную. Как я могу это сделать? Я получаю объект JSON с веб-сервера и хочу получить Status свойство из этого объекта и сохранить его в переменную.

#include <SoftwareSerial.h>
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());
  }
}

Это часть вывода, которую я хочу сохранить в переменной:

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

2 ответа

Решение

Сначала вы должны инициализировать массив символов с именем a для хранения значения, а также объявить переменную int flag=0;,

Затем измените ваш toSerial() функционировать следующим образом:

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--;
  }
}

Начните с приобретения большого листа бумаги формата А3, найдите красную ручку и напишите 1000 раз

Я никогда не буду использовать delay в качестве замены для чтения и анализа ответов от модема.

Я никогда не буду использовать delay в качестве замены для чтения и анализа ответов от модема.

Я никогда не буду использовать delay в качестве замены для чтения и анализа ответов от модема.

Я никогда не буду использовать delay в качестве замены для чтения и анализа ответов от модема.

Я никогда не буду использовать delay в качестве замены для чтения и анализа ответов от модема.

...

Затем прочитайте этот ответ, следуя инструкциям относительно V.250. И когда вы правильно усвоили всю информацию из ответа (вероятно, потребуется некоторое время, чтобы все в нее вошли), перейдите по ссылке на другой ответ в комментарии ниже (которая содержит информацию для захвата содержимого ответа).


Конечно, первая часть должна была быть забавной, но я очень серьезно отношусь к остальным; у вас есть огромные пробелы в знаниях AT-команд, которые вы должны заполнить. Вы не сможете получить какую-либо информацию, пока не сделаете. Это не должно быть очень сложно, но это потребует некоторых усилий.

Другие вопросы по тегам