极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20785|回复: 6

用AT指令测试通过SIM900模块GPRS ,同时上传设备云和Yeelink

[复制链接]
发表于 2015-5-11 11:06:50 | 显示全部楼层 |阅读模式

用AT指令测试通过SIM900模块GPRS
,同时上传设备云(中国移动的物联网云平台,地址open.iot.10086.cn)(所有数据全部为随机数模拟),设备运地址:http://open.iot.10086.cn/devicev ... c485dee40b67aed0ff5
Yeelink地址:http://www.yeelink.net/devices/20806

代码如下:
  1. //使用MEGA2560 or UNO
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial Gsmserial(10,11);
  4. String TEMPdata="";
  5. #define apikey "oQQ*****************gKEA"  //替换成你自己的ApiKey
  6. unsigned long deviceid=7****1;    //替换成你自己的deviceid
  7. String sensorid="T***P";     //替换成你自己的sensorid
  8. String sensor1id="P***5";      //替换成你自己的sensorid
  9. #define Yapikey "8673******************23807"   //替换成你自己的ApiKey
  10. unsigned long Ydeviceid=2***6;    //替换成你自己的deviceid
  11. unsigned long Ysensorid=3***2;     //替换成你自己的sensorid
  12. unsigned long Ysensorid1=3***7;     //替换成你自己的sensorid
  13. #define LINEBREAK "\r\n"
  14. char server[]="api.heclouds.com";


  15. void setup()
  16. {
  17.   randomSeed(analogRead(A0));
  18.    Serial.begin(9600);
  19.    Gsmserial.begin(9600);
  20. Gsmserial.listen();
  21.   Serial.println("**********************************************************************");
  22.   Serial.println("debug========================AT");
  23.   String cmd=""AT"";
  24.   Gsmserial.println("AT");
  25.   delay(1000);
  26. returnmsg_ok();
  27. cmd=""AT+CPIN?"";
  28. Gsmserial.println("AT+CPIN?");
  29.     TEMPdata=""; returnmsg_ok();
  30.    Gsmserial.println("AT+CGCLASS="B"");
  31.     TEMPdata=""; returnmsg_ok();
  32.    Gsmserial.println("AT+CGDCONT=1,"IP","CMNET"");
  33.     TEMPdata=""; returnmsg_ok();
  34.     Gsmserial.println("AT+CGATT=1");
  35.    TEMPdata="";   returnmsg_ok();   
  36.   Serial.println("debug=========AT+CIPCLOSE");
  37. Gsmserial.println("AT+CIPCLOSE");
  38.     TEMPdata=""; returnmsg_ok_err();   


  39. }

  40. void loop()
  41. {

  42. ////////////////////////////////////////////////////////////////////读取各种数值

  43. int v1 = analogRead(A3)*random(3)/3;
  44. int v2 = analogRead(A3)*random(3)/2;
  45. int sensorReading = analogRead(A3)*random(3)/3;
  46. int sensorReading1 = analogRead(A3)*random(3)/2;
  47. Serial.print("VAL:");
  48. Serial.println(v1);
  49. postdate(v1,Yapikey,Ydeviceid,Ysensorid);
  50. delay (5000);
  51. postdate(v1,Yapikey,Ydeviceid,Ysensorid1);
  52. delay (5000);
  53. TEMPdata="";
  54. sendData(sensorReading,deviceid,sensorid);
  55. TEMPdata="";
  56. delay(5000);
  57. sendData(sensorReading1,deviceid,sensor1id);
  58. delay(5000);
  59.    
  60. }


  61. //////////////////////////////////////////////////////////////////////////////////////////////////////

  62. /////////////////////////////////////////////////////////////////
  63. //=================postdate传数据=====================
  64. void postdate(int SensorData , String APIKEY , unsigned long DEVICEID ,unsigned long SENSORID)
  65. {
  66. Gsmserial.println("AT+CIPSTART="TCP","api.yeelink.net",80");
  67. returnmsg_ok_con();   TEMPdata="";
  68. int l=getLength(SensorData);
  69. int D=getLength(DEVICEID);
  70. int S=getLength(SENSORID);
  71. int lens=232+D+S+l;
  72. Gsmserial.print("AT+CIPSEND=");
  73. returnmsg();  TEMPdata="";
  74. Gsmserial.println(lens);    //该数据是我摸索出来的,3天就是调这个,大家可以自己调调看,估计还和设备ID和传感器ID长度也有关系
  75. returnmsg();  TEMPdata="";
  76. delay(300);
  77. Gsmserial.print("POST /v1.0/device/");
  78. returnmsg();  TEMPdata="";
  79. Gsmserial.print(DEVICEID);
  80. returnmsg();  TEMPdata="";
  81. Gsmserial.print("/sensor/");
  82. returnmsg();  TEMPdata="";
  83. Gsmserial.print(SENSORID);
  84. returnmsg();  TEMPdata="";
  85. Gsmserial.print("/datapoints HTTP/1.1\r\nHost: api.yeelink.net\r\nAccept: */*\r\nU-ApiKey:");
  86. //Serial.print("/datapoints HTTP/1.1\r\nHost: api.yeelink.net\r\nAccept: */*\r\nU-ApiKey:");
  87. returnmsg();  TEMPdata="";
  88. Gsmserial.print(APIKEY);
  89. returnmsg();  TEMPdata="";
  90. Gsmserial.print("\r\nContent-Length: ");
  91. returnmsg();  TEMPdata="";
  92. Gsmserial.print(10+l);//浮点数据还要+3
  93. returnmsg();  TEMPdata="";
  94. Gsmserial.print("\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\n\r\n{"value":");
  95. returnmsg();  TEMPdata="";
  96. Gsmserial.print(SensorData);
  97. returnmsg();  TEMPdata="";
  98. Gsmserial.print("}\r\n\r\n");
  99. returnmsg_ok_finish();  TEMPdata="";
  100. }
  101. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  102. void sendData(int thisData,unsigned long deviceid,String sensorid )

  103. {
  104. int l=getLength(thisData);
  105. int D=getLength(deviceid);
  106. int S=sensorid.length();
  107. Serial.print("SSSSSSSSSSSSSSSSSSSSSSSSSSS==========");Serial.println(S);
  108. int lens=216+D+S+l;  //该数据是我摸索出来的,3天就是调这个,大家可以自己调调看,估计还和设备ID和传感器ID长度也有关系
  109. int lenss=53+S+l;
  110.   Serial.println("debug======AT+CIPSTART="TCP","183.230.40.33",80\r");
  111.   Gsmserial.println("AT+CIPSTART="TCP","183.230.40.33",80");
  112.       Serial.println("connecting...");
  113. returnmsg_ok_con();  TEMPdata="";

  114.     Gsmserial.print("AT+CIPSEND=");
  115.   Serial.println("debug============================AT+CIPSEND=");
  116. returnmsg();  TEMPdata="";
  117. Gsmserial.println(lens);   
  118. Serial.println(lens);
  119. returnmsg();  TEMPdata="";
  120.     Serial.println("debug============POST [url]http://api.heclouds.com/devices/[/url]");
  121.     Gsmserial.print("POST [url]http://api.heclouds.com/devices/[/url]");
  122. returnmsg();  TEMPdata="";
  123.     Gsmserial.print(deviceid);
  124. returnmsg();  TEMPdata="";
  125.     Gsmserial.print("/datapoints HTTP/1.1");
  126. returnmsg();  TEMPdata="";
  127.     Gsmserial.print(LINEBREAK);
  128. returnmsg();  TEMPdata="";
  129.     Gsmserial.print("Host: ");
  130. returnmsg();  TEMPdata="";
  131.     Gsmserial.print(server);
  132. returnmsg();  TEMPdata="";
  133.     Gsmserial.print(LINEBREAK);
  134. returnmsg();  TEMPdata="";
  135.     Gsmserial.print("api-key: ");
  136. returnmsg();  TEMPdata="";
  137.     Gsmserial.print(apikey);
  138. returnmsg();  TEMPdata="";
  139.     Gsmserial.print(LINEBREAK);
  140. returnmsg();  TEMPdata="";
  141.     Gsmserial.println("Connection: close");
  142. returnmsg();  TEMPdata="";
  143.     Gsmserial.print("Content-Length: ");
  144. returnmsg();  TEMPdata="";
  145.     Gsmserial.print(lenss);
  146. returnmsg();  TEMPdata="";
  147.     Gsmserial.print(LINEBREAK);
  148. returnmsg();  TEMPdata="";
  149.    Gsmserial.print(LINEBREAK);
  150. returnmsg();  TEMPdata="";
  151.     Gsmserial.print("{"datastreams":[{"id":"");
  152. returnmsg();  TEMPdata="";
  153.     Gsmserial.print(sensorid);
  154. returnmsg();  TEMPdata="";
  155.     Gsmserial.print("","datapoints":[{"value":");
  156. returnmsg();  TEMPdata="";
  157.     Gsmserial.print(thisData);
  158. returnmsg();  TEMPdata="";
  159.    Gsmserial.print("}]}]}");
  160. returnmsg();  TEMPdata="";
  161.     Gsmserial.print(LINEBREAK);
  162.     Gsmserial.print(LINEBREAK);
  163.     Gsmserial.print(LINEBREAK);  
  164.     Gsmserial.print(LINEBREAK);
  165. returnmsg_ok_finish();  TEMPdata="";
  166. }
  167. //////////////////////////////////////////////////////////////////////////////////////////////////////////

  168. int getLength(int someValue) {
  169.   int digits = 1;
  170.   int dividend = someValue /10;
  171.   while (dividend > 0) {
  172.     dividend = dividend /10;
  173.     digits++;
  174.   }
  175.   return digits;
  176. }
  177. ///////////////////////////////////////////////////////////////////////////////////////////
  178. void returnmsg_ok_con()
  179. {
  180.   while(1)
  181. {
  182. while(Gsmserial.available())
  183.   {
  184.      TEMPdata+=char(Gsmserial.read());
  185.      delay(1);
  186.                                                             
  187.   }
  188.   
  189.     if ((TEMPdata.indexOf("OK") > 3)&&(TEMPdata.indexOf("CONNECT") > 0))
  190.      {
  191.      Serial.println(TEMPdata);
  192.        Serial.println("");  
  193.        break;
  194.      }

  195. }
  196. return;
  197. }
  198. ////////////////////////////////////////////////////////////////////////////////////////////////
  199. void returnmsg_ok_finish()
  200. {
  201.   while(1)
  202. {
  203. while(Gsmserial.available())
  204.   {
  205.      TEMPdata+=char(Gsmserial.read());
  206. // Serial.println(TEMPdata);
  207.     delayMicroseconds(700);
  208.                                                             
  209.   }
  210.     if ((TEMPdata.indexOf("CLOSED") > 3)&&(TEMPdata.indexOf("OK") > 0))
  211.      {
  212.      Serial.println(TEMPdata);
  213.        Serial.println("");  
  214.        break;
  215.      }
  216.      else
  217.      {;}
  218. }
  219. return;
  220. }
  221. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  222. void returnmsg_ok()
  223. {

  224.   while(1)
  225. {
  226.      while( Gsmserial.available())
  227.          {
  228.             TEMPdata+=char( Gsmserial.read());
  229.             //Serial.println(TEMPdata);
  230.              delay(2);
  231.           }
  232.            if (TEMPdata.indexOf("OK") > 1)
  233.                   {
  234.                        Serial.println(TEMPdata);
  235.                         Serial.println("");  
  236.                         break ;
  237.      }
  238. }
  239.    return ;

  240. }

  241. //////////////////////////////////////////////////////////////////////

  242. void returnmsg()
  243. {
  244.   while(!Gsmserial.available())
  245. {}
  246. while( Gsmserial.available())
  247.   {
  248.      TEMPdata+=char( Gsmserial.read());
  249.    // Serial.println(TEMPdata);
  250.      delay(2);
  251.    }
  252.    Serial.println(TEMPdata);
  253. return;
  254. }
  255. //////////////////////////////////////////////////////////////////////////////////////


  256. void returnmsg_ok_err()
  257. {

  258.   while(1)
  259. {
  260.      while( Gsmserial.available())
  261.          {
  262.             TEMPdata+=char( Gsmserial.read());
  263.             //Serial.println(TEMPdata);
  264.              delay(2);
  265.           }
  266.            if ((TEMPdata.indexOf("OK") > 1)||(TEMPdata.indexOf("ERROR") > 1))
  267.                   {
  268.                        Serial.println(TEMPdata);
  269.                         Serial.println("");  
  270.                         break ;
  271.      }
  272. }
  273.    return ;

  274. }

  275. //////////////////////////////////////////////////////////////////////////////////////
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-5-11 11:58:39 | 显示全部楼层
谢谢分享,很有用
回复 支持 反对

使用道具 举报

发表于 2015-5-11 17:22:37 | 显示全部楼层
yeelink这两天不是异常了吗?
回复 支持 反对

使用道具 举报

发表于 2016-1-24 22:00:35 | 显示全部楼层
留个Mark,下次来用
回复 支持 反对

使用道具 举报

发表于 2016-3-28 13:17:27 | 显示全部楼层
谢谢分享   
回复 支持 反对

使用道具 举报

发表于 2016-8-1 15:54:29 | 显示全部楼层

留个Mark,下次来用
回复 支持 反对

使用道具 举报

发表于 2016-11-21 18:19:20 | 显示全部楼层
楼主这个费流量嘛?一次大概多少?乐为的支持tcp,不知道哪个更省?
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-16 22:05 , Processed in 0.051049 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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