6月28号拿到的手表,碰巧遇上了期末考试的考试周,一直没时间研究,今天考完试便立即开始研究。我现在分享一下今天的研究成果还有使用体验。 手表非常的漂亮,先给大家分享一下我刚拿到手表的开箱图。
25号到现在7号9天多的时间,电池电量还有66%,续航能力也非常的给力!
在官方下载的Demo里,Web request的Demo对一些初学者来说会比较难理解,一下子就吓到了一些小白。我现在给大家解析我自己理解的Web request,同时还稍微精简了一下程序,让初学者更好理解,如果有不正确的地方,请大家指出,谢谢谅解。
很多朋友想让自己的手表连接上自己的Arduino或者单片机,Web request是跟自己的单片机通信的方式之一。
HTTP是一个基于TCP的文本传输协议,我们在地址栏里面输入http://a.b.c.d/的时候,实际上是向a.b.c.d这个ip发送一个HTTP GET信息,这个信息如下(chrome浏览器)
GET / HTTP/1.1
Host: 192.168.1.107
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
后面的一串东西只是一些附加信息,而最重要的是GET/HTTP/1.1。 假如我们发送的是http://a.b.c.d/Hello 收到的将会是GET /Hello HTTP/1.1 所以你现在大概理解是怎么通过http来发送你的信息了吧? 而在我的Demo里,发送的信息为如下代码。 - /*Web request地址*/
- #define SENSOR_WEB "http://172.27.35.1:8090/Hello" //引号内的地址根据你的实际情况更改
复制代码
收到的是如下的消息
再看下面这段代码 - void sensor_request_web()
- {
- /*将你的url请求地址复制到url数组中*/
- char url[200] = "";
- sprintf(url, "%s", SENSOR_WEB);
- /*拼接过滤参数,即只接受和过滤参数匹配的返回值*/
- char param[20] = "";
- sprintf(param, "%s,%s", "main","temp");
- /*发送一次*/
- g_comm_id_web = maibu_comm_request_web(url, param, 0);/*sync_time实际最小有效值为5s*/
- }
复制代码当你url请求后,一般收到会json数据,其中包含很多信息,而过滤参数的作用则是将你需要的信息过滤出来给你。 值得注意的是maibu_comm_request_web这条语句中的sync_time这个参数,当sync_time大于0时,实际的最小有效值为5s,意思是你最快也只能每5s请求一次url,但是在我的使用过程中,很多时候要更久才能再请求一次,所以对发送数据量较大或者数度有要求的同学就来问题了。这个问题我还没想到解决办法。 - void weather_comm_result_callback(enum ECommResult result, uint32_t comm_id, void *context)
- {
- /*如果上一次请求WEB通讯失败,并且通讯ID相同,则重新发送*/
- if ((result == ECommResultFail) && (comm_id == g_comm_id_web))
- {
- sensor_request_web();
- }
- }
复制代码以上代码的作用则是当发送失败后,起到重新发送的作用,还是有一定几率会发送失败的。
将以上代码应用到你的手表中,可以跟你的单片机通信还是很有意思的。 Web request Demo可以在下面下载。
|