NodeMcu實(shí)現(xiàn)天氣預(yù)報(bào)

經(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),類(lèi)似數(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的,如果文件類(lèi)型是UTF-8,那么這個(gè)時(shí)候print輸出都是亂碼的,如果要解決這個(gè)亂碼,把文件改為GBK類(lèi)型可以(代碼的編碼方式),然后到了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)類(lèi)似rots的smartconfig,當(dāng)然這個(gè)和那個(gè)原理上還是不同的,那個(gè)APP是同udp廣播出去數(shù)據(jù)包,然后esp解析,實(shí)現(xiàn)配置!先不討論APP問(wèn)題了,來(lái)看看截圖吧

哈哈簡(jiǎn)單霸氣,需要源碼的小伙伴可以找我定制的哈!

接著配置好了,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ā)圖了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容