硬件平臺(tái):ESP8266 WIFI模塊、STM32核心板、OLED顯示屏
實(shí)現(xiàn)方式:
1.ESP8266 WIFI工作模式為STA+TCPClinet;
2.通訊協(xié)議:HTTP
3.天氣數(shù)據(jù)獲取平臺(tái):心知天氣網(wǎng)
ESP8266 WIFI模塊自帶TCP/IP網(wǎng)絡(luò)協(xié)議棧,通過(guò)AT指令集完成網(wǎng)絡(luò)模式配置。知心天氣采用精準(zhǔn)數(shù)據(jù)源授權(quán)預(yù)報(bào)信息,可查看全國(guó)各地的實(shí)時(shí)天氣預(yù)告、24小時(shí)預(yù)報(bào)、15天預(yù)報(bào)、空氣質(zhì)量指數(shù)等預(yù)報(bào)信息。采樣HTTP協(xié)議接入服務(wù)器。
HTTP:超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)是一個(gè)簡(jiǎn)單的請(qǐng)求-響應(yīng)協(xié)議,它通常運(yùn)行在TCP之上。它指定了客戶(hù)端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。HTTP是應(yīng)用層協(xié)議,同其他應(yīng)用層協(xié)議一樣,是為了實(shí)現(xiàn)某一類(lèi)具體應(yīng)用的協(xié)議,并由某一運(yùn)行在用戶(hù)空間的應(yīng)用程序來(lái)實(shí)現(xiàn)其功能。
功能實(shí)現(xiàn)
1.創(chuàng)建心知天氣個(gè)人賬戶(hù),心知天氣地址:https://www.seniverse.com/api
2.選擇產(chǎn)品->天氣數(shù)據(jù)接口,激活產(chǎn)品
3.激活成功后即可看到公鑰和私鑰,這個(gè)參數(shù)在后面獲取數(shù)據(jù)是需要用到。
4.HTTP方式獲取天氣數(shù)據(jù)
天氣實(shí)況獲取接口參數(shù):
https://api.seniverse.com/v3/weather/now.json?key=SwD4-aaQxhedD1z7U&location=beijing&language=zh-Hans&unit=c
“api.seniverse.com” -- 平臺(tái)訪(fǎng)問(wèn)域名
“SwD4-aaQxhedD1z7U” --個(gè)人私有秘鑰
“beijing” --要獲取的城市名稱(chēng)
“zh-Hans” --獲取到的數(shù)據(jù)語(yǔ)言(zh-Hans為簡(jiǎn)體中文)
平臺(tái)返回?cái)?shù)據(jù)格式:
5.功能實(shí)現(xiàn)
心知的 API 目前基于 http 協(xié)議,域名是 api.seniverse.com,端口是缺省的 80(http)和 443(https)。
int main()
{
u8 stat=0;
u16 cnt=0;
Beep_Init();//蜂鳴器初始化
Led_Init();//LED初始化
Key_Init();//按鍵初始化
Usartx_Init(USART1,115200,72);
Usartx_Init(USART2,9600,36);//藍(lán)牙默認(rèn)9600
Usartx_Init(USART3,115200,36);//WIFI默認(rèn)115200
TIMx_Init(TIM2,72,20000);//通過(guò)定時(shí)器2輔助串口接收數(shù)據(jù),20ms
TIMx_Init(TIM3,72,20000);//TIM3輔助串口2數(shù)據(jù)接收,20ms接收一幀數(shù)據(jù)
TIMx_Init(TIM4,72,20000);//TIM4輔助串口3數(shù)據(jù)接收,20ms接收一幀數(shù)據(jù)
printf("wifi Init\r\n");
count++;
cnt++;
DelayMs(10);
if(count>=500)
{
count=0;
USARTx_Sendstr(USART3,"GET https://api.seniverse.com/v3/weather/now.json?key=SwD4-ybQxhedD1z7U&location=jiangxi nanchang&language=en&unit=c\n");
// USARTx_Sendstr(USART3,"GET https://api.seniverse.com/v3/weather/grid/minutely.json?key=SwD4-ybQxhedD1z7U&location=114.38:27.80\n");
}
if(usart3_flag)
{
usart3_rx_buff[usart3_cnt]='\0';
weather_show_stat=1;
//printf("%s\r\n",usart3_rx_buff);
/*
{"results":[{"location":{"id":"WSCQ4UBFXPTE","name":"Yichun","country":"CN",
"path":"Yichun,Yichun,Jiangxi,China","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},
"now":{"text":"Sunny","code":"0","temperature":"36"},"last_update":"2020-08-03T14:00:00+08:00"}]}
*/
if(key==0)
{
/*解析天氣數(shù)據(jù)*/
stat=Weather_analysis(usart3_rx_buff,(u8 *)""name"",(u8 *)buff);//城市名稱(chēng)
if(!stat)
{
OLED_Display_str((127-48-strlen(buff)*8)/2,4,(u8 *)buff);
}
stat=Weather_analysis(usart3_rx_buff,(u8 *)""temperature"",(u8 *)buff);//獲取溫度
if(!stat)
{
OLED_Display_str(127-26,6,(u8 *)" ");
OLED_Display_str(127-20-strlen(buff)*8,6,(u8 *)buff);
OLED_Display_Flont(127-20,6,4);//顯示℃
}
stat=Weather_analysis(usart3_rx_buff,(u8 *)""code"",(u8 *)buff);//天氣代碼
if(!stat)
{
sscanf(buff,"%d",(int *)&cnt);
//printf("cnt=%d\n",cnt);
switch(cnt)
{
case 0://晴
case 1://晚上晴
OLED_Dislay_Bmp(127-48,0,48,48,bmp_0);
break;
case 4://多云
OLED_Dislay_Bmp(127-48,0,48,48,bmp_4);
break;
case 5://晴轉(zhuǎn)多云
OLED_Dislay_Bmp(127-48,0,48,48,bmp_5);
break;
case 6:
case 7:
case 8:
case 9://陰
OLED_Dislay_Bmp(127-48,0,48,48,bmp_9);
break;
case 10://陣雨
case 11://雷陣雨
case 13:
case 14://雨
case 15:
case 16://大雨
case 17:
case 18://暴雨
OLED_Dislay_Bmp(127-48,0,48,48,bmp_14);
break;
default:
OLED_Dislay_Bmp(127-48,0,48,48,bmp_0);
break;
}
}
}
usart3_flag=0;
usart3_cnt=0;
}
6.平臺(tái)返回?cái)?shù)據(jù)解析
平臺(tái)返回?cái)?shù)據(jù)格式為Json格式數(shù)據(jù),可自行封裝函數(shù)完成數(shù)據(jù)解析。
/******************解析 天氣數(shù)據(jù)****************
形參:u8* buff原始數(shù)據(jù)
u8 *Weather_stat天氣數(shù)據(jù)標(biāo)志
u8 *data解析獲取到的數(shù)據(jù)
返回值:0---成功,其他值---失敗
************************************************/
u8 Weather_analysis(u8* buff,u8 *Weather_stat,u8 *data)
{
char *p=NULL;
u16 i=0;
p=strstr((char *)buff,(char *)Weather_stat);//獲取溫度
if(p)
{
p+=strlen((char *)Weather_stat)+2;
i=0;
while(*p!='"' && *p!='\0')
{
data[i++]=*p++;
}
data[i]='\0';
return 0;
}
else return 1;
}
7.天氣圖標(biāo)下載和實(shí)物效果
-
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44489瀏覽量
631988 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2900文章
44062瀏覽量
370241 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354298 -
HTTP
+關(guān)注
關(guān)注
0文章
499瀏覽量
30980 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
44757
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論