zoukankan      html  css  js  c++  java
  • 中国移动OneNet平台上传GPS数据JSON格式

    最终目的输出

    POST /devices/3225187/datapoints HTTP/1.1
    api-key: R9xO5NZm6oVI4YBHvCPKEqtwYtMA
    Host: api.heclouds.com
    Content-Length:81
    
    {"datastreams":[{"id":"location","datapoints":[{"value":{"lon":106,"lat":29}}]}]}
    

    1. 使用arduino代码组合出来HTTP头

    使用OneNet官方提供的Httppacket库

    #include <HttpPacket.h>
    
    HttpPacketHead packet;
    
    void setup() {
      // put your setup code here, to run once:
    
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
    
        // put your main code here, to run repeatedly:
      // char *p = "{"datastreams":[{"id":"sys_time","datapoints":[{"value":50}]}]}";
      char *p = "{"datastreams":[{"id":"location","datapoints":[{"value":{"lon":106,"lat":29}}]}]}";
      
      packet.setHostAddress("api.heclouds.com");
      packet.setDevId("3225187");   //device_id
      packet.setAccessKey("R9xO5NZm6oVI4YBHvCPKEqtwYtMA");  //API_KEY
      // packet.setDataStreamId("<datastream_id>");    //datastream_id
      // packet.setTriggerId("<trigger_id>");
      // packet.setBinIdx("<bin_index>");
    
      /*create the http message about add datapoint */
      packet.createCmdPacket(POST, TYPE_DATAPOINT, p);
      if (strlen(packet.content))
        Serial.print(packet.content);
      Serial.print(p);
      Serial.println("
    ");
    }
    

    2.使用JSON库合成JSON数据

    #include <ArduinoJson.h>
    
    void setup() {
      Serial.begin(9600);
    
      StaticJsonBuffer<200> jsonBuffer;
    
    
      JsonObject& lon_lat = jsonBuffer.createObject();
      lon_lat["lon"] = 106;
      lon_lat["lat"] = 29;
    
      JsonObject& value = jsonBuffer.createObject();
      value["value"] = lon_lat;
    
      JsonObject& id_datapoints = jsonBuffer.createObject();
      id_datapoints["id"] = "location";
      JsonArray& datapoints = id_datapoints.createNestedArray("datapoints");
      datapoints.add(value);
    
      JsonObject& myJson = jsonBuffer.createObject();
      JsonArray& datastreams = myJson.createNestedArray("datastreams");
      datastreams.add(id_datapoints);
    
      myJson.printTo(Serial);
      Serial.print("
    
    ");
    
      //格式化输出
      myJson.prettyPrintTo(Serial);
    
      char p[200];
      Serial.print("
    ---------
    ");
      int num = myJson.printTo(p,sizeof(p));
      Serial.print(p);
      Serial.print("
    ============
    ");
      Serial.print(num);
    
    }
    
    void loop() {
      // not used in this example
    }
    

    串口输出效果

    {"datastreams":[{"id":"location","datapoints":[{"value":{"lon":106,"lat":29}}]}]}
    
    {
      "datastreams": [
        {
          "id": "location",
          "datapoints": [
            {
              "value": {
                "lon": 106,
                "lat": 29
              }
            }
          ]
        }
      ]
    }
    ---------
    {"datastreams":[{"id":"location","datapoints":[{"value":{"lon":106,"lat":29}}]}]}
    ============
    81
    

    3. 综合HTTP头和JSON输出需要的POST请求

    #include <HttpPacket.h>
    #include <ArduinoJson.h>
    
    
    HttpPacketHead packet;
    
    void setup() {
      // put your setup code here, to run once:
    
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
    
      //合成POST请求
      StaticJsonBuffer<200> jsonBuffer;
    
      JsonObject& lon_lat = jsonBuffer.createObject();
      lon_lat["lon"] = 106;
      lon_lat["lat"] = 29;
    
      JsonObject& value = jsonBuffer.createObject();
      value["value"] = lon_lat;
    
      JsonObject& id_datapoints = jsonBuffer.createObject();
      id_datapoints["id"] = "location";
      JsonArray& datapoints = id_datapoints.createNestedArray("datapoints");
      datapoints.add(value);
    
      JsonObject& myJson = jsonBuffer.createObject();
      JsonArray& datastreams = myJson.createNestedArray("datastreams");
      datastreams.add(id_datapoints);
    
      char p[200];
      int num = myJson.printTo(p,sizeof(p));
    
      
      packet.setHostAddress("api.heclouds.com");
      packet.setDevId("3225187");   //device_id
      packet.setAccessKey("R9xO5NZm6oVI4YBHvCPKEqtwYtMA");  //API_KEY
      // packet.setDataStreamId("<datastream_id>");    //datastream_id
      // packet.setTriggerId("<trigger_id>");
      // packet.setBinIdx("<bin_index>");
    
      /*create the http message about add datapoint */
      packet.createCmdPacket(POST, TYPE_DATAPOINT, p);
      if (strlen(packet.content))
        Serial.print(packet.content);
      Serial.print(p);
    

    成功输出

    POST /devices/3225187/datapoints HTTP/1.1
    api-key: R9xO5NZm6oVI4YBHvCPKEqtwYtMA
    Host: api.heclouds.com
    Content-Length:81
    
    {"datastreams":[{"id":"location","datapoints":[{"value":{"lon":106,"lat":29}}]}]}
    
  • 相关阅读:
    [原创]在Windows平台使用msvc(cl.exe) + vscode编写和调试C/C++代码
    几种动态调用js函数方案的性能比较
    z-index随笔
    [原]配置多个密钥免密码登录服务器简明教程
    [转]为 windows cmd 设置代理
    [原创]实现多层DIV叠加的js事件穿透
    [转]linux terminal中使用proxy
    [转]jquery中innerWidth(),outerWidth(),outerWidth(true)和width()的区别
    [转]React表单无法输入原因----约束性和非约束性组件
    [原创]aaencode等类似js加密方案破解方法
  • 原文地址:https://www.cnblogs.com/Mysterious/p/5727224.html
Copyright © 2011-2022 走看看