上篇文章已经完成了从服务器 get 数据,这篇将通过 post 的方式,将通过CC3200测得的花卉状态信息(如土壤湿度、光照强度)上传到服务器。其实post的方式也实现了接收服务器返回的数据,所以只发送一个post请求就可以完成数据的上传和获取,具体在下面说明。
这里已经在上篇文章说过了,具体可以参照:
https://blog.csdn.net/CSDN_X_W/article/details/86756675
同样是将后台代码和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 代码:
#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.需要思考这样一个问题 :我们 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