经过前两天的倒弄倒弄,用了两个晚上加今天个下午,做了一个天气预报,思路:
A:让esp实现实现混合模式,并监听80端口
B:APP通过80端口发送需要中继的ssid和password和地区
C:esp实现接收相关配置信息配置
D:esp实现http客服端访问网络通过地区获取对应天气
哈哈,差不多就是这个思路,
前两天倒弄完,我就花了一个下午学了下lua语法基础,语法和自己平时编码有点不一样,开始还觉得别扭,后面自己写写玩玩,也就习惯了,其中tables是重点,类似数组,多次用到这个东西,然后就是lua是异步的,在开始建立tcp服务器时就在考虑这个问题,会不会阻塞等待,结果他妈比是异步的,放心大胆的往后写代码,接着到了天气接口返回的数据是乱码,查了半天没结果,结果多次发现乱码的问题
NodeMcu默认编码是GBK的,如果文件类型是UTF-8,那么这个时候print输出都是乱码的,如果要解决这个乱码,把文件改为GBK类型可以(代码的编码方式),然后到了file库使用,我这里的实现天气是通过地区来查询的,那么这个地区应该放在什么地方才不会被重启抹杀呢?此时我用了file的write和read方法,发现了一个问题算是一点经验,在utf-8文件里输出的就是utf-8的文件,如果在gbk文件里读取这utf-8文件也会乱码,估计讲的闷逼,你自己测试就知道了,基本上明白这个编码问题了!
昨晚解析json数据花了大半天,如果用java或者PHP来做自然不是问题,但是到了lua上就闷逼了,这个天气返回的json数据有点复杂,简单的key value模式当然不是问题,但是这个json有点特殊,搞了大半天在明白解析的原理,其实就是用sjson转为tables,然后对这个表处理,主要后面没有key只有value处理,此时用上下角标就可以操了,估计是我自己对lua不熟悉吧!,接着又是一个问题,我用0下角标处理,一直报错,让我尴尬了半小时,最后回想自己学习lua时,下角标是重1开始的,测试了下,mmp好了,估计是编程语言学多了,都是从0开始计算得,这个就从1开始计算,完了,给大家来几幅图
这个图是第一打开的显示的,上面会显示ap_ip:network_error,表示这个网络esp还没有中继到路由器,没有上网功能,接着我们用APP来配置这个esp,哈哈花了我几个小时写出来的APP,APP的配置有点类似rots的smartconfig,当然这个和那个原理上还是不同的,那个APP是同udp广播出去数据包,然后esp解析,实现配置!先不讨论APP问题了,来看看截图吧
接着配置好了,esp也就正常运行了!
ap_ip:当然是中继后给的ip啦,
28C 温度 74% 湿度 xy(小雨)
这个i2c驱动屏幕目前还不会搞中文显示,只能这个样子了!
差不多我这个就这样完成了!
还少了点什么对吧?
哈哈,源代码发一波
lua程序和app
http://pan.baidu.com/s/1qYNoX8C
我测试了,esp8266-01也可以玩起来,01型号的的gpio2和gpio0可以作为oled的sda和scl连接实现驱动屏幕,,刚好把io口用完!我这里就不发图了!