久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2341|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

esp用arduinoide對接onenet 基于ESP8266的制作作品源碼以及資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:267429 發(fā)表于 2019-3-26 21:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于ESP8266對接機智云介紹

單片機源程序如下:
  1. /*
  2. HTTP協(xié)議實現(xiàn)post和get發(fā)往onenet平臺。
  3. post為溫濕度上傳。
  4. get為開關(guān)消息獲取并執(zhí)行。
  5. 阿正修改,資源源于網(wǎng)絡(luò)。
  6. */
  7. #include <ESP8266WiFi.h>
  8. #include <ESP8266HTTPClient.h>
  9. #include <ArduinoJson.h>
  10. #include <DHT.h>
  11. #define LED 14                             //配網(wǎng)指示燈D5/GPIO14
  12. #define DEBUG 0
  13. #define ledPin 14                          // 定義ledPin連接到D5/GPIO14
  14. #define DHTPIN 12                         // 溫濕度模塊 D6 GPIO12
  15. #define DHTTYPE DHT11
  16. int ds;
  17. const char* host = "api.heclouds.com";
  18. const char* APIKEY = "dDu2j8l23dNMJSWv5XVqfc6hXoM=";    // API KEY    改成你自己的
  19. int32_t deviceId = 28315875;                             // Device ID    改成你自己的
  20. const char* DataStreams = "led";           //四個數(shù)據(jù)流       改成你自己的
  21. const char* DS_Temp = "wendu";
  22. const char* DS_Baojing = "w_baojing";
  23. const char* DS_Hum = "shidu";
  24. const size_t MAX_CONTENT_SIZE = 1024;
  25. const unsigned long HTTP_TIMEOUT = 2100;               // max respone time from server
  26. WiFiClient client;
  27. const int tcpPort = 80;                                //80端口
  28. DHT dht(DHTPIN, DHTTYPE);
  29. struct UserData {
  30.   int errno_val;                // 錯誤返回值
  31.   char error[32];               // 錯誤返回信息
  32.   int test_led_Val;             // TEST LED 狀態(tài)值
  33.   char udate_at[32];            // 最后更新時間及日期
  34. };

  35. // Skip HTTP headers so that we are at the beginning of the response's body
  36. //  -- 跳過 HTTP 頭,使我們在響應(yīng)正文的開頭
  37. bool skipResponseHeaders() {
  38.   // HTTP headers end with an empty line
  39.   char endOfHeaders[] = "\r\n\r\n";

  40.   client.setTimeout(HTTP_TIMEOUT);
  41.   bool ok = client.find(endOfHeaders);

  42.   if (!ok) {
  43.     Serial.println("No response or invalid response!");
  44.   }
  45.   return ok;
  46. }
  47. // Read the body of the response from the HTTP server -- 從HTTP服務(wù)器響應(yīng)中讀取正文
  48. void readReponseContent(char* content, size_t maxSize) {
  49.   //  size_t length = client.peekBytes(content, maxSize);
  50.   size_t length = client.readBytes(content, maxSize);
  51.   delay(20);
  52.   Serial.println(length);
  53.   Serial.println("Get the data from Internet!");
  54.   content[length] = 0;
  55.   Serial.println(content);
  56.   Serial.println("Read Over!");
  57. }
  58. bool parseUserData_test(char* content, struct UserData* userData) {
  59.   // Compute optimal size of the JSON buffer according to what we need to parse.
  60.   //  -- 根據(jù)我們需要解析的數(shù)據(jù)來計算JSON緩沖區(qū)最佳大小
  61.   // This is only required if you use StaticJsonBuffer. -- 如果你使用StaticJsonBuffer時才需要
  62.   const size_t BUFFER_SIZE = 1024;
  63.   // Allocate a temporary memory pool on the stack -- 在堆棧上分配一個臨時內(nèi)存池
  64.   StaticJsonBuffer<BUFFER_SIZE> jsonBuffer;
  65.   //  -- 如果堆棧的內(nèi)存池太大,使用 DynamicJsonBuffer jsonBuffer 代替
  66.   // If the memory pool is too big for the stack, use this instead:
  67.   //  DynamicJsonBuffer jsonBuffer;
  68.   JsonObject& root = jsonBuffer.parseObject(content);
  69.   if (!root.success()) {
  70.     Serial.println("JSON parsing failed!");
  71.     return false;
  72.   }
  73.   // Here were copy the strings we're interested in
  74.   userData->errno_val = root["errno"];
  75.   strcpy(userData->error, root["error"]);
  76.   if ( userData->errno_val == 0 ) {
  77.     userData->test_led_Val = root["data"]["current_value"];
  78.     strcpy(userData->udate_at, root["data"]["update_at"]);
  79.     Serial.print("YF-Test_LED Value : ");
  80.     Serial.print(userData->test_led_Val);
  81.     Serial.print("\t The last update time : ");
  82.     Serial.println(userData->udate_at);
  83.   }
  84.   Serial.print("errno : ");
  85.   Serial.print(userData->errno_val);
  86.   Serial.print("\t error : ");
  87.   Serial.println(userData->error);
  88.   return true;
  89. }
  90. void colLED(int sta) {
  91.   digitalWrite(ledPin, sta);
  92. }
  93. void smartConfig()//智能配網(wǎng),可以微信掃一掃進行配網(wǎng),或者用app進行配網(wǎng)。
  94. {
  95.   WiFi.mode(WIFI_STA);
  96.   Serial.println("\r\nWait for Smartconfig");
  97.   WiFi.beginSmartConfig();
  98.   while (1)
  99.   {
  100.     Serial.print(".");
  101.     digitalWrite(LED, 0);
  102.     delay(500);
  103.     digitalWrite(LED, 1);
  104.     delay(500);
  105.     if (WiFi.smartConfigDone())
  106.     {
  107.       Serial.println("SmartConfig Success");
  108.       Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
  109.       Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
  110.       break;
  111.     }
  112.   }
  113. }
  114. void tcp_test () {
  115.   if (!client.connect(host, tcpPort)) {//鏈接tcp服務(wù)器測試
  116.     Serial.println("connection failed");
  117.     return;
  118.   }
  119. }
  120. void setup() {
  121.   WiFi.mode(WIFI_AP_STA);                 //set work mode:  WIFI_AP /WIFI_STA /WIFI_AP_STA
  122.   Serial.begin(115200);                  //傳輸波特率
  123.   pinMode(ledPin, OUTPUT);
  124.   dht.begin();                            //初始化溫濕度模塊
  125.   smartConfig();                          //開啟自動配網(wǎng)。
  126. }
  127. void loop() {
  128.   float h = dht.readHumidity();
  129.   float t = dht.readTemperature();
  130.   if (isnan(h) || isnan(t)) {             //檢測dht溫濕度故障
  131.     Serial.println("Failed to read from DHT sensor!");
  132.     return;
  133.   }
  134.   tcp_test ();                             //tcp鏈接校驗
  135.   getdata();                                //獲取下發(fā)的數(shù)據(jù)流
  136.   tcp_test ();                              //tcp鏈接校驗
  137.   postData(deviceId, t, h);                 //發(fā)送上報的數(shù)據(jù)流
  138. }







  139. void postData(int dId, float val_t, float val_h) {    //采用post方式發(fā)包,進行http協(xié)議溫濕度上傳
  140.   String url = "/devices/";
  141.   url += String(dId);
  142.   url += "/datapoints?type=3";           //http://open.iot.10086.cn/doc/art190.html#43
  143.   String data = "{\"" + String(DS_Temp) + "\":" + String(val_t) + ",\"" + String(DS_Hum) + "\":" + String(val_h) + ",\"" +  String(DS_Baojing) + "\":" + String(val_t) + "}";
  144.   Serial.println(data);
  145.   Serial.print("data length:");
  146.   Serial.println(String(data.length()));
  147.   String post_data = "POST " + url + " HTTP/1.1\r\n" +
  148.                      "api-key:" + APIKEY + "\r\n" +
  149.                      "Host:" + host + "\r\n" +
  150.                      "Content-Length: " + String(data.length()) + "\r\n" +
  151.                      "Connection: close\r\n\r\n" +
  152.                      data;
  153.   client.print(post_data);
  154. }
  155. void getdata() {                         //采用get方式獲取服務(wù)器數(shù)據(jù)反饋進行開關(guān)繼電器操作
  156.   // We now create a URI for the request
  157.   String url2 = "/devices/";
  158.   url2 += String(deviceId);
  159.   url2 += "/datastreams/";
  160.   url2 += DataStreams;
  161.   String send_data = String("GET ") + url2 + " HTTP/1.1\r\n" +
  162.                      "api-key:" + APIKEY + "\r\n" +
  163.                      "Host:" + host + "\r\n" +
  164.                      "Connection: close\r\n\r\n";
  165.   client.print(send_data);
  166.   if (DEBUG) {
  167.     Serial.println(send_data);
  168.   }
  169.   if (skipResponseHeaders())  { //  發(fā)送請求json解析
  170.     char response[MAX_CONTENT_SIZE];
  171.     readReponseContent(response, sizeof(response));
  172.     UserData userData_testLED;
  173.     if (parseUserData_test(response, &userData_testLED)) {
  174.       Serial.println("daily data parse OK!");
  175.       colLED(userData_testLED.test_led_Val);
  176.     }
  177.   }
  178. }
