我正在使用GSM SIM900和Arduino Uno。我正在为SIM900使用AT命令。我成功地从GET请求获取数据并在串行监视器上显示,但在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
答案 0 :(得分:4)
首先获取一张A3大纸,找一支红笔并写1000次
我永远不会使用
delay
代替来自调制解调器的阅读和解析响应。我永远不会使用
delay
代替来自调制解调器的阅读和解析响应。我永远不会使用
delay
代替来自调制解调器的阅读和解析响应。我永远不会使用
delay
代替来自调制解调器的阅读和解析响应。我绝不会使用
delay
代替来自调制解调器的阅读和解析响应。...
然后按照有关V.250 的说明阅读this answer,。当你正确地从答案中消化了所有信息时(可能需要一些时间让所有信息都沉入其中),然后点击下面评论中的另一个答案的链接(其中包含捕获响应内容的信息)。
当然第一部分意味着很有趣,但我对其余部分已经认真了;你有一些巨大的AT命令知识&#34; hole&#34;你必须填写。在您这样做之前,您将无法获得任何信息。这应该不是很困难,但需要付出一些努力。
答案 1 :(得分:1)
首先,您应初始化名为 [HttpGet("{id}")]
public async Task<IActionResult> GetPatReg([FromRoute] long id)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var patReg = await _context.PatReg
.Where(m => m.FileId == id)
.ToListAsync();
var patpar = await _context.PatPar.Select(m => new PatParDto {
RecId = m.RecId,
FileId = m.FileId,
ParFileId = m.ParFileId,
SDate = m.SDate,
EDate = m.EDate,
}).ToListAsync();
for (int i = 0; i < patpar.Count; i++)
{
patpar[i].FullName = (from a in _context.PatReg
where (a.FileId == patpar[i].ParFileId)
select new { a.fullname }
).Single().fullname;
or
patpar[i].FullName = _context.PatReg.Where(a =>
a.FileId == patpar[i].ParFileId)
.Select(t=>new {t.fullname })
.Single().fullname;
}
if (patReg == null)
{
return NotFound();
}
var DataRes = new {
sdata = patReg,
test= patpar
};
return Ok(DataRes);
}
的char数组以存储值,并声明变量a
。
然后按如下方式修改int flag=0;
功能:
toSerial()