i7456 发表于 2014-6-17 14:30:17

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


wasdpkj 发表于 2014-6-22 09:57:06

很不错,可以参考Arduino官方的GSM库的GSMPachubeClient示例,把数据传到yeelink,到时候记得找客服申请返现~

wetnt 发表于 2014-6-23 09:12:29

非常小巧,期待啊!

wetnt 发表于 2014-7-8 10:06:30

收藏不错,正需要!

Microduino 发表于 2014-7-8 23:00:54

非常实用 :)

huang1234 发表于 2014-7-24 18:21:23

{:soso_e102:}学习了!

i7456 发表于 2014-8-18 13:11:05

本帖最后由 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;
}

ljs183 发表于 2015-2-13 11:18:31

谢谢分享。不错

iupoyterwq 发表于 2015-10-13 18:45:22

谢谢!麻烦问一下!为什么要判断是0.0.0.0才进行承载的配置呢?
页: [1]
查看完整版本: Microduino-GPRS/GSM获取yeelink数据