ESP8266应用案例 基于STM32核心板获取网络天气数据

发布时间:2024-06-17  

硬件平台:ESP8266 WIFI模块、STM32核心板、OLED显示屏

实现方式:

1.ESP8266 WIFI工作模式为STA+TCPClinet;

2.通讯协议:HTTP

3.天气数据获取平台:心知天气网

ESP8266 WIFI模块自带TCP/IP网络协议栈,通过AT指令集完成网络模式配置。知心天气采用精准数据源授权预报信息,可查看全国各地的实时天气预告、24小时预报、15天预报、空气质量指数等预报信息。采样HTTP协议接入服务器。

HTTP:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。

功能实现

1.创建心知天气个人账户,心知天气地址:https://www.seniverse.com/api

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70

2.选择产品->天气数据接口,激活产品

pYYBAGKPYxCAQ2UzAAHLzQ85ez8023.png

3.激活成功后即可看到公钥和私钥,这个参数在后面获取数据是需要用到。

poYBAGKPY1WAHLJ1AAFQlPguTPU174.png

4.HTTP方式获取天气数据


天气实况获取接口参数:


https://api.seniverse.com/v3/weather/now.json?key=SwD4-aaQxhedD1z7U&location=beijing&language=zh-Hans&unit=c

“api.seniverse.com”     -- 平台访问域名

“SwD4-aaQxhedD1z7U”  --个人私有秘钥

“beijing”             --要获取的城市名称

“zh-Hans”           --获取到的数据语言(zh-Hans为简体中文)


pYYBAGKPZIGALOEdAAGUV3LwI_8239.png

平台返回数据格式:

poYBAGKPZL-AJ2qfAAHZQ1Reazs776.png

5.功能实现

心知的 API 目前基于 http 协议,域名是 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);//蓝牙默认9600

Usartx_Init(USART3,115200,36);//WIFI默认115200

TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20ms

TIMx_Init(TIM3,72,20000);//TIM3辅助串口2数据接收,20ms接收一帧数据

TIMx_Init(TIM4,72,20000);//TIM4辅助串口3数据接收,20ms接收一帧数据

printf("wifi Initrn");

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=cn");

// USARTx_Sendstr(USART3,"GET https://api.seniverse.com/v3/weather/grid/minutely.json?key=SwD4-ybQxhedD1z7U&location=114.38:27.80n");

}

if(usart3_flag)

{

usart3_rx_buff[usart3_cnt]='';

weather_show_stat=1;

//printf("%srn",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)

{

/*解析天气数据*/

stat=Weather_analysis(usart3_rx_buff,(u8 *)""name"",(u8 *)buff);//城市名称

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=%dn",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://晴转多云

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.平台返回数据解析


平台返回数据格式为Json格式数据,可自行封装函数完成数据解析。


/******************解析 天气数据****************

形参:u8* buff原始数据

u8 *Weather_stat天气数据标志

u8 *data解析获取到的数据

返回值: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!='')

{

data[i++]=*p++;

}

data[i]='';

return 0;

}

else return 1;

}


7.天气图标下载和实物效果

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>