STM32+ESP8266水墨屏天气时钟:ESP8266连接心知天气获取数据

这篇具有很好参考价值的文章主要介绍了STM32+ESP8266水墨屏天气时钟:ESP8266连接心知天气获取数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目背景

利用STM32F103C8T6和ESP8266模块进行通信,获取心知天气的数据。
硬件设计为串口1(PA9和PA10)连接ESP8266.
串口2打印

一.ESP8266连接WIFI

ESP8266模块可以通过AT指令控制搭配使用源代码API函数开发,总体开发速度快,难度较低。
说明:下面仅列举一些最常用的AT指令及用法,指令的详细参数及使用说明请参考官方文档:ESP8266 AT指令集。
基础指令
AT 测试AT启动
AT+RST 重启模块
AT+GMR 查看版本信息
WiFi功能AT指令
AT+CWMODE 设置WiFi模式(sta/AP/sta+AP)
AT+CWLAP 扫描附近的AP信息
AT+CWJAP 连接AP
AT+CWQAP 与AP断开连接
AT+CWSAP 设置ESP8266 softAP配置
AT+CWLIF 获取连接到 ESP8266 softAP 的 station 的信息
关于WiFi模式这里要说明一下,sta模式下模块相当于客户端,像我们手机平板一样是要去连接路由器的,而AP模式下模块相当于路由器,是发射WiFi被别人连的。ESP8266支持两种模式并存(模块出厂默认的是AP模式) 。另外,扫描WiFi指令 AT+CWLAP 只能在sta模式下使用,否则会报ERRO错误, AT+CWJAP 和 AT+CWQAP 指令也同理。
ESP8266开启sta模式连接WiFi步骤

1.发送 AT+CWMODE=1 指令配置模块为sta模式(参数1,2,3分别对应模式sta,AP和sta/AP)。
2.发送 AT+CWLAP 指令扫描当前附近WiFi,模块会返回可用AP列表。
3.使用 AT+CWJAP=“WiFi名称”,“WiFi密码” 连接到指定的路由器,比如WiFi是 “ESP8266”,密码是“12345678”,实际连接WiFi发送的指令就是 AT+CWJAP=“ESP8266”,“12345678” 。
返回的“WIFI CONNECTED”说明连接成功,“WIFI GOT IP”代表模块分配到了IP。
4.最后可使用 AT+CWQAP 断开当前连接的WiFi。

//连接WIFI
//返回值:0,成功;1,失败
u8 esp8266_start_trans(void)
{
	u8 *p;
	u8 res=1; 
	int trans_time=0;
	p=mymalloc(SRAMIN,50);							//申请32字节内存,用于存wifista_ssid,wifista_password
	u2_printf("send:AT\r\n");	
	while(esp8266_send_cmd("AT","OK",20))//检查WIFI模块是否在线
	{
	} 
	//设置工作模式 1:station模式   2:AP模式  3:兼容 AP+station模式
	u2_printf("send:AT+CWMODE=1\r\n");	
	esp8266_send_cmd("AT+CWMODE=1","OK",100);
	
	//Wifi模块重启
	u2_printf("send:AT+RST\r\n");	
	esp8266_send_cmd("AT+RST","OK",50);
	delay_ms(1000);         //延时3S等待重启成功
	delay_ms(1000);
	delay_ms(1000);	
	
	//设置单路连接模式
	u2_printf("send:AT+CIPMUX=0\r\n");	
	esp8266_send_cmd("AT+CIPMUX=0","OK",20);   

	sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);//设置无线参数:ssid,密码
	u2_printf("send:AT+CWJAP=\"%s\",\"%s\"\r\n",wifista_ssid,wifista_password);
	
	while(esp8266_send_cmd(p,"WIFI GOT IP",300))		//连接目标路由器,并且获得IP
	{
		 //连接不到退出
		delay_ms(500);
        trans_time++;
		 if(trans_time>4)
		 {
		   return 10;
		 }
	}
	myfree(SRAMIN,p);
	return 0;		
}

二.心知天气注册

