借助 TI 公司的 CC3200 我们可以通过 http 轻松的完成与服务器之间的数据交互,体验CC3200的开箱即用的感觉,下面借助 http_client_demo 这个历程来实现从服务器 get 数据。实现我们从服务器得到用户的浇水信息。
CC3200的SDK 里面提供了所有的关于CC3200的资料,真的非常重要。 如:API文档、例程、例程使用文档、数据手册、原理图 … 等等。
此时CC3200 作为站点,即工作在 Sta(station)模式。简单理解就好比我们手机连上路由器或者数据才能上网一样,所需配置的地方如下:在common.h 中
// Values for below macros shall be modified as per access-point(AP) properties// Values for below macros shall be modified as per access-point(AP) properties
// SimpleLink device will connect to following AP when application is executed
//
/*--下面的设置为CC3200作为客户端时需要连接的路由器的相关信息 所以要根据所连接的路由器进行修改--*/
#define SSID_NAME " " /* AP SSID */
#define SECURITY_TYPE SL_SEC_TYPE_WPA_WPA2 /* Security type (OPEN or WEP or WPA*/
#define SECURITY_KEY " " /* Password of the secured AP */
#define SSID_LEN_MAX 32
#define BSSID_LEN_MAX 6
运行程序仿真运行,可以登录路由器网关查看连接状态。或者直接用串口打印出来看连接是否成功,如下图:
仿真报错时可以参考下面这篇博客:
https://blog.csdn.net/CSDN_X_W/article/details/86676351
首先需要将上一节的服务器端运行起来,根据服务器去更改CC3200这边的相应请求,再贴上上一节后台服务器的代码一起参考:
3.1、后台代码:
/**
* 处理CC3200 发送过来的 GET 请求 ->查询花卉的浇水量返回给CC3200 @TODO
*/
@ResponseBody //用于将数据写出去
@GetMapping("/cc3200Query") //这个方法用来处理query请求
public Map<String, Object> cc3200GetResponse(@RequestParam int monitor_id) { //这个字符串拼接的方法来实现sql语句中嵌套变量好嘛?
String querySql = "select * From flowers where monitor_id =" + "'" + monitor_id + "'";
//这样返回的是一个map 而不是 list 的形式更方便CC3200那边去解析
Map<String, Object> map =jdbcTemplate.queryForMap(querySql);
System.out.println(map);
return map;
}
3.2、CC3200 相关配置:
#define GET_REQUEST_URI "/cc3200Query?monitor_id=1" //请求方式 即发送什么样的请求 请求参数为monitor_id
/*--HOST_NAME HTTP服务器的IP地址或者域名 如我的服务器的IP地址为......--*/
#define HOST_NAME "192.168.43.148" //""
/*--HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如tomcat的默认端口是8080 http://localhost:8080/--*/
#define HOST_PORT 8080
static int readResponse(HTTPCli_Handle httpClient)
{
long lRetVal = 0;
int bytesRead = 0;
int id = 0;
unsigned long len = 114; //@TODO 重要:这里决定了收到的数据的长度 数值靠数 包括外面的大括号
int json = 0;
char *dataBuffer=NULL;
bool moreFlags = 1;
//.......
}
UART_PRINT("\n\r");
UART_PRINT("HTTP Get Begin:\n\r");
lRetVal = HTTPGetMethod(&httpClient);
if(lRetVal < 0)
{
UART_PRINT("HTTP Post Get failed.\n\r");
}
UART_PRINT("HTTP Get End:\n\r");
UART_PRINT("\n\r");
/*--根据得到的json数据进行解析 Start--*/
printf("g_buff:%s\n",g_buff);
printf("size:%d\n",strlen(g_buff));
这样就可以在控制台打印出如下数据:
注意:
①. 在用printf(""); 打印时一定要加上换行“\n” ;不然数据是打印不出来的。
②. 现在得到的数据为 JSON 格式,如果想得到某一项数据,需要对得到的 JSON 数据进行解析,最好的办法是使用 cJSON 库,具体可参照下面一段代码:
cJSON *root;
cJSON *ret;
root = cJSON_Parse(g_buff); //将cJSON字符串转换为cJSON结构体指针
ret = cJSON_GetObjectItem(root, "bulk"); //在root结构体中查找"key"这个键(一个字符串),成功返回一个cJSON结构体,失败返回NULL。
bulk=ret->valueint; //获取到浇水量
cJSON_Delete(ret); //释放cJSON结构体指针
cJSON_Delete(root); //释放cJSON结构体指针
printf("%d\n",bulk); //打印到控制台查看
注: cJSON 的下载地址如下,直接复制 cJSON.c 和 cJSON.h 到工程中使用即可。
https://sourceforge.net/projects/cjson/
1.TI SDK 中提供了大量的例程,而直接导入例程稍作修改就能够实现我们想要的目的,是一个很好的参考,在看例程的过程中也可以加强编写程序的规范性。
2.如果项目中应用到了更多的功能,也可以将相关的例程融合到一起,对于 CC3200 主要的用到的是 driverlib 这个库,各个功能都封装成了API供我们快速开发,很方便。
https://blog.csdn.net/CSDN_X_W/column/info/33567