ESP8266簡易WIFI天氣時(shí)鐘
1 HTTP獲取網(wǎng)絡(luò)天氣
連網(wǎng)獲取網(wǎng)絡(luò)天氣,一般需要通過http的方式,從天氣信息提供商的網(wǎng)絡(luò)地址獲取天氣信息。
1.1 注冊開發(fā)者key
這里以心知天氣為例,需要先注冊一個(gè)開發(fā)者賬號,然后獲取自己的私鑰,也就是等下要用到的key。

然后可以先在瀏覽器中輸入如下鏈接,注意要將自己的key替換進(jìn)去,然后就可以測試一下天氣信息的獲取情況。
如下即為獲取的天氣信息,是json格式的:

1.2 http請求基本原理
在編寫代碼之前,需要先了解一下基礎(chǔ)的http請求原理。
url全稱是資源描述符,一個(gè)url地址,用于描述一個(gè)網(wǎng)絡(luò)上的資源,而http中的get、post、put、delete就對于著這個(gè)資源的查、改、增、刪4個(gè)操作,get一般用于獲取/查詢資源信息。
url的格式: 【協(xié)議】://【主機(jī)名(或者叫域名)】【:端口號(可選)】/【文件路徑】/【文件名】
例如:
協(xié)議:https
域名:api.seniverse.com
客戶端發(fā)送一個(gè)HTTP請求到服務(wù)器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)四個(gè)部分組成,下圖給出了請求報(bào)文的一般格式。

服務(wù)器HTTP響應(yīng)也由四個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、空行和響應(yīng)正文。

根據(jù)http協(xié)議,可以編寫ESP8266進(jìn)行http請求的代碼:
1.3 json數(shù)據(jù)解析
http請求獲取到的天氣數(shù)據(jù)是json格式的,需要對數(shù)據(jù)進(jìn)行解析,獲取到具體的天氣和溫度等數(shù)據(jù)。
可以將獲取的json原始數(shù)據(jù)打印出來,方便確認(rèn)程序是否獲取到的天氣數(shù)據(jù)。
具體代碼如下:
原始json格式的天氣數(shù)據(jù)和解析后的天氣和溫度數(shù)據(jù)如下:

天氣現(xiàn)象代碼對照表
解析到的天氣數(shù)據(jù),除了英文形式的天氣信息(text),還有一個(gè)對應(yīng)的天氣碼(code),如上圖的Cloudy對應(yīng)的天氣碼是4。通過天氣碼,也可以轉(zhuǎn)換為天氣。天氣碼的對照表可參考心知天氣文檔:https://docs.seniverse.com/api/start/code.html

簡化起見,這里只使用常用的4種天氣。
代碼中文英文0晴(國內(nèi)城市白天晴)Sunny4多云Cloudy9陰Overcast13小雨Light Rain0
2 NTP網(wǎng)絡(luò)時(shí)間
NTP(Network Time Protocol) 是網(wǎng)絡(luò)時(shí)間協(xié)議,它是用來同步網(wǎng)絡(luò)中各個(gè)計(jì)算機(jī)時(shí)間的協(xié)議。
ESP8266可以連網(wǎng),那就也可以通過獲取網(wǎng)絡(luò)時(shí)間來得到當(dāng)前的時(shí)間:
3 OLED顯示頁面設(shè)計(jì)
獲取到天氣信息和時(shí)間后,需要將這些信息顯示出來。
這里使用0.96寸OLED顯示屏來顯示,借助U8g2庫,顯示文字與天氣圖標(biāo)(U8g2庫的使用,可參考:https://www.bilibili.com/read/cv15542275)。
具體的顯示代碼如下:
4 最終效果
