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

发布者:电子艺术大师最新更新时间:2024-06-17 来源: elecfans关键字:ESP8266  STM32核心板 手机看文章 扫描二维码
随时随地手机看文章

硬件平台: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


关键字:ESP8266  STM32核心板 引用地址:ESP8266应用案例 基于STM32核心板获取网络天气数据

上一篇:STM32F407入门开发: NEC红外线协议解码
下一篇:【蓝桥杯嵌入式G4】第二章 stm32l0xx_hal_gpio.c的常见函数

推荐阅读最新更新时间:2024-11-11 10:33

021_STM32程序移植之_ESP8266连接onenet
本次教程是使用STM32C8T6通过ESP8266-12F模块将数据传输到ONENET云端去,并且云端能够下发命令给单片机来实现云端控制。本次实验硬件设备:STM32C8T6最小系统,ESP8266-12F模块,wifi。下面是简单的设备传输结构图: /********************************神奇的分割线********************************/ 视频演示教程:https://v.qq.com/x/page/i0814q78no3.html 资料下载地址:https://download.csdn.net/download/xiaoguoge11/10858840 欢迎
[单片机]
STM32也能轻松跑Linux了 !STM32MP135核心板开发板评测
上个月, 意法半导体推出了新一代64位Cortex-A35内核,主频高达1.5GHz的STM32MP2x系列微处理器(MPU) ,这让STM32MP系列处理器又上了一个新的台阶。 最近,收到了一套米尔基于STM32MP135核心板及开发板,首次接触STM32MPx处理器,体验了一下,感觉还不错。 STM32MP135与普通STM32单片机在性能、价格、应用场景等各方面都有差异。同时,STM32MP135并非局限于裸机、RTOS,而是定位于更高的Linux操作系统平台。 下面就结合【米尔基于STM32MP135核心板及开发板】给大家讲解一下STM32MP135强悍的性能以及开发入门等相关的内容。 硬件平台介绍
[单片机]
<font color='red'>STM32</font>也能轻松跑Linux了 !STM32MP135<font color='red'>核心板</font>开发板评测
【单片机笔记】NodeMcu入坑—ESP8266开发环境搭建
NodeMcu简介 NodeMCU是一个开源的物联网平台, 它使用Lua脚本语言编程。该平台基于eLua开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目, 例如 lua-cjson, spiffs. NodeMCU包含了可以运行在 esp8266 Wi-Fi SoC芯片之上的固件,以及基于ESP-12模组的硬件。 入手的的是一个CP2102版本的板卡 第一步、安装CP2102的串口驱动 第二步、下载相关的工具 1.配置java环境 2.烧录软件:nodemcu-flasher 3.基础固件下载 4.下载ESplorer 附上所有用到的工具和固件点击打开链接
[单片机]
【单片机笔记】NodeMcu入坑—<font color='red'>ESP8266</font>开发环境搭建
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved