經(jīng)過(guò)前兩天的倒弄倒弄,用了兩個(gè)晚上加今天個(gè)下午,做了一個(gè)天氣預(yù)報(bào),思路:
A:讓esp實(shí)現(xiàn)實(shí)現(xiàn)混合模式垫桂,并監(jiān)聽(tīng)80端口
B:APP通過(guò)80端口發(fā)送需要中繼的ssid和password和地區(qū)
C:esp實(shí)現(xiàn)接收相關(guān)配置信息配置
D:esp實(shí)現(xiàn)http客服端訪問(wèn)網(wǎng)絡(luò)通過(guò)地區(qū)獲取對(duì)應(yīng)天氣
哈哈,差不多就是這個(gè)思路粟按,
前兩天倒弄完诬滩,我就花了一個(gè)下午學(xué)了下lua語(yǔ)法基礎(chǔ),語(yǔ)法和自己平時(shí)編碼有點(diǎn)不一樣钾怔,開(kāi)始還覺(jué)得別扭碱呼,后面自己寫(xiě)寫(xiě)玩玩,也就習(xí)慣了宗侦,其中tables是重點(diǎn)愚臀,類似數(shù)組,多次用到這個(gè)東西矾利,然后就是lua是異步的姑裂,在開(kāi)始建立tcp服務(wù)器時(shí)就在考慮這個(gè)問(wèn)題馋袜,會(huì)不會(huì)阻塞等待,結(jié)果他媽比是異步的舶斧,放心大膽的往后寫(xiě)代碼欣鳖,接著到了天氣接口返回的數(shù)據(jù)是亂碼,查了半天沒(méi)結(jié)果茴厉,結(jié)果多次發(fā)現(xiàn)亂碼的問(wèn)題
NodeMcu默認(rèn)編碼是GBK的泽台,如果文件類型是UTF-8,那么這個(gè)時(shí)候print輸出都是亂碼的矾缓,如果要解決這個(gè)亂碼怀酷,把文件改為GBK類型可以(代碼的編碼方式),然后到了file庫(kù)使用嗜闻,我這里的實(shí)現(xiàn)天氣是通過(guò)地區(qū)來(lái)查詢的蜕依,那么這個(gè)地區(qū)應(yīng)該放在什么地方才不會(huì)被重啟抹殺呢?此時(shí)我用了file的write和read方法琉雳,發(fā)現(xiàn)了一個(gè)問(wèn)題算是一點(diǎn)經(jīng)驗(yàn)样眠,在utf-8文件里輸出的就是utf-8的文件,如果在gbk文件里讀取這utf-8文件也會(huì)亂碼翠肘,估計(jì)講的悶逼檐束,你自己測(cè)試就知道了,基本上明白這個(gè)編碼問(wèn)題了束倍!
昨晚解析json數(shù)據(jù)花了大半天厢塘,如果用java或者PHP來(lái)做自然不是問(wèn)題,但是到了lua上就悶逼了肌幽,這個(gè)天氣返回的json數(shù)據(jù)有點(diǎn)復(fù)雜,簡(jiǎn)單的key value模式當(dāng)然不是問(wèn)題抓半,但是這個(gè)json有點(diǎn)特殊喂急,搞了大半天在明白解析的原理,其實(shí)就是用sjson轉(zhuǎn)為tables笛求,然后對(duì)這個(gè)表處理廊移,主要后面沒(méi)有key只有value處理,此時(shí)用上下角標(biāo)就可以操了探入,估計(jì)是我自己對(duì)lua不熟悉吧狡孔!,接著又是一個(gè)問(wèn)題蜂嗽,我用0下角標(biāo)處理苗膝,一直報(bào)錯(cuò),讓我尷尬了半小時(shí)植旧,最后回想自己學(xué)習(xí)lua時(shí)辱揭,下角標(biāo)是重1開(kāi)始的离唐,測(cè)試了下,mmp好了问窃,估計(jì)是編程語(yǔ)言學(xué)多了亥鬓,都是從0開(kāi)始計(jì)算得,這個(gè)就從1開(kāi)始計(jì)算域庇,完了嵌戈,給大家來(lái)幾幅圖
這個(gè)圖是第一打開(kāi)的顯示的,上面會(huì)顯示ap_ip:network_error,表示這個(gè)網(wǎng)絡(luò)esp還沒(méi)有中繼到路由器听皿,沒(méi)有上網(wǎng)功能熟呛,接著我們用APP來(lái)配置這個(gè)esp,哈哈花了我?guī)讉€(gè)小時(shí)寫(xiě)出來(lái)的APP写穴,APP的配置有點(diǎn)類似rots的smartconfig惰拱,當(dāng)然這個(gè)和那個(gè)原理上還是不同的,那個(gè)APP是同udp廣播出去數(shù)據(jù)包啊送,然后esp解析偿短,實(shí)現(xiàn)配置!先不討論APP問(wèn)題了馋没,來(lái)看看截圖吧
接著配置好了篷朵,esp也就正常運(yùn)行了勾怒!
ap_ip:當(dāng)然是中繼后給的ip啦,
28C 溫度 ?74% 濕度 ?xy(小雨)
這個(gè)i2c驅(qū)動(dòng)屏幕目前還不會(huì)搞中文顯示声旺,只能這個(gè)樣子了笔链!
差不多我這個(gè)就這樣完成了!
還少了點(diǎn)什么對(duì)吧腮猖?
哈哈鉴扫,源代碼發(fā)一波
lua程序和app
http://pan.baidu.com/s/1qYNoX8C
我測(cè)試了,esp8266-01也可以玩起來(lái)澈缺,01型號(hào)的的gpio2和gpio0可以作為oled的sda和scl連接實(shí)現(xiàn)驅(qū)動(dòng)屏幕坪创,,剛好把io口用完姐赡!我這里就不發(fā)圖了莱预!