【分享】自制环境参数检测装置接入 oneNet 平台(三)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7170|回复: 2

【分享】自制环境参数检测装置接入 oneNet 平台(三)

[复制链接]
发表于 2016-1-27 10:05 | 显示全部楼层 |阅读模式
本帖最后由 xiebinqiang 于 2016-1-27 10:07 编辑

第三部分 传感器数据上传至oneNet平台

有了数据和通信,下一步就是将我们采集到的数据通过WIFI模块上传至oneNet云平台,在设备端,需要将采集到的数据安照规定协议进行封装,然后进行发送,比如,对以上采集到的四个参数数据进行封装,需要在第二部分的代码中添加如下操作函数:
[mw_shl_code=c,true]//封装http包并发送到oneNet平台
void SendDataToYun(float temp, float hum, int niose, uint16_t light)
{

  static int cnt = 0;   //JSON格式数据包长度

  SendCmd("AT+CIPMODE=1\r");//开启透传模式
  Serial.println("AT+CIPSEND\r");//开始透传数据
  delay(2000);

//http报头字符串
  String cmd("POST /devices/70290/datapoints HTTP/1.1\r\n"
              "User-Agent: curl/7.35.0\r\n"
              "Host: api.heclouds.com\r\n"
              "Accept: */*\r\n"
              "api-key:B4ZGKmtaL5eJw6NIpjEEI+kULqQ=\r\n"  //API key,从oneNet获取
              "Content-Length:" + String(cnt) + "\r\n"   //JSON格式数据长度
              "Content-Type: application/x-www-form-urlencoded\r\n"
              "\r\n");

  Serial.print(cmd);

  //JSON格式数据封装
  cnt = Serial.print("{\"datastreams\":["
                      "{\"id\":\"temp\",\"datapoints\":[{\"value\":" + String(temp) + "}]},"
                      "{\"id\":\"hum\",\"datapoints\":[{\"value\":" + String(hum) + "}]},"
                      "{\"id\":\"light\",\"datapoints\":[{\"value\":" + String(light) + "}]},"
                      "{\"id\":\"noise\",\"datapoints\":[{\"value\":" + String(niose) + "}]}"
  //Serial.print("{\"id\":\"distance\",\"datapoints\":[{\"value\":" + String(h) + "}]}");               
                      "]}" );
  Serial.println();  //向服务器发送数据

  while (1)//等待服务器返回结果
  {
      if (Serial.available()> 0 && Serial.find("error") == true)//判断返回结果
      {
          //LedFlash();
          Serial.println("+++" ); //结束数据透传
          break;
      }
  }

  delay(1000);
  while (1)
  {
      Serial.println("AT+CIPSTATUS\r"); //查看与服务器连接状态
      if (Serial.available()> 0 && Serial.find("TCP") == true)//TCP连接未中断转入下一次传输
      {
          //LedFlash();
          break;
      }
      else //TCP连接中断,重新与服务器建立TCP连接
      {
          SendCmd("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r");
      }
  }
}

需要修改如下两个函数:
void WifiInit(void)
{
  SendCmd("AT+CWMODE=3\r");//
  SendCmd("AT+RST\r");
  SendCmd("AT+CWJAP=\"hello-simon-30\",\"guajiguajiSIMONSEN2048\"\r");
  SendCmd("AT+CIFSR\r");
  SendCmd("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r"); //和oneNet平台建立TCP连接
  //SendCmd("AT+CIPMODE=1\r");
  //Serial.println("AT+CIPSEND\r");
}

void loop() {
  float temp, hum;
  int noise;
  uint16_t light;

  // put your main code here, to run repeatedly:
  ReadTempHum(&hum, &temp);
  noise = ReadVoice();
  light = LightStrength();
  SendDataToYun(temp, hum, noise, light);//调用数据打包和发送的函数

//屏蔽以下代码段
/*
  Serial.print("temp:");
  Serial.print(temp);
  Serial.print("\thum:");
  Serial.print(hum);
  Serial.print("\tnoise:");
  Serial.print(noise);
  Serial.print("\tlight:");
  Serial.println(light);
*/
  delay(2000);
  //LedFlash();
}[/mw_shl_code]

修改以上代码时需要注意: 1) API Key需要从oneNet平台获取 2) 报头数据Content-Length字段会岁采集的数据变化,要实时进行统计,该字段必须准确,否则,服务器无法正确解析数据。 3) 在WifiInit(void)中只需建立连接,透传模式在发送数据之前实时设置,每发送一帧数据进行一次透传设置,发送完毕后结束透传模式,这是查询TCP连接状态的需要。不结束透传模式,无法查询连接状态。

以上代码修改完毕,重新更新ardiuno板中代码,设备端的准备工作完成。

设备端准备工作完成后,接下来讲在服务器端的操作,首先登陆一下网站:http://open.iot.10086.cn/ ,显示如下画面:
2.png

点击云平台入口:
3.png

注册账号并登陆:
4.png

进入“设备管理”入口,点击“添加一个设备”进行设备创建:
5.png

输入创建信息:
6.png

添加完成,进入如下页面:
7.png

添加数据流:
8.png

此处,我们添加四路数据流,分别为:光照、温度、湿度、噪音强度。如下图:
9.png

点击“添加应用”,进入下面的界面添加相关应用来展示设备数据:
10.png

添加完成后保存并发布,发布后会产生一个网址,可以通过浏览器直接访问该网址,观测以上界面,而无需登录账户。回到先前页面,点击右上角“设置”进入如下界面:
11.png

此处的MasterKey可以作为程序中的API key字段的值。

到此,服务器中的设备的基本设置完成。可以进行数据上传了。

将先前准备好的自制设备接上电源,等待LED等闪烁6次后,设备启动成功,开始上传数据,在oneNet上可以查看数据上传情况:
12.png

通过“设备应用”,可以更直观的观测数据的变化情况:
13.png

除此之外我们还可以通过发布的网址观测到以上界面,发布网址为: http://open.iot.10086.cn/deviceview/p/1009107914a5cb0acbf7fe2483ee9d2e



以上就是本人制作环境参数检测装置并接入oneNet平台的全部流程,如有错误,请多多指正。谢谢!

发表于 2016-3-2 15:52 | 显示全部楼层
你好,请问183.230.40.33:80是oneNet的ip吗?
发表于 2016-9-24 08:30 来自手机 | 显示全部楼层
感谢老师分享!学习了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:35 , Processed in 0.638976 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表