0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-05-27 09:16 次阅读

硬件平台: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 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)
			{
				/*解析天气数据*/
				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=%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://晴转多云
							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!='\0')
		{
			data[i++]=*p++;
		}
		data[i]='\0';
		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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620822
  • 物联网
    +关注

    关注

    2868

    文章

    41622

    浏览量

    358351
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348735
  • HTTP
    +关注

    关注

    0

    文章

    466

    浏览量

    30312
  • ESP8266
    +关注

    关注

    50

    文章

    947

    浏览量

    43939
收藏 人收藏

    评论

    相关推荐

    STM32ESP8266与MQTT连接阿里云物联网的串口通信异常解析

    STM32ESP8266与MQTT协议连接阿里云物联网平台时常见的串口通信异常介绍 在构建物联网应用时,STM32ESP8266与MQTT协议的结合是实现设备与
    的头像 发表于 04-19 17:19 163次阅读

    esp8266数据不对是为什么?

    我使用的是esp8266测试,我按照说明书里的我编译后下载,提示也成功了 但是串口回传的数据不对,app也不能正常的连接,有童鞋知道指导下吗?
    发表于 11-07 06:52

    nodemcu和esp8266是什么关系?

    nodemcu和esp8266是什么关系 nodemcu和esp8266是什么关系?通俗理解就是nodemcu是一个开发板,基于esp8266的开发板。 目前市面上搭载有ESP8266
    的头像 发表于 10-20 14:53 2269次阅读
    nodemcu和<b class='flag-5'>esp8266</b>是什么关系?

    基于ESP8266的Agrumino Lemon

    电子发烧友网站提供《基于ESP8266的Agrumino Lemon.zip》资料免费下载
    发表于 06-15 09:19 0次下载
    基于<b class='flag-5'>ESP8266</b>的Agrumino Lemon

    ESP8266ESP32上的WiFi Webradio

    电子发烧友网站提供《ESP8266ESP32上的WiFi Webradio.zip》资料免费下载
    发表于 06-13 11:38 0次下载
    <b class='flag-5'>ESP8266</b>或<b class='flag-5'>ESP</b>32上的WiFi Webradio

    ESP8266初次如何实现无线通信(基于电脑与ESP8266)

    一.需要的软件及硬件 1.软件 2.硬件 二.ESP8266的使用 .ESP8266的介绍 2.ESP8266进行初始AT指令的配置步骤 三.所用软件安装分享 ESP8266
    发表于 05-30 09:53 14次下载
    <b class='flag-5'>ESP8266</b>初次如何实现无线通信(基于电脑与<b class='flag-5'>ESP8266</b>)

    ESP8266 DevKitC V1如何下载FW到定制ESP8266

    我是 ESP 论坛的新手,刚开始使用 ESP8266 进行开发。我有一个 ESP8266 DevKitc V1 和另一个用 ESP8266
    发表于 05-30 07:41

    自定义ESP8266不工作的原因?

    我目前正在开发基于 ESP8266 的模块。我从数据ESP8266获取了原理图。 这是一张图片: 问题是它不起作用。为了确保它不是软件或组件,我从另一个
    发表于 05-30 07:02

    如何使用多个ESP8266创建级联网络

    我们已经解决了使用多个 ESP8266 创建级联网络的方法在此视频中,您可以看到几个网络... a) 一个名为 PASILLO_IZQUIERDO。我们有一个 ESP8266 既可以作
    发表于 05-24 06:41

    求助,数据如何来自esp8266

    例如(以下html代码),我想通过网络服务器将数据esp8266发送到stm32f4。但是三个数据(红色,绿色,蓝色)将通过usart协议
    发表于 05-23 06:09

    ESP8266作为无线终端连接网络

    ESP8266既可以作为一个无线终端(STA模式),像手机一样连接路由器,也可以作为热点(AP模式),像路由器一样让手机、电脑来连接。本篇介绍ESP8266作为无线终端连接网络
    的头像 发表于 05-19 14:38 1364次阅读
    <b class='flag-5'>ESP8266</b>作为无线终端连接<b class='flag-5'>网络</b>

    ESP8266如何使用HTTP + PHP + MySQL从BD获取数据

    嗨,伙计们!这是我第一次来这里,希望我也能在以后的机会中帮助你们中的一些人。我试图从本地主机中运行在我自己的计算机上的 MySQL 数据库中获取数据。 这是我为此使用的 ESP8266
    发表于 05-19 08:35

    如何使用esp8266的网状网络

    网格中相互通信,并将所有数据转储到 Raspberry pi 模块,该模块记录来自每个 esp8266数据。 当打开特定开关时,连接到该开关的 ESP8266 将开始每 2 分钟发
    发表于 05-19 07:30

    如何通过ESP8266获取公共IP?

    我想知道,如果我可以通过 ESP8266 获取路由器的公共 IP? ESP8266 连接 --> 路由器 --> ESP 获取
    发表于 05-15 08:51

    STM32+ESP8266连接电脑Qt网络上位机——QT篇

    本文简单介绍下手写网络调试器并连接ESP8266模块 上篇 : STM32+ESP8266连接电脑Qt网络上位机——准备工作 目录 一、部分Qt代码及实现过程 二、实现过程——使用
    发表于 05-09 14:22 15次下载
    <b class='flag-5'>STM32+ESP8266</b>连接电脑Qt<b class='flag-5'>网络</b>上位机——QT篇