Microduino-GPRS/GSM获取yeelink数据
本帖最后由 i7456 于 2014-6-17 14:34 编辑硬件:Microduino-GPRS/GSM、Microduino-Core+、Microduino-FT232R
实物照片:
程序如下:
long previousMillis = 0; // will store last time LED was updated
long interval = 10000; // interval at which to get (milliseconds)
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
while(!gprsINI());
}
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
sim800MSG("AT+HTTPINIT");
sim800MSG("AT+HTTPPARA=\"URL\",\"http://api.yeelink.net/v1.0/device/1642/sensor/6130/datapoints\"");
sim800MSG("AT+HTTPPARA=\"CID\",1");
sim800MSG("AT+HTTPACTION=0");
Serial.println(sim800MSG("AT+HTTPREAD"));
sim800MSG("AT+HTTPTERM");
}
}
boolean gprsINI()
{
String msg;
msg = sim800MSG("AT+SAPBR=2,1");
Serial.println(msg);
sim800MSG("ATE0");
if(msg.indexOf("OK") > 0)
if(msg.indexOf("0.0.0.0") > 0)
{
sim800MSG("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
sim800MSG("AT+SAPBR=3,1,\"APN\",\"CMNET\"");
sim800MSG("AT+SAPBR=1,1");
}
else return 1;
delay(2000);
return 0;
}
String sim800MSG(String msg)
{
String str;
boolean ActionFlag = false;
if(msg.indexOf("HTTPACTION")>0)
ActionFlag = true;
Serial1.println(msg);
while(!Serial1.available())
delay(10);
while(Serial1.available())
{
char c = Serial1.read();
str += c;
delay(2);
}
if(ActionFlag)
{
while(!Serial1.available())
delay(10);
while(Serial1.available())
{
char c = Serial1.read();
str += c;
delay(2);
}
}
return str;
}
串口监视器输出获取的数据如下:
+SAPBR: 1,1,"10.81.114.10"
OK
+HTTPREAD: 48
{"timestamp":"2014-06-17T14:15:09","value":28.8}
OK
+HTTPREAD: 48
{"timestamp":"2014-06-17T14:15:09","value":28.8}
OK
+HTTPREAD: 48
{"timestamp":"2014-06-17T14:15:40","value":28.8}
OK
很不错,可以参考Arduino官方的GSM库的GSMPachubeClient示例,把数据传到yeelink,到时候记得找客服申请返现~ 非常小巧,期待啊! 收藏不错,正需要! 非常实用 :) {:soso_e102:}学习了! 本帖最后由 i7456 于 2014-8-18 13:22 编辑
向YEELINK发送数据的demo程序如下:long previousMillis = 0; // will store last time LED was updated
long interval = 17000; // interval at which to get (milliseconds)
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
while(!gprsINI());
}
void loop()
{
unsigned long currentMillis = millis();
while(Serial1.available())
{
char c =Serial1.read();
Serial.print(c);
}
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
sim800MSG("AT+CIPSTART=\"TCP\",\"api.yeelink.net\",\"80\"");
delay(3500);
sim800MSG("AT+CIPSEND");
delay(200);
String ss;
ss= "POST /v1.0/device/4331/sensor/6368/datapoints HTTP/1.1\r\n";
ss += "Host: api.yeelink.net\r\n";
ss += "Accept: *";
ss += "/";
ss += "*\r\n";
ss += "U-ApiKey:184xb096xxxxb3xxxx5b4xxxx4b2xxxx\r\n";
ss += "Content-Length: 15\r\n";
ss += "Content-Type: application/x-www-form-urlencoded\r\n";
ss += "Connection: close\r\n\r\n";
ss += "{\"value\":\"300\"}\r\n";
ss += "\x1A";
Serial.println(sim800MSG(ss));
}
}
boolean gprsINI()
{
String msg;
msg = sim800MSG("AT+SAPBR=2,1");
Serial.println(msg);
sim800MSG("ATE");
if(msg.indexOf("OK") > 0)
if(msg.indexOf("0.0.0.0") > 0)
{
sim800MSG("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
sim800MSG("AT+SAPBR=3,1,\"APN\",\"CMNET\"");
sim800MSG("AT+SAPBR=1,1");
}
else return 1;
delay(2000);
return 0;
}
String sim800MSG(String msg)
{
String str;
boolean ActionFlag = false;
if(msg.indexOf("HTTPACTION")>0)
ActionFlag = true;
Serial1.println(msg);
while(!Serial1.available())
delay(10);
while(Serial1.available())
{
char c = Serial1.read();
str += c;
delayMicroseconds(1200);
// delay(2);
}
if(ActionFlag)
{
while(!Serial1.available())
delay(10);
while(Serial1.available())
{
char c = Serial1.read();
str += c;
delay(2);
}
}
//Serial.println(str);
return str;
}
谢谢分享。不错 谢谢!麻烦问一下!为什么要判断是0.0.0.0才进行承载的配置呢?
页:
[1]