• 中国移动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}}]}]}
    
  • 相关阅读:
    阻止事件冒泡
    移动端开发
    angular6 管道多参数传输 Pipe
    在div上添加小三角
    angular6 使用@Input() @Output()
    angular6 想要获取页面某些事件 如 点击 window宽高等等
    如何将项目添加到git上
    使用vue-cli 搭建element-admin后台
    bootstrap4 常用样式类名 (供自己参考)
    键盘按下 keyCode 的值
  • 原文地址:https://www.cnblogs.com/Mysterious/p/5727224.html
Copyright © 2020-2023  润新知