CC3200 POST 数据到服务器 ( 实现一个简单的物联网系统-4 )

文章目录

    • 一、序言
    • 二、CC3200 连接到路由器(AP)
    • 三、CC3200 post 数据到服务器
    • 四、疑问(重要)
    • 五、专栏地址

一、序言

  上篇文章已经完成了从服务器 get 数据,这篇将通过 post 的方式,将通过CC3200测得的花卉状态信息(如土壤湿度、光照强度)上传到服务器。其实post的方式也实现了接收服务器返回的数据,所以只发送一个post请求就可以完成数据的上传和获取,具体在下面说明。

二、CC3200 连接到路由器(AP)

  这里已经在上篇文章说过了,具体可以参照:
  https://blog.csdn.net/CSDN_X_W/article/details/86756675

三、CC3200 post 数据到服务器

   同样是将后台代码和CC3200的相关配置一起列出来。
3.1 后台代码: 这里解析的数据是CC3200发送过来的花卉状态信息。

/**
 * 处理CC3200 POST 给服务器的数据 ->更新花卉的状态信息 
 */

@ResponseBody   //用于接收CC3200 post 过来的数据
@PostMapping("/cc3200Post")   //这个方法用来处理CC3200Post请求
public  void CC3200PostResponse(@RequestBody String flower_info) throws JSONException {
    /*--更新花卉的状态信息--*/
    int monitorID;
    float co2;
    float temperature;
    float humidity;
    System.out.println(flower_info);
    //1.解析post过来的数据
    JSONObject jsonObject = new JSONObject(flower_info);
    monitorID = jsonObject.getInt("monitorID");
    co2 = (float) jsonObject.getDouble("co2");
    temperature = (float) jsonObject.getDouble("temperature");
    humidity = (float) jsonObject.getDouble("humidity");

    //2.根据花卉监测系统ID更新数据库的数据
    String updateSql =
            "update flowers set co2 =" + "'" + co2 + "'" +","+
            "temperature ="+"'" + temperature + "'" +","+
            "humidity ="+"'" + humidity + "'" +
            " WHERE monitor_id ="+ "'" + monitorID + "'";
    jdbcTemplate.update(updateSql);
}

3.2 CC3200 代码:

  1. CC3200 的相关配置,在main.c 中 , IP 和端口配置不再赘述,参考上篇文章。
#define POST_REQUEST_URI  "/cc3200Post"         //请求方式 即发送什么样的请求
/*--Post过去的数据--*/
#define POST_DATA       "{\n\"name\":\"xyz\",\n\"address\":\n{\n\"plot#\":12,\n\"street\":\"abc\",\n\"city\":\"ijk\"\n},\n\"age\":30\n}"
  1. 在 CC3200 中post数据的具体实现通过调用 static int HTTPPostMethod(HTTPCli_Handle httpClient) 函数中调用的 TTPCli_sendRequestBody(httpClient, POST_DATA , (sizeof(POST_DATA )-1)); 来实现的,这样运行后就能在后台接收到 POST_DATA 当中的数据。这样我们就已经实现了将数据 post 到服务器。

四、疑问(重要)

  1.需要思考这样一个问题 :我们 post 过去的数据是要有变量的,如温度(temperature),可是如何将这样一些变量拼接 JSON 形式的字符串当中去呢?早就有人帮我们写好了这样的库,即-> cJSON , 需要引入 cJSON 的 .c 和 .h 文件后可参考下面这样一段代码:
  2.定义 flowerStatusData 代替原来的 POST_DATA,则原来的 TTPCli_sendRequestBody函数的形参也要相应修改:

char *outData;
char flowerStatusData[63]={0};  //数组长度应该是 strlen 得到的字符串长度加一   这个值根据上传的数据量经调试打印得到

  3.具体post数据的部分可以参考如下代码,main.c 中:

/*--根据测得的数据信息,post数据到服务器,从而更新花卉的状态数据--*/
//创建一个cJSON结构体指针并分配空间,然后赋值给root
	cJSON *root = cJSON_CreateObject();
	
	//在root结构体中创建一组健为"key",值为" value" 的键值对。
	cJSON_AddNumberToObject(root,"monitorID",monitor_id);
	cJSON_AddNumberToObject(root,"co2",co2);
	cJSON_AddNumberToObject(root,"temperature",temperature);
	cJSON_AddNumberToObject(root,"humidity",humidity);
	
	/*--得到无格式形式的json字符串,即输出无回车和空格分离的键值对--*/
        outData = cJSON_PrintUnformatted(root);

	strncpy(flowerStatusData, outData, strlen(outData));
	UART_PRINT("\n\r");
	UART_PRINT("HTTP Post Begin:\n\r");
    	lRetVal = HTTPPostMethod(&httpClient);
    	if(lRetVal < 0)
    	{
    		UART_PRINT("HTTP Post failed.\n\r");
	}
	UART_PRINT("HTTP Post End:\n\r");
	free(outData);//释放malloc分配的空间
        cJSON_Delete(root);//释放cJSON结构体指针

注: 具体 cJSON 的使用可以百度到很多博客,cJSON 的下载网址为:
  https://sourceforge.net/projects/cjson/
  直接将cJSON.c 和 cJOSN.h 添加到工程调用即可。

五、专栏地址

  https://blog.csdn.net/CSDN_X_W/column/info/33567

你可能感兴趣的:(IOT-CC3200,云服务器,CC3200))