經過前兩天的倒弄倒弄,用了兩個晚上加今天個下午,做了一個天氣預報,思路:
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口用完!我這里就不發圖了!