Сохранить значение в переменной после 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-команд, которые вы должны заполнить. Вы не сможете получить какую-либо информацию, пока не сделаете. Это не должно быть очень сложно, но это потребует некоторых усилий.