ESP8266獲取天氣和萬年曆(Arduino)

過完年一直沒更新博客,主要仍是在繼續研究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

相關文章
相關標籤/搜索