极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14134|回复: 8

Microduino-GPRS/GSM获取yeelink数据

[复制链接]
发表于 2014-6-17 14:30:17 | 显示全部楼层 |阅读模式
本帖最后由 i7456 于 2014-6-17 14:34 编辑

硬件:Microduino-GPRS/GSM、Microduino-Core+、Microduino-FT232R
实物照片:

Microduino-GPRS/GSM

Microduino-GPRS/GSM

程序如下:
  1. long previousMillis = 0;        // will store last time LED was updated
  2. long interval = 10000;           // interval at which to get (milliseconds)

  3. void setup()
  4. {
  5.   Serial.begin(9600);
  6.   Serial1.begin(9600);
  7.   while(!gprsINI());
  8.   
  9. }

  10. void loop()
  11. {
  12.   unsigned long currentMillis = millis();
  13.   if(currentMillis - previousMillis > interval)
  14.   {
  15.     previousMillis = currentMillis;   
  16.    
  17.     sim800MSG("AT+HTTPINIT");
  18.     sim800MSG("AT+HTTPPARA="URL","http://api.yeelink.net/v1.0/device/1642/sensor/6130/datapoints"");
  19.     sim800MSG("AT+HTTPPARA="CID",1");
  20.     sim800MSG("AT+HTTPACTION=0");
  21.     Serial.println(sim800MSG("AT+HTTPREAD"));
  22.     sim800MSG("AT+HTTPTERM");
  23.   }
  24. }

  25. boolean gprsINI()
  26. {
  27.   String msg;
  28.   msg = sim800MSG("AT+SAPBR=2,1");  
  29.   Serial.println(msg);
  30.   sim800MSG("ATE0");
  31.   if(msg.indexOf("OK") > 0)
  32.   if(msg.indexOf("0.0.0.0") > 0)
  33.   {
  34.     sim800MSG("AT+SAPBR=3,1,"Contype","GPRS"");
  35.     sim800MSG("AT+SAPBR=3,1,"APN","CMNET"");
  36.     sim800MSG("AT+SAPBR=1,1");
  37.   }
  38.   else return 1;
  39.   delay(2000);
  40.   return 0;
  41. }

  42. String sim800MSG(String msg)
  43. {
  44.   String str;
  45.   boolean ActionFlag = false;
  46.   
  47.   if(msg.indexOf("HTTPACTION")>0)
  48.   ActionFlag = true;
  49.   
  50.   Serial1.println(msg);
  51.   while(!Serial1.available())
  52.   delay(10);
  53.   while(Serial1.available())
  54.   {
  55.     char c = Serial1.read();
  56.     str += c;
  57.     delay(2);
  58.   }
  59.   
  60.   if(ActionFlag)
  61.   {
  62.     while(!Serial1.available())
  63.     delay(10);
  64.    
  65.       while(Serial1.available())
  66.       {
  67.         char c = Serial1.read();
  68.         str += c;
  69.         delay(2);
  70.       }
  71.   }
  72.   return str;
  73. }
复制代码



串口监视器输出获取的数据如下:

+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


回复

使用道具 举报

发表于 2014-6-22 09:57:06 | 显示全部楼层
很不错,可以参考Arduino官方的GSM库的GSMPachubeClient示例,把数据传到yeelink,到时候记得找客服申请返现~
回复 支持 反对

使用道具 举报

发表于 2014-6-23 09:12:29 | 显示全部楼层
非常小巧,期待啊!
回复 支持 反对

使用道具 举报

发表于 2014-7-8 10:06:30 | 显示全部楼层
收藏不错,正需要!
回复 支持 反对

使用道具 举报

发表于 2014-7-8 23:00:54 | 显示全部楼层
非常实用 :)
回复 支持 反对

使用道具 举报

发表于 2014-7-24 18:21:23 | 显示全部楼层
{:soso_e102:}学习了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-18 13:11:05 | 显示全部楼层
本帖最后由 i7456 于 2014-8-18 13:22 编辑



向YEELINK发送数据的demo程序如下:
  1. long previousMillis = 0;        // will store last time LED was updated
  2. long interval = 17000;           // interval at which to get (milliseconds)

  3. void setup()
  4. {
  5.   Serial.begin(9600);
  6.   Serial1.begin(9600);
  7.   while(!gprsINI());
  8. }

  9. void loop()
  10. {
  11.   unsigned long currentMillis = millis();
  12.   
  13.       while(Serial1.available())
  14.     {
  15.       char c =Serial1.read();
  16.       Serial.print(c);
  17.     }

  18.   
  19.   if(currentMillis - previousMillis > interval)
  20.   {
  21.     previousMillis = currentMillis;   
  22.    
  23.     sim800MSG("AT+CIPSTART="TCP","api.yeelink.net","80"");
  24.     delay(3500);   
  25.     sim800MSG("AT+CIPSEND");
  26.     delay(200);
  27.     String ss;
  28.     ss= "POST /v1.0/device/4331/sensor/6368/datapoints HTTP/1.1\r\n";
  29.     ss += "Host: api.yeelink.net\r\n";
  30.     ss += "Accept: *";
  31.     ss += "/";
  32.     ss += "*\r\n";
  33.     ss += "U-ApiKey:184xb096xxxxb3xxxx5b4xxxx4b2xxxx\r\n";
  34.     ss += "Content-Length: 15\r\n";
  35.     ss += "Content-Type: application/x-www-form-urlencoded\r\n";
  36.     ss += "Connection: close\r\n\r\n";
  37.     ss += "{"value":"300"}\r\n";
  38.     ss += "\x1A";
  39.     Serial.println(sim800MSG(ss));
  40.   }
  41. }

  42. boolean gprsINI()
  43. {
  44.   String msg;
  45.   msg = sim800MSG("AT+SAPBR=2,1");  
  46.   Serial.println(msg);
  47.   sim800MSG("ATE");
  48.   if(msg.indexOf("OK") > 0)
  49.   if(msg.indexOf("0.0.0.0") > 0)
  50.   {
  51.     sim800MSG("AT+SAPBR=3,1,"Contype","GPRS"");
  52.     sim800MSG("AT+SAPBR=3,1,"APN","CMNET"");
  53.     sim800MSG("AT+SAPBR=1,1");
  54.   }
  55.   else return 1;
  56.   delay(2000);
  57.   return 0;
  58. }

  59. String sim800MSG(String msg)
  60. {
  61.   String str;
  62.   boolean ActionFlag = false;
  63.   
  64.   if(msg.indexOf("HTTPACTION")>0)
  65.   ActionFlag = true;
  66.   
  67.   Serial1.println(msg);
  68.   while(!Serial1.available())
  69.   delay(10);
  70.   while(Serial1.available())
  71.   {
  72.     char c = Serial1.read();
  73.     str += c;
  74.     delayMicroseconds(1200);
  75.    // delay(2);
  76.   }
  77.   
  78.   if(ActionFlag)
  79.   {
  80.     while(!Serial1.available())
  81.     delay(10);
  82.    
  83.       while(Serial1.available())
  84.       {
  85.         char c = Serial1.read();
  86.         str += c;
  87.         delay(2);
  88.       }
  89.   }
  90. //  Serial.println(str);
  91.   return str;
  92. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-2-13 11:18:31 | 显示全部楼层
谢谢分享。不错
回复 支持 反对

使用道具 举报

发表于 2015-10-13 18:45:22 | 显示全部楼层
谢谢!麻烦问一下!为什么要判断是0.0.0.0才进行承载的配置呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-10-2 04:20 , Processed in 0.049469 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表