在httpread之后的变量中存储值



我正在与GSM SIM900和Arduino Uno一起工作。我正在使用SIM900的命令。我成功地从获取请求中获取数据并在串行监视器上显示,但是在AT+HTTPREAD命令之后,我想将数据存储到变量中。我怎样才能做到这一点?我正在从Web服务器中获得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

首先获得一张大A3纸,找到红笔,写1000次

我永远不会使用 delay作为阅读解析响应调制解调器的替代品。

我永远不会使用 delay作为阅读解析响应调制解调器的替代品。

我永远不会使用 delay作为阅读解析响应调制解调器的替代品。

我永远不会使用delay作为读取解析响应的替代品。

我永远不会使用 delay作为阅读解析响应的替代品。

...

然后按照有关V.250 的说明阅读此答案,。当您从答案中正确消化所有信息(可能需要一些时间才能让所有信息沉入),然后在其下面的评论中按照另一个答案的链接(其中包含信息以捕获响应内容)。


当然,第一部分本来是很有趣的,但是我对其余部分感到认真。您在命令知识上有一些巨大的"孔"。你必须填补。您将无法获得任何信息,直到您做到。这应该不是很困难,但需要一些努力。

首先,您应该初始化一个名为 a的char数组,以存储该值,并声明一个可变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--;
  }
}

相关内容

  • 没有找到相关文章

最新更新