編了幾個用于OneNet上傳數據和獲取數據的函數,貢獻出來
個人感覺使用官方的庫比較占內存,太多的功能和函數其實用不上,所以就自己編了幾個實用的函數,貢獻出來
歡迎大家積極實用OneNet。 - void setup() {
- // put your setup code here, to run once:
- #define WiFi_Port Serial3
- #define Debug_Port Serial
- }
- void loop() {
- // put your main code here, to run repeatedly:
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于向OneNet發送數據,根據你的需要可以隨意發送同一個設備下的n個數據流的數據點。本函數無返回值。 //
- //***********************************************************************************************************************//
- //本函數需要調用函數:String build_Post_HTTP_Header(unsigned long Device, String Host, String Key) //
- //他用來構造 HTTP頭字符串 //
- //其中 Device 為OneNet上的設備,為無符號長整數型; //
- //Host 為OneNet的HTTP主機"api.heclouds點com",可以定義為一個字符串再引,也可直接使用; //
- //Key 為 OneNet上對應設備的Apikey,或用戶的Masterkey,為字符串型 //
- //***********************************************************************************************************************//
- //本函數還調用函數 Make_Post_Json(),這是用于構造相應Json字符串的函數; //
- //***********************************************************************************************************************//
- //本函數還調用函數 returnmsg_ok_conWiFi();這個函數是判斷是否完成了TCP連接; //
- //***********************************************************************************************************************//
- //本函數還調用函數 returnmsgWiFi();主要是為了查看WiFi模塊是否正確接受了發送的數據以及回顯情,如不需要可用//來注銷; //
- //***********************************************************************************************************************//
- //本函數還調用函數 returnmsg_ok_finishWiFi();主要是用來判斷OneNet是否返回了正確信息 //
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void Post_Data()
- {
- String Send_info = build_Post_HTTP_Header(131278, "api.heclouds點com", "b6724PQP4FEVVI3sqMb3QIHh6boA" );
- int len = Send_info.length() + Make_Post_Json().length() + 4; //計算總長度,如用透傳則不需要,+4是加的 WiFi_Port.print("\r\n\r\n"); 兩個換行和兩個回車;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- delay(500);
- WiFi_Port.print("AT+CIPSEND=");
- returnmsgWiFi();
- WiFi_Port.println(len);
- returnmsgWiFi();
- delay(500);
- WiFi_Port.print(Send_info);
- returnmsgWiFi();
- WiFi_Port.print(Make_Post_Json());
- returnmsgWiFi();
- WiFi_Port.print("\r\n\r\n");
- returnmsg_ok_finishWiFi();
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于構造一個Json數據串 //
- //本函數需要調用函數:String Build_Json (String ID, long Value) //
- //其中ID 為OneNet上的設備中”數據流“ID,為字符串型; //
- //Value 為對應的數,為長整數型; //
- //他的返回值為構造好的,包含一數據流的數據點Json數據串; //
- //***************************************************************************************************************//
- //本函數還調用函數 String ADD_Post_JsonPar(String Json, String ID, long Value) //
- //他是用來給已構造好的Json數據串增加一個數據流數據點; //
- //Json 為前面已構造好的一個完整Json數據,ID為需要增加的數據流的ID, Value為對用的數據; //
- //他的返回值為構造好的含有多個數據流數值的Json串 //
- //***************************************************************************************************************//
- //如需增加多個數據流的數據,只需多次調用函數 String ADD_Post_JsonPar(String Json, String ID, long Value) //
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- String Make_Post_Json()
- {
- String _Json = Build_Post_Json("A01", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A02", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A03", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A04", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A05", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A06", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A07", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A08", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A09", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A10", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A11", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A12", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A13", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A14", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A15", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A16", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A17", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A18", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A19", random(1000));
- _Json = ADD_Post_JsonPar(_Json, "A20", random(1000));
- return _Json;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于構造一個只包含一個數據流數據點的基本Json數據串 //
- //其中ID 為OneNet上的設備中”數據流“ID,為字符串型; //
- //Value 為對應的數,為長整數型; //
- //他的返回值為構造好,包含一數據流的數據點數; //
- //形成Json數據串如此例:{"datastreams":[{"id":"TEMP","datapoints":[{"value":12345 }]}]} // //
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
- String Build_Post_Json (String ID, long Value)
- {
- String _Value = Value + String("");
- String _Json = "{\"datastreams\":[{\"id\":\"";
- _Json += ID;
- _Json += "\",\"datapoints\":";
- _Json += "[{\"value\":";
- _Json += _Value;
- _Json += "}]}]}";
- return _Json;
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用來給已構造好的Json數據串增加一個數據流數據點; //
- //Json 為前面已構造好的一個完整Json數據,ID為需要增加的數據流的ID, Value為對用的數據; //
- //他的返回值為構造好的含有多個數據流數值的Json串 //
- //*************************************************************************************************************************************//
- //如需增加多個數據流的數據,只需多次調用函數 String ADD_Post_JsonPar(String Json, String ID, long Value) //
- //形成Json數據串如此例:{"datastreams":[{"id":"TEMP","datapoints":[{"value":45 }]},{"id":"HUMI","datapoints":[{"value":32 }]}]} // //
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- String ADD_Post_JsonPar(String Json, String ID, long Value)
- {
- int LENS = Json.length();
- String _Json = Json.substring(0, LENS - 2); //-2是先去掉最后兩個字符“]}",然后追加”,"以及需要增加的ID的對應Json字符串,并加回"]}",夠造成一個完整的Json數據串
- _Json += +",{\"id\":\"";
- _Json += ID;
- _Json += "\",\"datapoints\":";
- _Json += "[{\"value\":";
- String _Value = Value + String("");
- _Json += _Value;
- _Json += "}]}]}";
- return _Json;
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于構造POST HTTP頭字符串 //
- //其中 Device 為OneNet上的設備,為無符號長整數型; //
- //Host 為OneNet的HTTP主機"api.heclouds點com",可以定義為一個字符串再引,也可直接使用; //
- //Key為 OneNet上對應設備的Apikey,或用戶的Masterkey,為字符串型 //
- //**************************************************************************************************************//
- //形成的HTTP頭字符串如下: //
- //POST http://api.heclouds點com/devices/77654/datapoints HTTP/1.1\r\n “\r\n”代表一個回車一個換行,兩個字符 //
- //Host: api.heclouds點com\r\n //
- //api-key: asdjoiSKFMdmcdslk1398247\r\n //
- //Connection: close\r\n //
- //Content-Length: 68\r\n\r\n 這里要兩次回車換行 //
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- String build_Post_HTTP_Header(unsigned long Device, String Host, String Key)
- {
- String _Device = String("") + Device;
- int Lens = Make_Post_Json().length();
- String _lens = Lens + String("");
- String HTTP_Header = "POST http://api.heclouds點com/devices/" + _Device + "/datapoints HTTP/1.1\r\n";
- HTTP_Header = HTTP_Header + "Host: " + Host + "\r\n";
- HTTP_Header = HTTP_Header + "api-key: " + Key + "\r\n" ;
- HTTP_Header = HTTP_Header + "Connection: close" + "\r\n" ;
- HTTP_Header = HTTP_Header + "Content-Length: " + _lens + "\r\n\r\n";
- return HTTP_Header;
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于向OneNet獲取(GET)一個或n個數據流的當前數據點,返回值為返回的Json字符串。 //
- //*********************************************************************************************************************//
- //本函數需要調用函數:String build_Post_HTTP_Header(unsigned long Device, String Host, String Key) //
- //他用來構造 HTTP頭字符串 //
- //其中 Device 為OneNet上的設備,為無符號長整數型; //
- //Host 為OneNet的HTTP主機"api.heclouds點com",可以定義為一個字符串再引,也可直接使用; //
- //Key 為 OneNet上對應設備的Apikey,或用戶的Masterkey,為字符串型 //
- //*********************************************************************************************************************//
- //本函數還調用函數 Make_GET_Json(),這是用于構造相應Json字符串的函數; //
- //*********************************************************************************************************************//
- //本函數還調用函數 returnmsg_ok_conWiFi();這個函數是判斷是否完成了TCP連接; //
- //*********************************************************************************************************************//
- //本函數還調用函數 returnmsgWiFi();主要是為了查看WiFi模塊是否正確接受了發送的數據以及回顯情,如不需要可用//來注銷; //
- //*********************************************************************************************************************//
- //本函數還調用函數 returnmsg_GET_S_WiFi();主要是用來生成返回值字符 //
- //他的返回值就是包含相應數據流當前數據點值的Json數據串 //
- //*********************************************************************************************************************//
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- String GET_Datapoints()
- {
- int len = Make_GET_Json().length() + 4; //計算總長度,如用透傳則不需要,+4是加的 WiFi_Port.print("\r\n\r\n"); 兩個換行和兩個回車;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- delay(1000);
- WiFi_Port.print("AT+CIPSEND=");
- returnmsgWiFi();
- WiFi_Port.println(len);
- returnmsgWiFi();
- delay(1000);
- WiFi_Port.print(Make_GET_Json());
- returnmsgWiFi();
- WiFi_Port.print("\r\n\r\n");
- String _ResulT = returnmsg_GET_S_WiFi();
- WiFi_Port.println("AT+CIPCLOSE");
- return _ResulT;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于分析String GET_Datapoints()取回的數據流的數據點 //
- //_Result為String GET_Datapoints()函數取回的結果; //
- //_Stream為想要分析的數據 //
- //返回值為對應的數據流的相應數值 //
- //如需分析多個數據,調用多次即可 //
- ///////////////////////////////////////////////////////////////////////////////////////////////////
- int Analyze_GET_Result(String _Result, String _Stream)
- {
- int _No1 = _Result.indexOf(_Stream);
- String _SubS1 = _Result.substring(_No1 - 22, _No1 - 3);
- int _No2 = _SubS1.indexOf(":");
- int _No3 = _SubS1.indexOf("}");
- String _SubS2 = _SubS1.substring(_No2 + 2, _No3 - 1);
- int _n = atoi(_SubS2.c_str());
- return _n;
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于構造一個包含一個或多個數據流數據點的GETJson數據串 //
- //本函數需要調用函數:String Build_GET_HTTP (String ID, String Key, long Device, String Host) //
- //其中ID 為OneNet上的設備中”數據流“ID,為字符串型; //
- //其中 Device 為OneNet上的設備,為無符號長整數型; //
- //Host 為OneNet的HTTP主機"api.heclouds點com",可以定義為一個字符串再引,也可直接使用; //
- //Key 為 OneNet上對應設備的Apikey,或用戶的Masterkey,為字符串型 //
- //他的返回值為構造好的,包含相應數據流的數據點Json數據串; //
- //******************************************************************************************************//
- //本函數還調用函數 String ADD_GET_HTTP_Par(String Json, String ID) //
- //他是用來給已構造好的Json數據串增加一個數據流數據點; //
- //Json 為前面已構造好的一個完整Json數據,ID為需要增加的數據流的ID; //
- //他的返回值為構造好的含有多個數據流數值的Json串 //
- //******************************************************************************************************//
- //如需GET多個數據流的數據點,只需多次調用函數 String ADD_GET_HTTP_Par(String Json, String ID) //
- //******************************************************************************************************//
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- String Make_GET_Json()
- {
- String _GET_HTTP= Build_GET_HTTP ("T001", "ankjsdvndfrehvngjoitre13290", 46788, "api.heclouds點com");
- _GET_HTTP = ADD_GET_HTTP_Par(_GET_HTTP, "T002");
- _GET_HTTP = ADD_GET_HTTP_Par(_GET_HTTP, "T003");
- _GET_HTTP = ADD_GET_HTTP_Par(_GET_HTTP, "T004");
- _GET_HTTP = ADD_GET_HTTP_Par(_GET_HTTP, "T005");
- _GET_HTTP = ADD_GET_HTTP_Par(_GET_HTTP, "T006");
- _GET_HTTP = ADD_GET_HTTP_Par(_GET_HTTP, "T006");
- _GET_HTTP = ADD_GET_HTTP_Par(_GET_HTTP, "T007");
- _GET_HTTP = ADD_GET_HTTP_Par(_GET_HTTP, "T008");
- return _GET_HTTP;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于構造 GET 數據流數據點的Json字符串 //
- //其中 Device 為OneNet上的設備,為無符號長整數型; //
- //Host 為OneNet的HTTP主機"api.heclouds點com",可以定義為一個字符串再引,也可直接使用; //
- //Key為 OneNet上對應設備的Apikey,或用戶的Masterkey,為字符串型 //
- //ID為需要獲取數據點的數據流的ID //
- //返回值為構造好的GET HTTP頭和Json的組合。 //
- //*******************************************************************************************//
- //他的返回Json數據串如下: //
- // GET /devices/54365/datapoints?datastream_id=K1 HTTP/1.1\r\n //
- //Host: api.heclouds點com\r\n //
- //api-key: asdjoiSKFMdmcdslk1398247\r\n //
- ///////////////////////////////////////////////////////////////////////////////////////////////
- String Build_GET_HTTP (String ID, String Key, long Device, String Host)
- {
- String _Device = Device + String("");
- String _HTTP = "GET /devices/" + _Device + "/datapoints?datastream_id=" + ID + " HTTP/1.1\r\n";
- _HTTP = _HTTP + "Host: " + Host + "\r\n";
- _HTTP = _HTTP + "api-key:" + Key + "\r\n";
- return _HTTP;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于對構造好的包含一個數據流數據點的GET HTTP頭和Json字符串組合,增加一個需要讀取的數據流 //
- //Json 為前面已構造好的一個完整Json數據,ID為需要增加的數據流的ID ; //
- //返回值為增加一個數據流后的GET HTTP頭和Json字符串組合 //
- //****************************************************************************************************//
- //如需增加多個數據流的數據,只需多次調用函數 String ADD_HTTPPar(String Json, String ID) //
- //****************************************************************************************************//
- //他的返回Json數據串如下: //
- // GET /devices/54365/datapoints?datastream_id=K1,K2 HTTP/1.1\r\n //
- //Host: api.heclouds點com\r\n //
- //api-key: asdjoiSKFMdmcdslk1398247\r\n //
- ////////////////////////////////////////////////////////////////////////////////////////////////////////
- String ADD_GET_HTTP_Par(String Json, String ID)
- {
- int _Lens = Json.length();
- int _Point1 = Json.indexOf(" HTTP/1.1");
- String SubString1 = Json.substring(0, _Point1);
- String SubString2 = Json.substring(_Point1, _Lens);
- String _HTTP = Json.substring(0, _Point1);
- _HTTP += ",";
- _HTTP += ID;
- _HTTP += Json.substring(_Point1, _Lens);
- return _HTTP;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////
- //本函數生成GET命令返回的信息字符串用于后續的分析 //
- //如大于3分鐘未返回結束信息則認為超時失敗,執行AT+CIPCLOSE,強行關閉TCP連接 //
- //判斷是否結束的關鍵字是"\"error\":\"succ\"}" //
- //返回值為系統返回的Json 數據串 //
- ///////////////////////////////////////////////////////////////////////////////////////////////
- String returnmsg_GET_S_WiFi()
- {
- String _TEMPdata = "";
- unsigned long _PT0 = 0;
- unsigned long _PT1 = 0;
- _PT0 = millis();
- _TEMPdata = "";
- while (1)
- {
- _PT1 = millis();
- if (_PT1 - _PT0 > 180000)
- {
- Debug_Port.println(" ");
- Debug_Port.println("Get error..................");
- WiFi_Port.println("AT+CIPCLOSE");
- return "false";
- }
- while (WiFi_Port.available())
- {
- _TEMPdata += char(WiFi_Port.read());
- // Debug_Port.println(TEMPdata);
- delayMicroseconds(500);
- }
- if (_TEMPdata.indexOf("\"error\":\"succ\"}") > 3)
- {
- Debug_Port.println(_TEMPdata);
- Debug_Port.println("");
- return _TEMPdata;
- }
- }
- }
- //********************************************************** OneNet WiFi send Data *******************************************************************************************************
- /////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送四個數據流的數據點,數值為整數類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid 對應數據流的ID,thisData 對應數據流的數值 //
- /////////////////////////////////////////////////////////////////////////////////////////////
- //
- void sendDataWiFi(String APIkey, int thisData, unsigned long deviceid ,String Host, String sensorid)
- {
- int l = getLength(thisData);
- int D = getLength(deviceid);
- int S = sensorid.length();
- int lenss = 53 + S + l;
- int lll = getLength(lenss);
- int lens = 214 + D + S + l + lll;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n"); returnmsgWiFi();
- WiFi_Port.print("api-key: ");
- returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: ");
- returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("{\"datastreams\":[{\"id\":\"");
- WiFi_Port.print(sensorid);
- returnmsgWiFi();
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- returnmsgWiFi();
- WiFi_Port.print(thisData);
- WiFi_Port.print("}]}]}");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- //********************************************************** OneNet WiFi send 2 Data *******************************************************************************************************
- /////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送四個數據流的數據點,數值為整數類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid1 對應數據流1的ID,Data1 對應數據流1的數值 //
- // sensorid2 對應數據流2的ID,Data2 對應數據流2的數值 //
- /////////////////////////////////////////////////////////////////////////////////////////////
- void send2DataWiFi(String APIkey, int Data1, int Data2, unsigned long deviceid,String Host, String sensorid1 , String sensorid2)
- {
- int l1 = getLength(Data1);
- int l2 = getLength(Data2);
- int D = getLength(deviceid);
- int S1 = sensorid1.length();
- int S2 = sensorid2.length();
- int lenss = 53 + 36 + S1 + l1 + S2 + l2; //增加一個數據流Lenss固定長度需要增加36;
- int l3 = getLength(lenss);
- int lens = 214 + 36 + D + S1 + l1 + S2 + l2 + l3; //增加一個數據流Lens固定長度需要增加36;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("api-key: ");
- returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: ");
- returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- ////////////////////////////////////////////////////////////////////sensor data
- WiFi_Port.print("{\"datastreams\":[");
- ///////////////////////////////////////////////////////////////////sensor1
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid1);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data1);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor2
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid2);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data2);
- WiFi_Port.print("}]}");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor end
- WiFi_Port.print("]}");
- ////////////////////////////////////////////////////sensor data end
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- //********************************************************** OneNet WiFi send 3 Data *******************************************************************************************************
- /////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送四個數據流的數據點,數值為整數類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid1 對應數據流1的ID,Data1 對應數據流1的數值 //
- // sensorid2 對應數據流2的ID,Data2 對應數據流2的數值 //
- // sensorid3 對應數據流3的ID,Data3 對應數據流3的數值 //
- /////////////////////////////////////////////////////////////////////////////////////////////
- void send3DataWiFi(String APIkey, int Data1, int Data2, int Data3, unsigned long deviceid,String Host, String sensorid1, String sensorid2, String sensorid3)
- {
- int l1 = getLength(Data1);
- int l2 = getLength(Data2);
- int l3 = getLength(Data3);
- int D = getLength(deviceid);
- int S1 = sensorid1.length();
- int S2 = sensorid2.length();
- int S3 = sensorid3.length();
- int lenss = 53 + 36 + 36 + S1 + l1 + S2 + l2 + S3 + l3; //增加一個數據流Lenss固定長度需要增加36,增加2個數據流需要增加2次36;
- int lll = getLength(lenss);
- int lens = 214 + 36 + 36 + D + lll + S1 + l1 + S2 + l2 + S3 + l3; //增加一個數據流Lens固定長度需要增加36,增加2個數據流需要增加2次36;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- delay(00);
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("api-key: "); returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: "); returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- ////////////////////////////////////////////////////////////////////sensor data
- WiFi_Port.print("{\"datastreams\":[");
- ///////////////////////////////////////////////////////////////////sensor1
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid1);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data1);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor2
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid2);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data2);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor2
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid3);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data3);
- WiFi_Port.print("}]}");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor end
- WiFi_Port.print("]}");
- ////////////////////////////////////////////////////sensor data end
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- //********************************************************** OneNet WiFi send 4 Data *******************************************************************************************************
- /////////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送四個數據流的數據點,數值為整數類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid1 對應數據流1的ID,Data1 對應數據流1的數值 //
- // sensorid2 對應數據流2的ID,Data2 對應數據流2的數值 //
- // sensorid3 對應數據流3的ID,Data3 對應數據流3的數值 //
- // sensorid4 對應數據流4的ID,Data4 對應數據流4的數值 //
- /////////////////////////////////////////////////////////////////////////////////////////////
- void send4DataWiFi(String APIkey, int Data1, int Data2, int Data3, int Data4, unsigned long deviceid,String Host, String sensorid1, String sensorid2, String sensorid3, String sensorid4)
- {
- int l1 = getLength(Data1);
- int l2 = getLength(Data2);
- int l3 = getLength(Data3);
- int l4 = getLength(Data4);
- int D = getLength(deviceid);
- int S1 = sensorid1.length();
- int S2 = sensorid2.length();
- int S3 = sensorid3.length();
- int S4 = sensorid4.length();
- int lenss = 53 + 36 + 36 + 36 + S1 + l1 + S2 + l2 + S3 + l3 + S4 + l4; //增加一個數據流Lenss固定長度需要增加36,增加3個數據流需要增加3次36;
- int lll = getLength(lenss);
- int lens = 214 + 36 + 36 + 36 + D + lll + S1 + l1 + S2 + l2 + S3 + l3 + S4 + l4; //增加一個數據流Lens固定長度需要增加36,增加3個數據流需要增加3次36;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- delay(00);
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("api-key: ");
- returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: ");
- returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- ////////////////////////////////////////////////////////////////////sensor data
- WiFi_Port.print("{\"datastreams\":[");
- ///////////////////////////////////////////////////////////////////sensor1
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid1);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data1);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor2
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid2);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data2);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor3
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid3);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data3);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor4
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid4);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data4);
- WiFi_Port.print("}]}");
- returnmsgWiFi();
- //////////////////////////////////////////////////////////////sensor end
- WiFi_Port.print("]}");
- ////////////////////////////////////////////////////sensor data end
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- //********************************************************** OneNet WiFi send Data *******************************************************************************************************
- /////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送一個數據流的數據點,數值為字符數組類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid 對應數據流1的ID,thisData對應數據流1的數值 //
- /////////////////////////////////////////////////////////////////////////////////////////
- void sendDataWiFiC(String APIkey, char *thisData, unsigned long deviceid,String Host, String sensorid )
- {
- int l = strlen(thisData);
- int D = getLength(deviceid);
- int S = sensorid.length();
- int lenss = 53 + S + l;
- int lll = getLength(lenss);
- int lens = 214 + D + S + l + lll;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("api-key: ");
- returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: ");
- returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("{\"datastreams\":[{\"id\":\"");
- WiFi_Port.print(sensorid);
- returnmsgWiFi();
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- returnmsgWiFi();
- WiFi_Port.print(thisData);
- WiFi_Port.print("}]}]}");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- //********************************************************** OneNet WiFi send 2 Data *******************************************************************************************************
- //////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送四個數據流的數據點,數值為字符串類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid1 對應數據流1的ID,Data1 對應數據流1的數值 //
- // sensorid2 對應數據流2的ID,Data2 對應數據流2的數值 //
- //////////////////////////////////////////////////////////////////////////////////////////
- void send2DataWiFiC(String APIkey, char * Data1, char * Data2, unsigned long deviceid,String Host, String sensorid1 , String sensorid2)
- {
- int l1 = strlen(Data1);
- int l2 = strlen(Data2);
- int D = getLength(deviceid);
- int S1 = sensorid1.length();
- int S2 = sensorid2.length();
- int lenss = 53 + 36 + S1 + l1 + S2 + l2; //增加一個數據流Lenss固定長度需要增加36,增加1個數據流需要增加1次36;
- int l3 = getLength(lenss);
- int lens = 214 + 36 + D + S1 + l1 + S2 + l2 + l3; //增加一個數據流Lens固定長度需要增加36,增加1個數據流需要增加1次36;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- delay(00);
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("api-key: ");
- returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: ");
- returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- ////////////////////////////////////////////////////////////////////sensor data
- WiFi_Port.print("{\"datastreams\":[");
- ///////////////////////////////////////////////////////////////////sensor1
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid1);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data1);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor2
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid2);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data2);
- WiFi_Port.print("}]}");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor end
- WiFi_Port.print("]}");
- ////////////////////////////////////////////////////sensor data end
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- //********************************************************** OneNet WiFi send 3 Data *******************************************************************************************************
- //////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送四個數據流的數據點,數值為字符串類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid1 對應數據流1的ID,Data1 對應數據流1的數值 //
- // sensorid2 對應數據流2的ID,Data2 對應數據流2的數值 //
- // sensorid3 對應數據流3的ID,Data3 對應數據流3的數值 //
- //////////////////////////////////////////////////////////////////////////////////////////
- void send3DataWiFiC(String APIkey, char * Data1, char * Data2, char * Data3, unsigned long deviceid,String Host, String sensorid1, String sensorid2, String sensorid3)
- {
- int l1 = strlen(Data1);
- int l2 = strlen(Data2);
- int l3 = strlen(Data3);
- int D = getLength(deviceid);
- int S1 = sensorid1.length();
- int S2 = sensorid2.length();
- int S3 = sensorid3.length();
- int lenss = 53 + 36 + 36 + S1 + l1 + S2 + l2 + S3 + l3; //增加一個數據流Lens固定長度需要增加36,增加2個數據流需要增加2次36;
- int lll = getLength(lenss);
- int lens = 214 + 36 + 36 + D + lll + S1 + l1 + S2 + l2 + S3 + l3; //增加一個數據流Lens固定長度需要增加36,增加2個數據流需要增加2次36;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- delay(00);
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("api-key: ");
- returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: ");
- returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- ////////////////////////////////////////////////////////////////////sensor data
- WiFi_Port.print("{\"datastreams\":[");
- ///////////////////////////////////////////////////////////////////sensor1
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid1);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data1);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor2
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid2);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data2);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor2
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid3);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data3);
- WiFi_Port.print("}]}");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor end
- WiFi_Port.print("]}");
- ////////////////////////////////////////////////////sensor data end
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- //********************************************************** OneNet WiFi send 4 Data *******************************************************************************************************
- //////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送四個數據流的數據點,數值為字符串類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid1 對應數據流1的ID,Data1 對應數據流1的數值 //
- // sensorid2 對應數據流2的ID,Data2 對應數據流2的數值 //
- // sensorid3 對應數據流3的ID,Data3 對應數據流3的數值 //
- // sensorid4 對應數據流4的ID,Data4 對應數據流4的數值 //
- //////////////////////////////////////////////////////////////////////////////////////////
- void send4DataWiFiC(String APIkey, char * Data1, char * Data2, char * Data3, char * Data4, unsigned long deviceid,String Host, String sensorid1, String sensorid2, String sensorid3, String sensorid4)
- {
- int l1 = strlen(Data1);
- int l2 = strlen(Data2);
- int l3 = strlen(Data3);
- int l4 = strlen(Data4);
- int D = getLength(deviceid);
- int S1 = sensorid1.length();
- int S2 = sensorid2.length();
- int S3 = sensorid3.length();
- int S4 = sensorid4.length();
- int lenss = 53 + 36 + 36 + 36 + S1 + l1 + S2 + l2 + S3 + l3 + S4 + l4; //增加一個數據流Lens固定長度需要增加36,增加3個數據流需要增加3次36;
- int lll = getLength(lenss);
- int lens = 214 + 36 + 36 + 36 + D + lll + S1 + l1 + S2 + l2 + S3 + l3 + S4 + l4; //增加一個數據流Lens固定長度需要增加36,增加3個數據流需要增加3次36;
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- delay(00);
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("api-key: ");
- returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: ");
- returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- ////////////////////////////////////////////////////////////////////sensor data
- WiFi_Port.print("{\"datastreams\":[");
- ///////////////////////////////////////////////////////////////////sensor1
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid1);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data1);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor2
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid2);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data2);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor3
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid3);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data3);
- WiFi_Port.print("}]},");
- returnmsgWiFi();
- ///////////////////////////////////////////////////////////////////sensor4
- WiFi_Port.print("{\"id\":\"");
- WiFi_Port.print(sensorid4);
- WiFi_Port.print("\",\"datapoints\":[{\"value\":");
- WiFi_Port.print(Data4);
- WiFi_Port.print("}]}");
- returnmsgWiFi();
- //////////////////////////////////////////////////////////////sensor end
- WiFi_Port.print("]}");
- ////////////////////////////////////////////////////sensor data end
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- //********************************************************** OneNet WiFi send GPS Data *******************************************************************************************************
- ////////////////////////////////////////////////////////////////////////////////////
- //本函數用于發送GPS數據流的數據點,數值為整數類型 //
- // APIkey OneNet對應設備的MasterKey或Apikey //
- // deviceid 對應設備的ID //
- // Host HTTP服務器名稱 //
- // sensorid 對應GPS數據流的ID //
- // LON 對應經度的數值 //
- // LAT 對應緯度數值 //
- // HEIGH 對應海拔高度數值; //
- ////////////////////////////////////////////////////////////////////////////////////
- void sendGPSDataWiFi(char* HEIGH, unsigned long deviceid, String sensorid,String Host, char* LON, char* LAT, String APIkey )
- {
- int l = strlen(HEIGH);
- int D = getLength(deviceid);
- int S = sensorid.length();
- int Lonlen = strlen(LON);
- int Latlen = strlen(LAT);
- int lenss = 53 + 28 + S + l + Lonlen + Latlen;
- int l2 = getLength(lenss);
- int lens = 214 + 28 + D + S + l + Lonlen + Latlen + l2;
- WiFi_Port.println(lens);
- WiFi_Port.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");
- returnmsg_ok_conWiFi();
- Debug_Port.println("connecting...");
- WiFi_Port.print("AT+CIPSEND=");
- returnmsgWiFi();
- WiFi_Port.println(lens);
- returnmsg_ok_1WiFi();
- WiFi_Port.print("POST http://api.heclouds點com/devices/");
- returnmsgWiFi();
- WiFi_Port.print(deviceid);
- returnmsgWiFi();
- WiFi_Port.print("/datapoints HTTP/1.1");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("Host: ");
- returnmsgWiFi();
- WiFi_Port.print(Host);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("api-key: ");
- returnmsgWiFi();
- WiFi_Port.print(APIkey);
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.println("Connection: close");
- returnmsgWiFi();
- WiFi_Port.print("Content-Length: ");
- returnmsgWiFi();
- WiFi_Port.print(lenss);
- returnmsgWiFi(); WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("{\"datastreams\":[{\"id\":\"");
- returnmsgWiFi();
- WiFi_Port.print(sensorid);
- returnmsgWiFi();
- WiFi_Port.print("\",\"datapoints\":[{\"value\":{\"lon\":\"");
- returnmsgWiFi();
- WiFi_Port.print(LON);
- returnmsgWiFi();
- WiFi_Port.print("\",\"lat\":\"");
- returnmsgWiFi();
- WiFi_Port.print(LAT);
- returnmsgWiFi();
- WiFi_Port.print("\",\"ele\":\"");
- returnmsgWiFi();
- WiFi_Port.print(HEIGH);
- returnmsgWiFi();
- WiFi_Port.print("\"}}]}]}");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- returnmsgWiFi();
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- WiFi_Port.print("\r\n");
- returnmsg_ok_finishWiFi();
- }
- ///////////////////////////////////////////////////////////////////////////////
- //本函數用于判斷串口發揮至是否有關鍵字“OK” //
- //如60秒內無正確返回,強制執行AT+CIPCLOSE,強行關閉TCP連接 //
- ///////////////////////////////////////////////////////////////////////////////
- void returnmsg_okWiFi()
- {
- String _TEMPdata = "";
- unsigned long _PT0 = 0;
- unsigned long _PT1 = 0;
- _PT0 = millis();
- _TEMPdata = "";
- while (1)
- {
- _PT1 = millis();
- if (_PT1 - _PT0 > 60000)
- {
- Debug_Port.println(" ");
- Debug_Port.println("Get error..................");
- WiFi_Port.println("AT+CIPCLOSE");
- return ;
- }
- while (WiFi_Port.available())
- {
- _TEMPdata += char(WiFi_Port.read());
- //Debug_Port.println(_TEMPdata);
- delay(2);
- }
- if (_TEMPdata.indexOf("OK") > 0)
- {
- // Debug_Port.println(_TEMPdata);
- Debug_Port.println("");
- _TEMPdata = "";
- break;
- }
- else
- {
- delay(1);
- }
- }
- return;
- }
- ///////////////////////////////////////////////////////////////////
- //本函數用于打印WiFi的串口返回信息,用于Debug,無實際作用 //
- ///////////////////////////////////////////////////////////////////
- void returnmsgWiFi()
- {
- String _TEMPdata = "";
- while (!WiFi_Port.available())
- {
- }
- while (WiFi_Port.available())
- {
- _TEMPdata += char(WiFi_Port.read());
- delay(1);
- }
- Debug_Port.print(_TEMPdata);
- _TEMPdata = "";
- return;
- }
- ///////////////////////////////////////////////////////////////////////////////
- //本函數用于判斷串口發揮至是否有關鍵字“OK”和“ready” //
- //如60秒內無正確返回,強制執行AT+CIPCLOSE,強行關閉TCP連接 //
- ///////////////////////////////////////////////////////////////////////////////
- void returnmsg_ok_readyWiFi()
- {
- String _TEMPdata = "";
- unsigned long _PT0 = 0;
- unsigned long _PT1 = 0;
- _PT0 = millis();
- _TEMPdata = "";
- while (1)
- {
- _PT1 = millis();
- if (_PT1 - _PT0 > 60000)
- {
- Debug_Port.println(" ");
- Debug_Port.println("Get error..................");
- WiFi_Port.println("AT+CIPCLOSE");
-
- return ;
- }
- while (WiFi_Port.available())
- {
- _TEMPdata += char(WiFi_Port.read());
- //DebugDebug_Port.println(_TEMPdata);
- delayMicroseconds(800);
- }
- if ((_TEMPdata.indexOf("OK") > 0) && (_TEMPdata.indexOf("ready") > 0))
- {
- // Debug_Port.println(_TEMPdata);
- Debug_Port.println("");
- _TEMPdata = "";
- break;
- }
- }
- return;
- }
- ///////////////////////////////////////////////////////////////////////////////
- //本函數用于判斷是否正確的完成了TCP連接; //
- //判斷標志為返回了“OK”以及"CONNECT" //
- //如超過20秒還沒收到以上兩個關鍵字,則主動執行一次關閉連接操作并退出 //
- ///////////////////////////////////////////////////////////////////////////////
- void returnmsg_ok_conWiFi()
- {
- String _TEMPdata = "";
- unsigned long _PT0 = 0;
- unsigned long _PT1 = 0;
- _PT0 = millis();
- _TEMPdata = "";
- while (1)
- {
- _PT1 = millis();
- if (_PT1 - _PT0 > 20000)
- {
- Debug_Port.println(" ");
- Debug_Port.println("Get error..................");
- WiFi_Port.println("AT+CIPCLOSE");
- returnmsgWiFi();
- return ;
- }
- while (WiFi_Port.available())
- {
- _TEMPdata += char(WiFi_Port.read());
- delay(1);
- }
- if ((_TEMPdata.indexOf("OK") > 3) && (_TEMPdata.indexOf("CONNECT") > 0))
- {
- Debug_Port.println(_TEMPdata);
- Debug_Port.println("");
- _TEMPdata = "";
- break;
- }
- }
- return;
- }
- ////////////////////////////////////////////////////////////////////////////////////
- //本函數用于判斷服務器收到相應的命令后是否正確的執行并返回了相應的信息。 //
- //判斷標志為返回了“OK”以及"CLOSED" //
- //如超過20秒還沒收到以上兩個關鍵字,則主動執行一次關閉連接操作并退出。 //
- ////////////////////////////////////////////////////////////////////////////////////
- void returnmsg_ok_finishWiFi()
- {
- String _TEMPdata = "";
- unsigned long _PT0 = 0;
- unsigned long _PT1 = 0;
- _PT0 = millis();
- _TEMPdata = "";
- while (1)
- {
- _PT1 = millis();
- if (_PT1 - _PT0 > 20000)
- {
- Debug_Port.println(" ");
- Debug_Port.println("Get error..................");
- WiFi_Port.println("AT+CIPCLOSE");
- returnmsgWiFi();
- return ;
- }
- while (WiFi_Port.available())
- {
- _TEMPdata += char(WiFi_Port.read());
- // Debug_Port.println(_TEMPdata);
- delayMicroseconds(700);
- }
- if ((_TEMPdata.indexOf("CLOSED") > 3) && (_TEMPdata.indexOf("OK") > 0))
- {
- Debug_Port.println(_TEMPdata);
- Debug_Port.println("");
- _TEMPdata = "";
- break;
- }
- else
- {
- ;
- }
- }
- return;
- }
- /////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于判斷CIPSEND后是否返回了“OK”或“close” //
- //收到任何一個都退出。 //
- /////////////////////////////////////////////////////////////////////////////////////////
- void returnmsg_ok_errWiFi()
- {
- String _TEMPdata = "";
- unsigned long _PT0 = 0;
- unsigned long _PT1 = 0;
- _PT0 = millis();
- _TEMPdata = "";
- while (1)
- {
- while ( WiFi_Port.available())
- {
- _TEMPdata += char( WiFi_Port.read());
- //Debug_Port.println(_TEMPdata);
- delay(2);
- }
- if ((_TEMPdata.indexOf("OK") > 1) || (_TEMPdata.indexOf("ERROR") > 1))
- {
- Debug_Port.println(_TEMPdata);
- Debug_Port.println("");
- _TEMPdata = "";
- break ;
- }
- }
- return ;
- }
- /////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于判斷CIPSEND后是否返回了“OK”和“close” //
- //如超過20秒沒有還沒收到以上兩個關鍵字,則主動執行一次關閉連接操作并退出。 //
- /////////////////////////////////////////////////////////////////////////////////////////
- void returnmsg_ok_closeWiFi()
- {
- String _TEMPdata = "";
- unsigned long _PT0 = 0;
- unsigned long _PT1 = 0;
- _PT0 = millis();
- _TEMPdata = "";
- while (1)
- {
- _PT1 = millis();
- if (_PT1 - _PT0 > 20000)
- {
- Debug_Port.println(" ");
- Debug_Port.println("Get error..................");
- WiFi_Port.println("AT+CIPCLOSE");
-
- return ;
- }
- while (WiFi_Port.available())
- {
- _TEMPdata += char(WiFi_Port.read());
- // DebugDebug_Port.println(_TEMPdata);
- delayMicroseconds(700);
- }
- if ((_TEMPdata.indexOf("close") > 3) && (_TEMPdata.indexOf("OK") > 0))
- {
- Debug_Port.println(_TEMPdata);
- Debug_Port.println("");
- _TEMPdata = "";
- break;
- }
- else
- {
- ;
- }
- }
- return;
- }
- /////////////////////////////////////////////////////////////////////////////////////////
- //本函數用于判斷CIPSEND后是否返回了“>” //
- //如超過20秒沒有還沒收到以上關鍵字,則主動執行一次關閉連接操作并退出。 //
- /////////////////////////////////////////////////////////////////////////////////////////
- void returnmsg_ok_1WiFi()
- {
- String _TEMPdata = "";
- unsigned long _PT0 = 0;
- unsigned long _PT1 = 0;
- _PT0 = millis();
- _TEMPdata = "";
- while (1)
- {
- _PT1 = millis();
- if (_PT1 - _PT0 > 20000)
- {
- Debug_Port.println(" ");
- Debug_Port.println("Get error..................");
- WiFi_Port.println("AT+CIPCLOSE");
-
- return ;
- }
- while (WiFi_Port.available())
- {
- _TEMPdata += char(WiFi_Port.read());
- // DebugDebug_Port.println(_TEMPdata);
- delay(2);
- }
- if (_TEMPdata.indexOf(">") > 0)
- {
- Debug_Port.println(_TEMPdata);
- Debug_Port.println("");
- _TEMPdata = "";
- break;
- }
- else
- {
- delay(1);
- }
- }
- return;
- }
- ///////////////////////////////////////////////////////////////////
- //本函數用于計算一個長整型數值的長度 //
- //返回值為int類型數值 //
- ///////////////////////////////////////////////////////////////////
- int getLength(unsigned long someValue)
- {
- int digits = 1;
- int dividend = someValue / 10;
- while (dividend > 0) {
- dividend = dividend / 10;
- digits++;
- }
- return digits;
- }
復制代碼
|