本项目为WiFi天气时钟,自然离不开需要从网页上读取天气信息。这里我们使用业内比较著名的知心天气。
登陆心知天气官网https://www.seniverse.com
注册完成后点击“产品”,进入“天气数据”stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气
立即免费试用
stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气
免费版申请
stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气
申请后可查看到自己的私钥(自行保存后面需要用到)
stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气
目前,大部分网络数据调用都是习惯性的调用数据提供商的API接口函数
重新点击“产品”—>“天气数据”,点击“查看API文档”
stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气点击"天气实况",打开对应的API接口文档
stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气
查看天气实况的接口地址,以及返回的数据结果示例(自行保存后面需要用到)
心知天气会为每个账户提供公钥和私钥,这里我们只用到私钥,只需替代掉接口网址中your_api_key为自己的私钥即可。
stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气
stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气

三.ESP8266获取天气数据

1.发送指令AT+CIPSTART=“TCP”,“api.seniverse.com”,80,和心知天气建立TCP连接。
2.发送指令“AT+CIPMODE=1”设置成功则返回OK。
3.发送指令“AT+CIPSEND” 开始透传。
4.发送“GET https://api.seniverse.com/v3/weather/now.json?key=私钥&location=城市拼音&language=zh-Hans&unit=c”向网址提出请求。
5.解析返回的数据。
6.退出透传。
7.关闭TCP连接。

//获取一次实时天气
//返回:0---获取成功,1---获取失败
u8 get_current_weather(void)
{
	u8 res;
	p=mymalloc(SRAMIN,40);							//申请40字节内存
	
	//配置目标TCP服务器
	sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",WEATHER_SERVERIP,WEATHER_PORTNUM);    
	u2_printf("send:%s\r\n",p);  
	res = esp8266_send_cmd(p,"OK",100);//连接到目标TCP服务器
	if(res==1)
	{
		myfree(SRAMIN,p);
		return 1;
	}
	delay_ms(300);
	
	//传输模式为:透传	
	u2_printf("send:AT+CIPMODE=1\r\n");	
	esp8266_send_cmd("AT+CIPMODE=1","OK",100);      
	
	//开始透传
	USART_RX_STA=0;
	u2_printf("send:AT+CIPSEND\r\n");	
	esp8266_send_cmd("AT+CIPSEND","OK",100);       

	u2_printf("GET https://api.seniverse.com/v3/weather/now.json?key=私钥&location=城市拼音\r\n");  
	printf("GET https://api.seniverse.com/v3/weather/now.json?key=私钥&location=城市拼音\r\n");  

	delay_ms(20);//延时20ms返回的是指令发送成功的状态
	USART_RX_STA=0;	//清零串口数据
	delay_ms(1000);
	if(USART_RX_STA&0X8000)		//此时再次接到一次数据,为天气的数据
	{ 
		USART_RX_BUF[USART_RX_STA&0X7FFF]=0;//添加结束符
	} 

	//解析天气数据
	cJSON_WeatherParse(USART_RX_BUF, results);		
	//退出透传
	atk_8266_quit_trans();

	//关闭TCP连接
	u2_printf("send:AT+CIPCLOSE\r\n");	
	esp8266_send_cmd("AT+CIPCLOSE","OK",50);    
	
	myfree(SRAMIN,p);
	return 0;
}

最终的效果就是串口打印出
stm32 心知天气,STM32,ESP8266,水墨屏天气时钟,stm32,ESP8266,心知天气

代码工程连接链接:https://pan.baidu.com/s/1fyeJFAyB0rBoF9bS7ysIYQ?pwd=1cni
提取码:1cni文章来源地址https://www.toymoban.com/news/detail-848304.html

