过完年一直没更新博客,主要仍是在继续研究ESP8266这块板子的功能。上篇主要是在同一网络下,使用iOS的Siri调用捷径控制,其主要原理是用ESP8266作Server端,接收来自iOS的Get HTTP访问。如果在同一网内,这样的配置仍是挺方便的,可是要在外网进行控制,就必须使用一个内网穿透的软件,而且该软件还要运行在同一个网内的设备上,相似有花生壳、网络通等,对比下来,网络通给的带宽大一点,响应比花生壳快,客户端也更简洁,不容易掉线。当作测试均可以的。php
下面咱们主要讲一下ESP8266如何作为客户端,获取网络天气等信息。其实就是将上面讲的反过来用,使ESP8266成为一个Client,访问一些特定的url,基本上都是使用GET和POST方式,刚开始接触可能有点难,可是弄清原理和结构以后,就简单了。简单来讲,就是连上网的ESP8266,创建client端,而后client发送GET HTTP的访问信息,client获取到的就是反馈的结果。固然,大多数时候Arduino会采用Jason的库来帮助完成这项工做,由于更加便捷,并且通常API反馈的数据结构也都是Jason的,毕竟和html很像,使用和提取都方便。html
天气api用的心知,万年历用的(https://www.timelessq.com/blog/47-cn.html),使用说明也很详细,文中的第一个api连接点进入好像有点问题,用这个https://cos.timelessq.com/api/time/index.php,很是感谢这两个免费的api接口提供者,以及参考的代码原做者(https://www.arduino.cn/thread-49411-1-1.html)。前端
这里说明一下,weather的程序是几乎用的参考,time的是本身改的。提两个过程当中研究得头疼的问题,最开始用网络提供的(https://www.sojson.com/open/api/lunar/json.shtml)api,浏览器和网页get测试都挺好,可client客户端“死活”不通,一直报301错误,其实就是他们改成了https的访问,一直也没解决,后来放弃,使用了如今这个。如有同窗作通了,还请留言告知,我学习一下呢!后来改为如今这个后,会遇到反馈数据过长,所以weather中用的char就读不完整,因此改成了readString,后来又由于readString有1s的响应时间,太慢,改成了read。哈哈哈!由于要套用Json的解析,因此对读取的数据又复制到char* content中,保证传递到root的是正确地Jason格式。要保证{}的完整性,不能有多于字符,因此在复制字符过程当中,去掉了尾端的空字符,前端补上了‘{’(由于为了截取内容,用到了{,致使line中会没有,所以在content中补上)。json
别的也没什么了,具体看代码。下图是展现,源码已经传到个人Github,须要的留言我私信地址。api