STM32 ESP8266獲取網路時間和天氣

2021-10-09 23:36:54 字數 3501 閱讀 5145

目錄

1:連網

2:獲取天氣和時間

3:對獲取到的資料進行解析

先給出兩個可以獲取天氣和時間的**

可以獲取天氣

可以獲取時間

接下來簡單說說怎麼通過at指令的方式去獲取天氣及時間資訊

首先,esp8266肯定是需要連上網才能訪問這些資訊。所以,第一步要做的就是讓esp8266連線上wifi熱點,可以是路由器,也可以是手機熱點。下面寫出重要的步驟

1:使用串列埠傳送指令at+cwmode=1設定模組wi_fi應用模式為station模式。

2:傳送指令at+rst使模組重啟,重啟後等待一段時間

3:傳送指令at+cipmux=0 設定模組為單路連線模式

4:傳送指令at+cwjap="ssid","pwd",連線ap;(ssid就是你要連線wifi的名字,pwd就是密碼)

經過以上四步,esp8266就可以連線上wifi了.

完整版**如下:

u8 atk_8266_wifista_config(void)

led0=1;

while(atk_8266_send_cmd("ate0","ok",20)); //close echo

atk_8266_send_cmd("at+cwmode=1","ok",50); //set wifi sta mode

atk_8266_send_cmd("at+rst","ok",20);

vtaskdelay(3000); //delay 3s for successful restart

atk_8266_send_cmd("at+cipmux=0","ok",20); //0:single connection

sprintf((char*)p,"at+cwjap=\"%s\",\"%s\"",wifista_ssid,wifista_password);//set wireless parameters

while(atk_8266_send_cmd(p,"wifi got ip",500));//connect to the target router

vportfree(p);

return 0;

}

以獲取天氣為例,獲取時間就是**不同罷了。

上面一段話是在心知天氣中截圖所得。

其中key= 後面的內容是你在心知天氣註冊後得到的乙個金鑰,註冊很簡單,不麻煩,而且是免費。

location= 後面是你要查詢天氣的城市,心知的**上有城市的說明文件;

language= 後面的是語言的選擇。官方也有說明文件。

寫出重要的步驟:

1:傳送指令at+cipstart= .... 連線到指定**(就是上面的 )埠資訊寫80即可

2:傳送指令at+cipmode =1 設定為透傳模式

3:傳送指令at+cipsend 開始透傳

5:稍等片刻,就會將天氣等資訊回傳過來

6:退出透傳模式(連續傳送3個 + 即可退出透傳模式)

7:傳送指令at+cipclose 來關閉透傳

完整版**如下:

/**

* @brief :get a real-time weather

* @param 0:get location, weather, temperature

* @param 1:get time

* @retval 0:successful

* 1:get failed

*/u8 get_current_information(u8 select)

vtaskdelay(300);

atk_8266_send_cmd("at+cipmode=1","ok",200); //the transmission mode is: transparent transmission

usart2_rx_sta=0;

atk_8266_send_cmd("at+cipsend","ok",200); //start passthrough

my_pri_log_x(1,"start trans...\r\n");

if(select == 0)

my_pri_log_x(2,"get ");

else if(select == 1)

vtaskdelay(20);//delayed 20ms returns the status of the command sent successfully

//atk_8266_at_response(1);

usart2_rx_sta=0;

vtaskdelay(1000);

atk_8266_at_response(0);

if(usart2_rx_sta&0x8000) //at this time, the data is received again, which is the weather data

usart2_rx_buf[usart2_rx_sta&0x7fff]=0;//add terminator

if(select == 0)

parse_now_weather();

else if(select == 1)

atk_8266_quit_trans();//exit transparent transmission

atk_8266_send_cmd("at+cipclose","ok",50); //close the connection

vportfree(p);

return 0;

}

上面的函式通過傳入0和1可以達到獲取天氣或者時間的功能。

你獲取到的資料其實都是json格式,我也不懂,但是有demo對這些資料進行解析。

}上面這段,是獲取時間後返回的資料。直接上解析**,對葫蘆畫瓢即可

/**

* @brief analyze the current time

*/ u8 parse_now_time(void)

pitem = cjson_getobjectitem(psub,"week_1");

if(pitem != null)

}} vportfree(root);

vportfree(psub);

vportfree(pitem);

vportfree(utf8str);

return 0;

}

解析相關的 cjosn.c和.**件我上傳到csdn。只需要將上述函式中的記憶體申請和釋放函式換成你的專案中能用的函式就能解析。

stm32 esp8266驅動程式

esp8266模組是串列埠通訊,通訊的協議是at指令,要正確的配置對應的at指令模組才可以工作,這裡就需要知道at指令有沒有配置成功,這個比較容易實現,一般傳送at指令配置成功的話,晶元都會返回至少乙個ok,當然還有其它資料,我們只需要去解析有沒有接收到ok就知道指令傳送是否成功了。我這裡是作為tc...

stm32 esp8266上傳實時溫度到本地伺服器

在之前我們已經實現了esp8266和本地伺服器的互動,並將資料寫入到mysql資料庫中,但實際意義不大,我們需要實現將資料實時寫入,所以需要新增感測器模組,並以微控制器為主控處理資料,完成上傳。這一次配置esp8266不再使用串列埠助手,而是將命令寫到 中自動完成。我們使用兩個串列埠,串列埠一用來除...

STM32 ESP8266連線網路的幾種方法

上篇文章提到的 在程式中寫死 例如 void esp8266 init fixed wifi void define esp8266 wifi info at cwjap fast e162 12345678 r n define esp8266 tcp info at cipstart tcp w...