第二十五章 HTTP Client25.1 HTTP Client例程概述 HTTP Client例程将让W7500EVB以客户端的身份去连接OneNET平台,将数据发送到OneNET平台,并在OneNET平台实时查看接收的数据变化。 25.2 OneNET平台简介OneNet是一个免费的云平台,旨在利用无线网络、开源硬件和软件、智能手机和App共同打造一个家庭智能中心平台。打开OneNet平台服务器网页,点击“快速开始”,我们可以注册一个账号,登陆后,可以添加自己的设备。通过OneNet提供的数据接口,用户可以把自己的传感器数据通过互联网接入OneNet云平台,从而实现随时随地获取传感器数据,为一些智能家居设备接入互联网提供了云平台支持。 具体的设备添加过程,OneNet平台有详细的介绍,在此就不多解释。在申请添加设备时要注意生成的APIKEY设备ID。这几个信息与程序开头建立的请求报文中信息是一一对应的,因此应该把程序中这些信息修改为我们自己申请账号和添加设备是得到的信息。同大多数开源平台一样,OneNet提供的API也是基于HTTP协议提交和接收数据。 25.3 HTTP Client例程解析 HTTP Client例程初始化部分与Network install例程相同,不再赘述。具体分析应用函数do_http_client(); [mw_shl_code=applescript,true]1. #define onenet_id "25497183" //your onenet device ID
2. #define apikey "hyjboPN4pamuKo3ep9G=CbMd=qo=" //your onenet device api
3. char tempStr[5]={'2','5','6'};
4. uint8_t onenet_server_ip[4]={183,230,40,33}; /*api.onenet.net 的ip地址*/
5. uint8_t onenet_port=80; /*api.onenet.net 的端口号*/
6.
7. void do_http_client(void)
8. {
9. uint8_t ch=SOCK_HUMTEM;
10. uint16_t anyport=5000;
11. uint16_t len;
12. switch(getSn_SR(ch)) /*获取socket SOCK_TCPS 的状态*/
13. {
14. case SOCK_INIT: /*socket初始化完成*/
15. connect(ch, onenet_server_ip ,onenet_port); /*打开socket端口*/
16.
17. break;
18. case SOCK_ESTABLISHED: /*socket连接建立*/
19. if(getSn_IR(ch) & Sn_IR_CON)
20. {
21. setSn_IR(ch, Sn_IR_CON); /*清除接收中断标志*/
22. }
23.
24. len = HTTP_PostPkt(buffer,apikey,onenet_id, "tmp", tempStr); /*temp 标识 ,tempStr 数据流*/
25. send(ch, (uint8_t *)buffer,len);
26. delay_ms(500);
27.
28. break;
29. case SOCK_CLOSE_WAIT: /*socket等待关闭状态*/
30. close(ch);
31.
32. break;
33. case SOCK_CLOSED: /*socket关闭*/
34. socket(ch, Sn_MR_TCP,anyport , 0x00);
35.
36. break;
37. default:
38. break;
39. }
40. }[/mw_shl_code]
第3行就是我们需要上传的数据,格式是字符型。第1、2行需要更改为在OneNT平台创建的设备获取到的ID和API,第4、5行为OneNET平台的服务器IP和通信端口,一般不做更改。第7到40行,为W7500EVB作为OneNET客户端,向OneNET平台上传数据。数据传输方式为TCP连接。所以这里是按照TCP的状态机模式编写的。Socket初始化后,在15行初始化完毕后开始向OneNET平台服务器发送连接请求,18行建立连接后,清除中断,在24行将需要发送的数据存入buffer中,并通过25行发送请求报文将数据传输出去,因为是短连接,发送请求后服务器断开连接29行关闭socket。34行初始socket为关闭状态,所以开启socket并初始化为TCP模式。 至此,HTTP Client例程解析到此结束,编译后打印串口信息结果如图25.3.1 图25.3.1 HTTP Client 例程打印结果 登录OneNET平台查看数据是否发送成功,结果如图25.3.2与图25.3.3,成功获取数据,因为是循环发送所以数据较多。使用HTTP Client例程时可以根据自身需求更改数据流,还可用OneNET APP同步查看。 图25.3.2 OneNET数据流 图25.3.3 OneNET具体数据展示
|