到了这里,关于STM32+ESP8266水墨屏天气时钟:ESP8266连接心知天气获取数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 物联网小项目——墨水屏时钟(STM32+ESP8266实现)

    无意间在网上看到开源的使用墨水屏打造的桌面时钟,当个桌面小摆件可谓是十分优雅,于是就萌生出了自己DIY一个的想法。这个墨水屏时钟具有以下特点 时间日期的显示和自动校准 自动获取实时天气 半夜自动进入休眠 支持微信智能配网 目前已经实现软件功能,但是硬件

    2024年02月09日
    浏览(62)
  • STM32+esp8266,让你的STM32开发板连接网络-----esp8266

    分享一下,STM32开发板连接网络的第一种方法:连接esp8266。 esp8266与STM32利用串口通信连接,esp8266连接网络,把收到的数据通过串口的方式传输给STM32,之后STM32接收到消息做出对应的反应。 使用到的开发板如图:esp-12和正点原子stm32f103zet6. 首先,我们先掌握一下什么事串口通

    2024年02月02日
    浏览(46)
  • 从零开始制作一个基于STM32和ESP8266-01S的智能时钟(3)ESP8266-01S模块(上)

    提示:这里可以添加本文要记录的大概内容:之前在忙着,现在继续补充完整,然后这次的ESP-01S的典型应用图是没有连接RST引脚的,但是我的项目是用到了RST引脚的,所以需要使用跳线连接一下RST引脚。 本项目需要基础的stm32单片机知识,这里我推荐 链接:https://www.bilibil

    2024年02月03日
    浏览(53)
  • STM32-连接wifi模块(esp8266)

    目录 1. ESP8266模块介绍 1.1. 系统结构图 1.2. 功能介绍  1.3. AT指令说明  2. STM32连接ESP8266 3. ESP8266示例 3.1. ESP8266透传模式  3.2. ESP8266上传数据例程 乐鑫智能互联平台——ESP8266 拥有高性能无线 SOC,是一个完整且自成体系的 WiFi 网络解决方案,能够独立运行,也可以作为 slave 搭

    2024年01月16日
    浏览(67)
  • 【ESP8266物联网天气时钟】解决太极创客物联网天气时钟二三页出现NA的问题——新版和风天气API以及gzip数据解压

      前几天想要找一个开源项目做一下,然后一番搜索后找到了太极创客在B站发布的一个物联网小项目制作:“物联网天气时钟粉丝数显示oled小电视”。   这个项目主要用到的资源就是一块 ESP01S 和一块四脚的0.96寸 OLED 屏幕,正好手头也有,就打算复刻下这个项目,原项

    2024年02月05日
    浏览(45)
  • STM32通过ESP8266连接MQTT服务器

            ESP8266有多种连接MQTT方式,本文介绍使用的是AT MQTT版本固件的ESP01s,基于此固件版本进行说明。本文所需硬件:STM32F103RCT6、LED、ESP01s、DHT11,实现功能:温湿度上传和远程开关灯的基本功能。 B站视频教程:STM32+ESP8266+DHT11_哔哩哔哩_bilibili gitee: STM32_Share: STM32、DHT

    2024年02月09日
    浏览(51)
  • ESP8266+STM32获取网络时间、OLED显示时间&图片&视频。

    先说说我的设计内容的组成: 目录 学习过程不易,发文共享以下学习过程~ 1. STM32控制ESP8266获取网络时间 第一步:电脑控制ESP8266获取时间数据; 2. STM32基于获取到的时间使用定时器本地运行 3. 使用OLED显示时间数据,包括自定义的文字显示,图片显示,视频显示; 4. 完整的

    2024年02月08日
    浏览(40)
  • 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

    实现通过stm32f103c8t6+操作系统(freertos)读取dht12温湿度传感器的数据,采用ESP8266连接网络,经过MQTT协议连接阿里云IOT,进行数据的传输,以及服务器发送数据控制LED的亮灭,包括消息的发布和订阅等操作,完成云端和设备端的通讯。 首先,我们使用MQTT.fx模拟器,通过模拟的

    2024年02月06日
    浏览(51)
  • ESP8266+STM32+MQTT发送数据到阿里云服务器(三、配置ESP8266模块并测试连接)

    1、固件烧录器 2、固件 3、串口工具 4、ESP866模块 5、USB转TTL模块 (以上软件工具文末分享的链接有,硬件请淘宝自行购买) 硬件如下图: 1、按照下面对照关系进行接线 USB转TTL ESP8266 3.3V 3V3 GND GND RX TX TX RX IO0 GND 2、打开固件烧录工具图标 3、点击“ OK ” 4、在出现的界面中,

    2024年03月23日
    浏览(52)
  • 2-STM32+ESP8266连接onenet并上传数据(HTTP)

    上一篇文章内容链接为下 1-ESP8266-AT指令初试化及部分基础知识 2-STM32+ESP8266连接onenet并上传数据(HTTP) ESP8266,onenet云平台,STM32三部分在结合使用前最好还是分别学习了解一下,效率更高,在开发过程中哪里有问题就有针对性了。 1、了解8266的基础知识(模式、初始化、操作

    2023年04月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包