oneNet之http请求上传云平台数据

#include<ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
 
const char* ssid     = "Xiaomi_1EDE";       // 连接 WiFi名 ,修改为自己的WiFi名                                      
const char* password = "1234567890";          // 连接 WiFi密码,修改为自己的WiFi密码
const char* host = "api.heclouds.com";
const char* url = "/devices/634373264/datapoints";   //634373264需要修改为自己的 设备ID
const char* apiKey = "nbrcxcO1PxNC9PnNBcYpxAMmFm0=";  //API KEY

HTTPClient httpClient;          //1、创建http的客户端
 
void setup() {
  Serial.begin(115200);  //启动串口,并设置波特率为115200
  connectWiFi();       //连接WiFi
}
 
void loop() {
   ESP.wdtFeed();
   httpClientRequest();  //通过客户端发送http请求,并响应
   delay(2000);
}

String serializeData(){
  //序列化数据
  const size_t capacity = 3*JSON_ARRAY_SIZE(2) + JSON_OBJECT_SIZE(1) + 7*JSON_OBJECT_SIZE(2);
  DynamicJsonDocument doc(capacity);
  
  JsonArray datastreams = doc.createNestedArray("datastreams");
  
  JsonObject datastreams_0 = datastreams.createNestedObject();
  datastreams_0["id"] = "temperature";
  
  JsonArray datastreams_0_datapoints = datastreams_0.createNestedArray("datapoints");
  
  JsonObject datastreams_0_datapoints_0 = datastreams_0_datapoints.createNestedObject();
  datastreams_0_datapoints_0["at"] = "2013-04-22T00:35:43";
  datastreams_0_datapoints_0["value"] = "bacd";
  
  JsonObject datastreams_0_datapoints_1 = datastreams_0_datapoints.createNestedObject();
  datastreams_0_datapoints_1["at"] = "2013-04-22T00:55:43";
  datastreams_0_datapoints_1["value"] = 84;
  
  JsonObject datastreams_1 = datastreams.createNestedObject();
  datastreams_1["id"] = "key";
  
  JsonArray datastreams_1_datapoints = datastreams_1.createNestedArray("datapoints");
  
  JsonObject datastreams_1_datapoints_0 = datastreams_1_datapoints.createNestedObject();
  datastreams_1_datapoints_0["at"] = "2013-04-22T00:35:43";
  
  JsonObject datastreams_1_datapoints_0_value = datastreams_1_datapoints_0.createNestedObject("value");
  datastreams_1_datapoints_0_value["x"] = 123;
  datastreams_1_datapoints_0_value["y"] = 123.994;
  
  JsonObject datastreams_1_datapoints_1 = datastreams_1_datapoints.createNestedObject();
  datastreams_1_datapoints_1["at"] = "2013-04-22T00:35:43";
  datastreams_1_datapoints_1["value"] = 23.001;
  String data;
  serializeJson(doc, data);
  return data;
}
 
void httpClientRequest(){ 
  httpClient.begin(host,80,url);       //2、通过begin函数配置请求地址。
  httpClient.addHeader("api-key",apiKey);
  String data =serializeData();   //序列化json数据
  int httpCode = httpClient.POST(data);  //3、通过GET函数启动连接并发送HTTP请求
  if (httpCode > 0) {
    Serial.printf("[HTTP] POST... code: %d\n", httpCode);
    if (httpCode == HTTP_CODE_OK) {
      String payload = httpClient.getString();    //获取响应体
      Serial.println(payload);
    } else {
      Serial.printf("[HTTP] POST... failed, error: %s\n", httpClient.errorToString(httpCode).c_str());
    }
  } else {
    Serial.printf("[HTTP] Unable to connect\n");
  }
  httpClient.end();
}
 
void connectWiFi(){
  Serial.println();
  Serial.print("Connecting to");
  Serial.println(ssid);
  WiFi.begin(ssid,password);                  //启动WIFI
  while(WiFi.status()!=WL_CONNECTED){         //判断WiFi的连接状态,如果没有连接成功,等待
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address:");
  Serial.println(WiFi.localIP());    //获取本机的IP
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值