ESP8266獲取網路天氣

2021-09-07 23:25:54 字數 1968 閱讀 1009

使用esp8266模組來獲取網路資料(天氣,時間等),還是挺簡單的。

一步一步來。

使得mcu可正常使用串列埠的傳送與接收,以及一些io控制esp8266的使能端與電源。

傳送"at+cwjap?\r\n"可以獲取當前連線的路由,如果沒有連線正確的路由,則使用"at+cwlap\r\n"命令獲取當前路由列表。

使用"at+cwjap=\"ssid_str\",\"password_str"\r\n"連線相關路由熱點,ssid_str為熱點名,password_str為密碼。注意其中的轉義符號\。

以yytianqi舉例,可以上他們的**檢視api說明。使用前需要註冊乙個賬號。(k780有公共測試的秘鑰不需要註冊也能使用)

**:傳送"at+cipstart=\"tcp\",\"api.yytianqi.com\",80\r\n"使用tcp方式連線伺服器,然後就可以與之通訊。這時可以使用at命令進入透傳模式,不過我不建議這樣,因為推出透傳模式有點坑。所以推薦直接使用傳送命令:"at+cipsend=num\r\n",num是實際需要傳送字串的位元組數。繼續,使用get命令請求資料"get ",***x是自己的秘鑰,註冊後**提供,"city="後面是城市編號。

這時伺服器會返回相關的資料,資料是json格式。前面我寫過冠以json在keil上的移植使用。這裡正好用上了。通常伺服器返回資料後會自動關閉tcp連線。不過為了保險最好傳送"at+cipclose\r\n"關閉與伺服器的連線。

}

理論上,json資料也就是特定格式的字串,可以自己對字串進行解析而不需要移植json。開始我也試過,比如使用strstr()函式尋找特定字串,但最終發現不穩健而且麻煩。原因是伺服器返回的資料模式不是每次都固定不變,比如某個內容,有時使用字元型,有時直接數字,打個比方也即是12和"12"的區別,甚至有時是浮點型有時又會變成整型資料。而且各個內容順序不保證一樣。所以還是建議移植json。

//天氣內容結構

typedef struct

_weathertype;

static void _getvalue(const cjson *item ,char val)

else

break;

case cjson_string:

sprintf(val,"%.5s",item->valuestring);//節省記憶體,暫時限定字元數5

break;

case cjson_array:

break;

case cjson_object:

break;

}}//使用cjson方式 獲取天氣內容

char jsondataanalyze(const char*pdata, _weathertype* ptq)

else

else

else}}

cjson_delete(json);

}return ptq->ok ;

}

//注意設定本文件編碼方式為gb2312或gbk

//根據編號返回天氣狀況漢字描述

char* weather_tq_str(char num)

return "unknown";

}//根據編號返回風向漢字描述

51微控制器使用 ESP8266獲取網路天氣

esp8266在硬體區域中是很常見的一款外設,而對於初學者來說,使用esp8266是比較困難的,但熟悉了它的at指令就會簡單很多 本文章主要介紹51微控制器使用esp8266進行獲取網路資訊 在使用之前,必須先在串列埠進行相關除錯 連線網路後傳送 at cipstart tcp api.senive...

ESP8266 利用網頁控制ESP8266

說明 發出 gpio 1 就輸出 亮燈 gpio 0 就輸出 滅燈 include const char ssid jia 這裡輸入wifi名稱 const char password lm654321 這裡輸入wifi密碼 wifiserver server 80 開啟板子的80埠 int val...

ESP8266學習筆記

因為此模式可控性高且方便,所以推薦此模式 測試指令 at 應用模式設定 at cwmode 3 ap 模式 1 esp8266模組作為熱點,實現手機或電腦直接與模組通訊,實現區域網無線控制。sta 模式 2 esp8266模組通過路由器連線網際網路,手機或電腦通過網際網路實現對裝置的遠端控制 sta...