復(fù)制代碼

所有資料51hei提供下載:
esp用arduinoide對接onenet.zip (3.56 KB, 下載次數(shù): 30)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久伊人精品一区二区三区 | 日韩高清国产一区在线 | 黄色大片视频 | 久久精品成人 | 国产精品视频一区二区三区 | 国产精品久久久久久久久久免费看 | 国产一区91精品张津瑜 | 超碰最新在线 | 久久国产欧美日韩精品 | 国产精品一区二区免费看 | 网色 | 男人天堂99| 日韩欧美国产一区二区三区 | 欧美精品在线一区二区三区 | 久久精品久久久 | 欧美亚洲第一区 | 精品国产青草久久久久96 | 久久综合一区 | 免费九九视频 | 中文字幕在线精品 | 91精品国产91久久久久久最新 | 日韩免费视频一区二区 | 91av在线免费播放 | 国产精品美女久久久久aⅴ国产馆 | 免费在线播放黄色 | 99综合网| 国久久 | 精品视频在线观看 | 天天干天天色 | 免费观看毛片 | 亚洲国产一区二区三区 | 青青草这里只有精品 | 亚洲精品视频观看 | www久久国产 | 久久久久国产一区二区三区四区 | 中文字幕一区二区三区四区 | 亚洲在线一区 | 免费国产网站 | 在线国产视频观看 | 国产精品色 | 看av网|