一、序言
上篇文章已经完成了从服务器 get 数据,这篇将通过 post 的方式,将通过CC3200测得的花卉状态信息(如土壤湿度、光照强度)上传到服务器。其实post的方式也实现了接收服务器返回的数据,所以只发送一个post请求就可以完成数据的上传和获取,具体在下面说明。
二、CC3200 连接到路由器(AP)
这里已经在上篇文章说过了,具体可以参照:
https://blog.csdn.net/CSDN_X_W/article/details/86756675
三、CC3200 post 数据到服务器
同样是将后台代码和CC3200的相关配置一起列出来。
3.1 后台代码: 这里解析的数据是CC3200发送过来的花卉状态信息。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28/**
* 处理CC3200 POST 给服务器的数据 ->更新花卉的状态信息
*/
//用于接收CC3200 post 过来的数据
"/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 代码:
- CC3200 的相关配置,在main.c 中 , IP 和端口配置不再赘述,参考上篇文章。
1
2
3
/*--Post过去的数据--*/ - 在 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函数的形参也要相应修改:3.具体post数据的部分可以参考如下代码,main.c 中:1
2char *outData;
char flowerStatusData[63]={0}; //数组长度应该是 strlen 得到的字符串长度加一 这个值根据上传的数据量经调试打印得到1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24/*--根据测得的数据信息,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 添加到工程调用即可。
...
...
本文为作者原创文章,未经作者允许不得转载。