传感器数据上传到云端-以SCD30采集CO2数据为例

前面我们使用了SCD30模块采集到了室内空气质量-CO2的指标,为了更加的实用,我们将采集到的数据:CO2、温度、湿度数据上传到云端(这里以OneNet平台使用http协议上传做演示)。

步骤:

1、首先我们在OneNet平台上建立好我们的设备。

我这里建立一个HTTP协议方式的设备、一个应用、三个数据流。

a、设备信息:

b、应用界面:

c、数据流:

2、上传数据测试:

使用网络调试助手,建立一个TCP client,发送如下HTTP包进行测试:


							
  POST /devices/你的设备ID号/datapoints?type=3 HTTP/1.1
  api-key:你自己的OneNet平台API KEY
  Host:api.heclouds.com
  Content-Length:49
   
  {"SCD30_CO2":220;"SCD30_Humi":34;"SCD30_Temp":42}
  
  

网络调试助手如下设置:

注意上面的服务器IP填写对,还有Content-Length一定要填写正确,否则各种问题出现。发送后接受到{"errno":0,"error":"succ"}表示正确了,你再到OneNet查看数据,可以看到上传成功了一个数据点。

3、本地采集数据后联网上传到云

a、数据采集: 这里使用SCD30模块采集数据,该模块可以采集到CO2、温度、湿度信息,非常方便,使用的方法可以参考之前的使用SCD30采集CO2的帖子 (点击跳转)盛思锐CO2传感器模块SCD30同时集成温度湿度测量

b、联网: 这里采用ESP8266模块连接到WIFI热点后与OneNet云端进行TCP通信,在前面使用ESP8266的帖子有详细讲解,这里就不再赘述。(点击跳转)ESP8266 wifi模块 ESP-12 ESP-07 ESP-01

3、源码

核心代码如下,实际上是ESP8266的一个示例和一个CO2采集示例合起来的代码,由此也可以看出使用这个平台搭建自己的产品是非常简单方便的。


												
	//获取传感器数据
	        if (airSensor.dataAvailable())
	  {
	        value_co2 = airSensor.getCO2();
	    serialDebug.print("CO2(ppm):");
	    serialDebug.print(value_co2);//读取CO2
	 
	        value_temp = airSensor.getTemperature();
	    serialDebug.print(" temp(C):");//读取温度
	    serialDebug.print(value_temp, 1);
	 
	        value_humi = airSensor.getHumidity();
	    serialDebug.print(" humidity(%):");//读取湿度
	    serialDebug.print(value_humi, 1);
	 
	    serialDebug.println();
	 
	 
	  //上传数据到OneNet平台
	        int content_len = 49;//3位CO2,2位温度,2位湿度,如:{"SCD30_CO2":210;"SCD30_Humi":30;"SCD30_Temp":40} 一共49位
	        //这里演示,就为了简单把数据到转为int类型
	        int valueOfCO2 = (int)value_co2;
	    int valueOfHumi = (int)value_humi;
	    int valueOfTemp = (int)value_temp;
	   
	    sprintf(http_packet, packet_model,DEVICE_ID,API_KEY,oneNetHost,content_len,SENSOR_CO2,valueOfCO2,SENSOR_HUMI,valueOfHumi,SENSOR_TEMP,valueOfTemp);
	         
	        int state = wifi.getState();
	        wifi.debugPrintln(String(state));
	        switch (state) {
	            case WIFI_NEW_MESSAGE: 
	                        wifi.debugPrintln(wifi.getMessage());
	                        wifi.sendMessage(http_packet);//这里进行发送http包
	              break;
	            case WIFI_CLOSED :                                                        //reconnet to the TCP server 
	              wifi.debugPrintln("server is closed! and trying to reconnect it!");
	              if (wifi.connectTCPServer(serverIP, serverPort)) {
	                      wifi.debugPrintln("reconnect OK!");
	                      wifi.setState(WIFI_IDLE);
	              }
	              else {
	                      wifi.debugPrintln("reconnect fail");
	                      wifi.setState(WIFI_CLOSED);
	              }
	              break;
	            case WIFI_IDLE :                                                        
	                    wifi.setState(wifi.checkMessage());
	                         
	                    break;
	                }
	         
	        }					
					
					

我们上传完成后,可以在OneNet平台看到我们的数据变化了,作为扩展,可以直接使用OneNet云平台提供的HTTP的GET方法获取数据,然后自己做APP或者公众号就可以在任何地方看到我们的远程数据变化了,这样也就是一个完整的设备+终端+云架构的原型物联网产品了。

完整工程


传输CO2数据到OneNet平台.zip(点击下载)