STM32+ESP8266获取网络时间和天气

发布者:美好回忆最新更新时间:2022-02-25 来源: eefocus关键字:STM32  ESP8266 手机看文章 扫描二维码
随时随地手机看文章

先给出两个可以获取天气和时间的网站


https://www.seniverse.com/docs  可以获取天气


http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&HTTP/1.1


可以获取时间


接下来简单说说怎么通过AT指令的方式去获取天气及时间信息


1:连网

首先,ESP8266肯定是需要连上网才能访问这些信息。所以,第一步要做的就是让ESP8266连接上wifi热点,可以是路由器,也可以是手机热点。下面写出重要的步骤


1:使用串口发送指令AT+CWMODE=1设置模块Wi_Fi应用模式为Station模式。


2:发送指令AT+RST使模块重启,重启后等待一段时间


3:发送指令AT+CIPMUX=0 设置模块为单路连接模式


4:发送指令AT+CWJAP="ssid","pwd",连接AP;(ssid就是你要连接WiFi的名字,pwd就是密码)


经过以上四步,ESP8266就可以连接上WIFI了.


完整版代码如下:


u8 atk_8266_wifista_config(void)

{

u8 *p;

p=pvPortMalloc(50);

POINT_COLOR=RED;

while(atk_8266_send_cmd("AT","OK",100))          //Check if the WIFI module is online

{

atk_8266_quit_trans();                       //Exit transparent transmission

atk_8266_send_cmd("AT+CIPMODE=0","OK",200);   

My_Pri_log_x(1,"ESP8266 does not existrn");

LED0=~LED0;

vTaskDelay(1000);

  LED0=1;

while(atk_8266_send_cmd("ATE0","OK",20));    //Close echo

atk_8266_send_cmd("AT+CWMODE=1","OK",50);    //Set WIFI STA mode

atk_8266_send_cmd("AT+RST","OK",20);    

vTaskDelay(3000);                            //Delay 3S for successful restart

atk_8266_send_cmd("AT+CIPMUX=0","OK",20);    //0:Single connection

sprintf((char*)p,"AT+CWJAP="%s","%s"",wifista_ssid,wifista_password);//Set wireless parameters

while(atk_8266_send_cmd(p,"WIFI GOT IP",500));//Connect to the target router

vPortFree(p);

return 0;

}


2:获取天气和时间

以获取天气为例,获取时间就是网站不同罢了。


 




上面一段话是在心知天气中截屏所得。


其中key= 后面的内容是你在心知天气注册后得到的一个密钥,注册很简单,不麻烦,而且是免费。


location= 后面是你要查询天气的城市,心知的网站上有城市的说明文档;


language= 后面的是语言的选择。官方也有说明文档。


欧克,有了以上可以获取天气等信息的网站后,我们就可以配置ESP8266去访问这个网址,从而得到我们想要的信息。


写出重要的步骤:


1:发送指令AT+CIPSTART= .... 连接到指定网站(就是上面的https://www.seniverse.com/docs )端口信息写80即可


2:发送指令AT+CIPMODE =1 设置为透传模式


3:发送指令AT+CIPSEND 开始透传


4:发送 GET+上面的获取时间的网址


5:稍等片刻,就会将天气等信息回传过来


6:退出透传模式(连续发送3个 + 即可退出透传模式)


7:发送指令AT+CIPCLOSE 来关闭透传


完整版代码如下:


/**

 * @brief :Get a real-time weather

 * @param 0:Get location, weather, temperature

 * @param 1:Get Time

 * @retval 0:Successful

 *         1:Get failed

 */

u8 get_current_Information(u8 select)

{

u8 *p;

u8 res;

 

p=pvPortMalloc(40);

 

if(select == 0)

    sprintf((char*)p,"AT+CIPSTART="TCP","%s",%s",WEATHER_SERVERIP,WEATHER_PORTNUM);    //Configure the target TCP server

else if(select == 1)

sprintf((char*)p,"AT+CIPSTART="TCP","%s",%s",TIME_SERVERIP,TIME_PORTNUM);    

 

res = atk_8266_send_cmd(p,"OK",200);

if(res==1)

{

vPortFree(p);

return 1;

}

vTaskDelay(300);

atk_8266_send_cmd("AT+CIPMODE=1","OK",200);      //The transmission mode is: transparent transmission

USART2_RX_STA=0;

atk_8266_send_cmd("AT+CIPSEND","OK",200);        //Start passthrough

My_Pri_log_x(1,"start trans...rn");

 

if(select == 0)

  My_Pri_log_x(2,"GET https://api.seniverse.com/v3/weather/now.json?key=S5b_Q9GDyOKOPWOAS&location=xiaogan&language=en&unit=cnn");

else if(select == 1)

  My_Pri_log_x(2,"GET http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&HTTP/1.1nn");

 

vTaskDelay(20);//Delayed 20ms returns the status of the command sent successfully

//atk_8266_at_response(1);

USART2_RX_STA=0;

vTaskDelay(1000);

atk_8266_at_response(0);

if(USART2_RX_STA&0X8000)             //At this time, the data is received again, which is the weather data

USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//Add terminator

if(select == 0)

    parse_now_weather(); 

else if(select == 1)

{

    parse_now_time();

}

  

atk_8266_quit_trans();//Exit transparent transmission

atk_8266_send_cmd("AT+CIPCLOSE","OK",50); //Close the connection

vPortFree(p);

return 0;

}


上面的函数通过传入0和1可以达到获取天气或者时间的功能。


3:对获取到的数据进行解析

你获取到的数据其实都是Json格式,我也不懂,但是有Demo对这些数据进行解析。


{"success":"1","result":{"timestamp":"1601813449","datetime_1":"2020-10-04 20:10:49","datetime_2":"2020骞?10鏈?04鏃? 20鏃?10鍒?49绉?","week_1":"0","week_2":"鏄熸湡鏃?","week_3":"鍛ㄦ棩","week_4":"Sunday"}}


上面这段,是获取时间后返回的数据。直接上解析代码,对葫芦画瓢即可


/**

 * @brief Analyze the current TIME

 */ 

u8 parse_now_time(void)

{

cJSON *root;

cJSON *pSub;

cJSON *pItem;

char *utf8str;

root = pvPortMalloc(sizeof(cJSON));

pSub = pvPortMalloc(sizeof(cJSON));

pItem = pvPortMalloc(sizeof(cJSON));

utf8str = pvPortMalloc(50);

memset(utf8str,0,50);

root = cJSON_Parse((const char*)USART2_RX_BUF);

if(root != NULL)

{

pSub = cJSON_GetObjectItem(root,"result");

if(pSub != NULL)

{

pItem = cJSON_GetObjectItem(pSub,"datetime_1");

if(pItem != NULL)

{

utf8str = pItem->valuestring;

        memcpy(ESP_TIME,utf8str,20);

My_Pri_log_x(1,"%d--%srn",__LINE__,utf8str); 

My_Pri_log_x(1,"%d--%srn",__LINE__,ESP_TIME);    

}

 

pItem = cJSON_GetObjectItem(pSub,"week_1");

if(pItem != NULL)

{

utf8str = pItem->valuestring;

memcpy(ESP_WEEK,utf8str,1);

My_Pri_log_x(1,"%d--%srn",__LINE__,utf8str); 

My_Pri_log_x(1,"%d--%srn",__LINE__,ESP_WEEK);        

}

}

}

vPortFree(root);

vPortFree(pSub);

vPortFree(pItem);

vPortFree(utf8str);

return 0;

}

关键字:STM32  ESP8266 引用地址:STM32+ESP8266获取网络时间和天气

上一篇:CAN_总线_STM32 (1)
下一篇:STM32 SPI NSS信号理解和DMA传输遇到的问题

推荐阅读最新更新时间:2024-11-08 11:40

STM32电源管理系统浅谈
电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求。在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续行时间。 STM32的电源管理系统主要分为: 1、备份域 2、调压器供电电路 3、ADC电源电路 备份域电路 STM32的备份域包括LSE振荡器、RTC、备份寄存器及备份SRAM这些器件,这部分的电路可以通过STM32的VBAT引脚获取供电电源,在实际应用中一般会使用3V的钮扣电
[单片机]
<font color='red'>STM32</font>电源管理系统浅谈
STM32之看门狗
一、独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) 。 在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器 IWDG_KR 中被写入 0xAAAA, I
[单片机]
<font color='red'>STM32</font>之看门狗
一文快速理解STM32中的上/下拉电阻
STM32中的GPIO 以STM32中的GPIO为例,如上图是GPIO的结构图。 从上图中标号2处可以看到,上拉和下拉电阻上都有一个开关,通过配置上下拉电阻开关,可以控制引脚的默认电平,这里有三种状态: 开启上拉时,引脚默认电压为高电平 开启下拉时,引脚默认电压为低电平 上拉和下拉不开启时,这种状态我们称为浮空模式 关于STM32的GPIO文章,请移步此处:STM32的GPIO电路原理。STM32上下拉及浮空模式的配置是通过GPIOx_CRL和GPIOx_CRH寄存器控制的,可以通过《STM32F1xx 中文参考手册》查阅。 开启上拉电阻或下拉电阻的作用 STM32内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很
[单片机]
一文快速理解<font color='red'>STM32</font>中的上/下拉电阻
stm32单片机5v电压怎么提供
STM32单片机一般需要供电电压为3.3V,但也有一些型号的单片机可以工作在5V电压下。在供电电压方面,有几种方法可以为STM32单片机提供5V电压:使用外部稳压器、使用开发板自带的5V引脚、通过USB线提供电源、或者使用外部电源模块。 使用外部稳压器: 使用外部稳压器是最常见的方式之一,可以稳定地提供5V电压给STM32单片机。具体步骤如下: 选择一个合适的外部稳压器,推荐使用L7805。 连接稳压器的输入引脚到正电源(通常是9V或12V电源)。 连接稳压器的地引脚到电源的负极,同时连接单片机的地引脚到稳压器的地引脚。 连接稳压器的输出引脚到单片机的5V引脚。 使用开发板自带的5V引脚: 一些开发板自带有额外的5
[单片机]
STM32之库函数开发总结
1、使用ST库对外设进行初始化,一般有以下步骤: ①定义一个xxx_InitTypeDef类型的初始化结构体; ②根据使用需求,向这些初始化结构体的成员写入特定的控制参数; ③填充好结构体之后,把这个结构体作为输入参数调用相应的外设库函数xxx_Init();从而实现向寄存器写入控制参数,并配置好外设。 2、标志位的检查与清除 对标志位进行检查的库函数,一般命名为xxx_GetFlagStatus()或xxx_GetITStatus(),功能分别为获取事件标志状态和中断标志位状态。 对标志位进行清除的ST库函数,一般命名为xxx_ClearFlag()或xxx_ClearITPendingBit()函数,功
[单片机]
sTM32 使用TIMx_CH1作为 Tx1F_ED 计数器时钟
环境:iar arm 5.3 stm32f103vbt6 使用PA.8 外部输入10Mhz的方波。可从systick中断得到数据4. 4×5000(预分频值)×1000(tick中断时间)=20MHz 属于双边沿检测,一个PA.8个脉冲有2个边沿,所以时钟加倍。 由于使用了TI1F_ED它的结构如下: void RCC_Configuration( void ) { /* Setup STM32 system (clock, PLL and Flash configuration) */ SystemInit( ); /* Enable GPIOA, GPIOC and USART1 clock */ RCC
[单片机]
<font color='red'>sTM32</font> 使用TIMx_CH1作为 Tx1F_ED 计数器时钟
Stm32 IAP程序编写及用户程序编写
Stm32f10x系列MCU Bootloader 流程 芯片:stm32f103ze 所需软件:SecureCRT (用于使用Ymode协议发送Application文件),其实应该我们自己写个上位机,这里借助SecureCRT来充当我们自己写的应用程序(用于验证Bootloader是否成功)。 keil版本:μVision V5.11.0.0 用途:使用通信接口用于软件的更新(免去拆机繁琐的流程)。 BootLoader其实看上去挺复杂的样子,但也还好~仔细查找网上的资料都有很多介绍,以下为自己做bootloader的过程以及应注意的事项,帮助大家少走弯路~ 请先下载我上传的资源: http://download.c
[单片机]
<font color='red'>Stm32</font> IAP程序编写及用户程序编写
STM32的RFID手持终端硬件设计
引言 射频识别(Radlo Frequency Identification,RFID)技术是近年来兴起的一种自动识别技术。该技术可利用射频信号识别对象,利用电磁耦合原理交换信息。与传统的识别技术相比,RFID技术具有读卡器和射频标签无接触的特点。由于RFID技术所具有的优点,它目前被广泛应用于身份识别、电子商务、工业自动化以及交通运输等领域。但是,现有的RFID读卡器在大规模的移动应用中仍存在着一些不足,例如处理速度较慢、人机交互不够友好、成本较高、不能方便与上位机进行通信等。本文设计的RFID手持终端采用STM32F103VET6嵌入式处理器作为主控芯片,CLRC632作为射频读卡芯片,可以读写工作在13.56 MHz的多种
[单片机]
<font color='red'>STM32</font>的RFID手持终端硬件设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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