【分享】自制环境参数检测装置接入 oneNet 平台(三)
本帖最后由 xiebinqiang 于 2016-1-27 10:07 编辑第三部分 传感器数据上传至oneNet平台
有了数据和通信,下一步就是将我们采集到的数据通过WIFI模块上传至oneNet云平台,在设备端,需要将采集到的数据安照规定协议进行封装,然后进行发送,比如,对以上采集到的四个参数数据进行封装,需要在第二部分的代码中添加如下操作函数:
//封装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();
}
修改以上代码时需要注意: 1) API Key需要从oneNet平台获取 2) 报头数据Content-Length字段会岁采集的数据变化,要实时进行统计,该字段必须准确,否则,服务器无法正确解析数据。 3) 在WifiInit(void)中只需建立连接,透传模式在发送数据之前实时设置,每发送一帧数据进行一次透传设置,发送完毕后结束透传模式,这是查询TCP连接状态的需要。不结束透传模式,无法查询连接状态。
以上代码修改完毕,重新更新ardiuno板中代码,设备端的准备工作完成。
设备端准备工作完成后,接下来讲在服务器端的操作,首先登陆一下网站:http://open.iot.10086.cn/ ,显示如下画面:
点击云平台入口:
注册账号并登陆:
进入“设备管理”入口,点击“添加一个设备”进行设备创建:
输入创建信息:
添加完成,进入如下页面:
添加数据流:
此处,我们添加四路数据流,分别为:光照、温度、湿度、噪音强度。如下图:
点击“添加应用”,进入下面的界面添加相关应用来展示设备数据:
添加完成后保存并发布,发布后会产生一个网址,可以通过浏览器直接访问该网址,观测以上界面,而无需登录账户。回到先前页面,点击右上角“设置”进入如下界面:
此处的MasterKey可以作为程序中的API key字段的值。
到此,服务器中的设备的基本设置完成。可以进行数据上传了。
将先前准备好的自制设备接上电源,等待LED等闪烁6次后,设备启动成功,开始上传数据,在oneNet上可以查看数据上传情况:
通过“设备应用”,可以更直观的观测数据的变化情况:
除此之外我们还可以通过发布的网址观测到以上界面,发布网址为: http://open.iot.10086.cn/deviceview/p/1009107914a5cb0acbf7fe2483ee9d2e
以上就是本人制作环境参数检测装置并接入oneNet平台的全部流程,如有错误,请多多指正。谢谢!
你好,请问183.230.40.33:80是oneNet的ip吗? 感谢老师分享!学习了!
页:
[1]