基8266实现天气预报
基于8266實(shí)現(xiàn)天氣預(yù)報(bào)
使用ESP8266或者其他網(wǎng)絡(luò)模塊獲取網(wǎng)絡(luò)數(shù)據(jù)(天氣,時間等),還是挺簡單的,下面我們兩個部分來講解無線以及有線網(wǎng)絡(luò)如何獲取天氣預(yù)報(bào)信息。
查找目標(biāo)服務(wù)器
首先找到一個服務(wù)器,該服務(wù)器具備獲取天氣預(yù)報(bào)等相關(guān)接口,例如心知天氣:https://www.seniverse.com/login,丫丫天氣:http://www.yytianqi.com/等服務(wù)器,這里我們就以丫丫天氣為例來制作本次的實(shí)驗(yàn)。
配置服務(wù)器
打開丫丫天氣服務(wù)器網(wǎng)頁,該網(wǎng)頁地址為http://www.yytianqi.com/,打開之后點(diǎn)擊右上角注冊賬號,如下圖所示:
點(diǎn)擊注冊之后,我們必須填寫郵箱,密碼以及手機(jī)號碼相關(guān)信息,如下圖所示:
注冊完畢之后,登錄賬號,如下圖所示:
上圖中的key密鑰是我們所需要的,我們先把密鑰拷貝到記事本中。
丫丫天氣服務(wù)器相關(guān)接口信息
打開上方的API介紹我們就知道如何獲取服務(wù)器的相關(guān)信息了,如下圖所示:上圖中,API通用格式http://api.yytianqi.com/接口名稱?city=城市ID&key=用戶key就是我們使用無線或者有線網(wǎng)絡(luò)所發(fā)送的數(shù)據(jù)包,而這個數(shù)據(jù)包的接口名稱是下方的字符串,如下圖所示:
API通用格式的城市是根據(jù)該頁面下方的圖來獲取,每一個城市都一樣的ID,如下圖所示:
最后我們講解一下該服務(wù)器的請求模式以及返回結(jié)果,如下圖所示:
從上圖可知:我們可以請求三種模式,第一種使用程序的ID獲取,第二種使用城市的IP獲取,第三種是獲取城市的經(jīng)緯度信息。本次的實(shí)驗(yàn)我們使用第一種獲取方式。
上圖的下面的內(nèi)容就是服務(wù)器返回的結(jié)果,所以我們的代碼必須移植JSON包來解析,根據(jù)返回的字符串來獲取數(shù)據(jù)包的信息。
ESP8266配置TCPClient客戶端流程
ESP8266配置TCPClient流程如下圖所示:上述就是MCU發(fā)送到ESP8266的AT指令,這里我們無需過多的講解,下面我們講解如何使用串口發(fā)送指令或者數(shù)據(jù)到ESP8266相關(guān)函數(shù):
TCPClient配置源碼編寫:
上述的源碼主要配置ESP8266為TCPClient客戶端以及連接WIFI,最后開啟透傳模式,注意:我們連接的服務(wù)器地址為api.yytianqi.com,而端口號為80。
檢測應(yīng)答函數(shù)編寫:
在這里插入圖片描述
網(wǎng)絡(luò)調(diào)式助手模擬實(shí)驗(yàn)
首先在百度搜索“域名解析”,我們把a(bǔ)pi.yytianqi.com域名解析成IP地址,如下圖所示:
打開網(wǎng)絡(luò)調(diào)式助手以TCPClient方式連接服務(wù)器,如下圖所示:
根據(jù)上圖所示,我們發(fā)送給HTTP GET請求,該數(shù)據(jù)包為GET http://api.yytianqi.com/observe?city=CH010100&key=xxx,注意:xxx為平臺注冊的密鑰。點(diǎn)擊發(fā)送該數(shù)據(jù)包就獲取到相應(yīng)的信息,如下圖所示:
根據(jù)上圖的返回信息,我們可以對比官方提供的返回結(jié)果數(shù)據(jù)包對比,如下所示:
{"code": 1,"msg": "Sucess","counts": 2362, //訪問的剩余次數(shù)。"data": {"cityId": "CH010100", //城市id"cityName": "北京", //城市名稱"lastUpdate": "2016-03-09 17:10:00", //實(shí)況更新時間"tq": "多云", //天氣現(xiàn)象"numtq": "01", //天氣現(xiàn)象編碼"qw": "5.0", //當(dāng)前氣溫"fl": "微風(fēng)", //當(dāng)前風(fēng)力"numfl": "0", //當(dāng)前風(fēng)力編碼"fx": "無持續(xù)風(fēng)向", //當(dāng)前風(fēng)向"numfx": "0", //當(dāng)前風(fēng)向編碼"sd": "10.0" //相對濕度,直接在此數(shù)值后添加%即可} }根據(jù)上述的源碼和上圖對比,我們就知道各個字符串代表什么內(nèi)容。
在我們編寫之前,我們必須移植cjSON庫,我們可以調(diào)用這個庫提供的函數(shù)獲取數(shù)據(jù)包的信息,如下所示:
定義一個接收數(shù)據(jù)的結(jié)構(gòu)體:
根據(jù)字符串解析數(shù)據(jù)包的內(nèi)容:
此函數(shù)的第一個形參是接收丫丫天氣服務(wù)器的數(shù)據(jù)包,而第二個形參表示我們存儲數(shù)據(jù)包解析的內(nèi)容,比如我們調(diào)用函數(shù)numtq = cJSON_GetObjectItem(data,“numtq”)解析數(shù)據(jù)包的"numtq"字符串的內(nèi)容,numtq變量就會保存天氣現(xiàn)象的編碼的數(shù)據(jù),其他類似操作。
對數(shù)據(jù)包解析的內(nèi)容存儲在結(jié)構(gòu)體:
注意事項(xiàng):
發(fā)送一次HTTP GET請求時,服務(wù)器返回相應(yīng)的內(nèi)容并斷開連接,所以我們不斷請求獲取必須重新連接并發(fā)送數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的基8266实现天气预报的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq 电脑版导出聊天记录 用ie 浏览器
- 下一篇: 格兰杰因果检验_Python实现