一:材料准备

STM32F103ZET6一个,TFT彩屏一个,esp8266一个

二:ESP8266前期准备

  1. esp8266使用AT固件
  2. 提前使用串口助手配置8266为STA模式,连上无线网络,网址参考https://www.cnblogs.com/lifan3a/articles/7070028.html

三:stm32配置

  1. 使用串口3(PB10,PB11)配置如下:
<usart3.c>//串口接收缓存区
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN];              //接收缓冲,最大USART3_MAX_RECV_LEN个字节.
u8  USART3_TX_BUF[USART3_MAX_SEND_LEN];             //发送缓冲,最大USART3_MAX_SEND_LEN字节vu16 USART3_RX_STA=0;    void USART3_IRQHandler(void)
{u8 res;          if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据{     res =USART_ReceiveData(USART3);        if((USART3_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据{ if(USART3_RX_STA<USART3_MAX_RECV_LEN)    //还可以接收数据{if(USART3_RX_STA==0)            {}USART3_RX_BUF[USART3_RX_STA++]=res;    //记录接收到的值    }else {USART3_RX_STA|=1<<15;                //强制标记接收完成} }}
}   <usart3.h>
#define USART3_MAX_RECV_LEN     1500                    //最大接收缓存字节数
#define USART3_MAX_SEND_LEN     600                 //最大发送缓存字节数
#define USART3_RX_EN            1                   //0,不接收;1,接收.extern u8  USART3_RX_BUF[USART3_MAX_RECV_LEN];         //接收缓冲,最大USART3_MAX_RECV_LEN字节
extern u8  USART3_TX_BUF[USART3_MAX_SEND_LEN];      //发送缓冲,最大USART3_MAX_SEND_LEN字节




使用的指令发送,代码如下

//天气连接端口号:80
#define WEATHER_PORTNUM     "80"
//天气服务器IP
#define WEATHER_SERVERIP    "api.seniverse.com"//时间端口号
#define TIME_PORTNUM            "80"
//时间服务器IP
#define TIME_SERVERIP           "www.beijing-time.org"void get_time()
{   resp=mymalloc(SRAMIN,10);p_end=mymalloc(SRAMIN,40);p=mymalloc(SRAMIN,40);                            //申请40字节内存sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",TIME_SERVERIP,TIME_PORTNUM);    //配置目标TCP服务器 if(ESP_sendCommand(p,"CONNECT",3000, 10)==Success); //连接TCP服务器   else ESP_errorLog(3);if(ESP_sendCommand("AT+CIPMODE=1\r\n","OK",3000, 10)==Success); //多连接模式else ESP_errorLog(3);if(ESP_sendCommand("AT+CIPSEND\r\n","OK",3000, 10)==Success); //进入透传模式  else ESP_errorLog(3);myfree(SRAMIN,p);        //释放内存   p=mymalloc(SRAMIN,40);USART3_RX_STA=0;u3_printf("GET /time15.asp HTTP/1.1\r\nHost:www.beijing-time.org\n\n");delay_ms(1000);//if(USART3_RX_STA&0X8000)      //此时再次接到一次数据,为天气的数据{ USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符resp="Date";USART3_RX_BUF[USART3_RX_STA & 0x7ff] = 0;//printf("get_tim_srt:%s\r\n",USART3_RX_BUF);if(strstr((char*)USART3_RX_BUF,(char*)resp)) {resp="GMT";p_end = (u8*)strstr((char*)USART3_RX_BUF,(char*)resp);p = p_end - 9; //printf("get_net_str %s\r\n",p);nwt.hour = ((*p - 0x30)*10 + (*(p+1) - 0x30) + 8) % 24;  //GMT0-->GMT8                          nwt.min = ((*(p+3) - 0x30)*10 + (*(p+4) - 0x30)) % 60;                         nwt.sec = ((*(p+6) - 0x30)*10 + (*(p+7) - 0x30)) % 60;nwt.year = ((*(p-5) - 0x30)*1000 + (*(p-4) - 0x30)*100+ (*(p-3) - 0x30)*10+ (*(p-2) - 0x30)); nwt.date = ((*(p-12) - 0x30)*10 + (*(p-11) - 0x30));             if        ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Jan")) nwt.month=1; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Feb")) nwt.month=2; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Mar")) nwt.month=3; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Apr")) nwt.month=4; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "May")) nwt.month=5; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Jun")) nwt.month=6; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Jul")) nwt.month=7; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Aug")) nwt.month=8; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Sep")) nwt.month=9; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Oct")) nwt.month=10; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Nov")) nwt.month=11; else if   ((u8*)strstr((char*)USART3_RX_BUF,(char*) "Dec")) nwt.month=12;                                                                                               printf("nwt.year = %d\r\n",nwt.year);printf("nwt.month = %d\r\n",nwt.month);printf("nwt.date = %d\r\n",nwt.date);             //获取data 28日                    LCD_ShowxNum(78,50,nwt.year,4,16,0);        LCD_ShowChar(112,50,'-',16,0);                        LCD_ShowxNum(120,50,nwt.month/10,1,16,0);LCD_ShowxNum(128,50,nwt.month%10,1,16,0);LCD_ShowChar(136,50,'-',16,0);LCD_ShowxNum(144,50,nwt.date/10,1,16,0);LCD_ShowxNum(152,50,nwt.date%10,1,16,0);      printf("nwt.hour = %d\r\n",nwt.hour);printf("nwt.min = %d\r\n",nwt.min);printf("nwt.sec = %d\r\n",nwt.sec);    if(nwt.hour >12){nwt.hour = nwt.hour - 12;LCD_ShowString(112,70,200,16,16,"PM");}elseLCD_ShowString(112,70,200,16,16,"AM");LCD_ShowxNum(88,90,nwt.hour/10,1,16,0);LCD_ShowxNum(96,90,nwt.hour%10,1,16,0);LCD_ShowChar(104,90,':',16,0);                       LCD_ShowxNum(112,90,nwt.min/10,1,16,0);LCD_ShowxNum(120,90,nwt.min%10,1,16,0);LCD_ShowChar(128,90,':',16,0);LCD_ShowxNum(136,90,nwt.sec/10,1,16,0);LCD_ShowxNum(144,90,nwt.sec%10,1,16,0);//printf("uddate:nettime!!!");            myfree(SRAMIN,resp);myfree(SRAMIN,p_end);}  }USART3_RX_STA=0;USART3_RX_BUF[0]='\0';   //清空//printf("%s\r\n",USART3_RX_BUF);   //打印BUF数据u3_printf("+++");        //退出透传模式delay_ms(1000);myfree(SRAMIN,p);        //释放内存   printf("ALL   end ....................\r\n");    //解析结束
}
void get_weather()
{p=mymalloc(SRAMIN,40);//申请40字节内存sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",WEATHER_SERVERIP,WEATHER_PORTNUM);    //配置目标TCP服务器   if(ESP_sendCommand(p,"CONNECT",3000, 10)==Success); //连接TCP服务器   else ESP_errorLog(3);if(ESP_sendCommand("AT+CIPMODE=1\r\n","OK",3000, 10)==Success); //多连接模式else ESP_errorLog(3);if(ESP_sendCommand("AT+CIPSEND\r\n","OK",3000, 10)==Success); //进入透传模式  else ESP_errorLog(3);myfree(SRAMIN,p);        //释放内存   p=mymalloc(SRAMIN,40);USART3_RX_STA=0;u3_printf("GET https://api.seniverse.com/v3/weather/daily.json?key=pqe1fgv45lrdruq7&location=zhengzhou&language=zh-Hans&unit=c&start=0&days=5\n\n");delay_ms(1000);if(USART3_RX_STA&0X8000)     //此时再次接到一次数据,为天气的数据{ USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符}parse_3days_weather();   //解析天气u3_printf("+++");        //退出透传模式//delay_ms(1000); myfree(SRAMIN,p);        //释放内存
}
  1. JSON数据解析是从网上参考大神的,读者可以系统学习一下。

  2. api参考链接:https://docs.seniverse.com/api/start/code.html

  3. 测试方法:打开浏览器,打开以下链接,查看反馈数据,json解析。

https://api.seniverse.com/v3/weather/daily.json?key=pqe1fgv45lrdruq7&location=zhengzhou&language=zh-Hans&unit=c&start=0&days=5

废话不多说上图:

有疑问者请联系:QQ:1735915513

STM32-ESP8266解析天气相关推荐

  1. 使用 Fiddler 调试 心知天气,stm32 esp8266获取天气api

    心知天气 - 免费用户的功能: 国内 370 个主要城市 天气实况,包括天气现象文字.代码和气温 3 项数据 未来 3 天天气预报,包括白天天气现象文字及代码.晚间天气现象文字及代码.当天最高温度和最 ...

  2. stm32+esp8266 GET请求心知天气的简单方法

    文章目录 前言 一.ESP8266调试 二.代码部分 1.esp8266部分 2.单片机代码部分 总结 前言 因为之前学习stm32+esp8266请求心知天气时看的不是很懂,然后在成功调试出来之后发 ...

  3. 基于STM32+ESP8266+TFTLCD的天气预报显示

    STM32+ESP8266+TFTLCD实现天气预报显示 前言 项目思路 效果演示 心知天气API 硬件部分 材料 硬件连接 软件部分 ESP8266AT固件指令 页面布局 JSON数据解析 时间数据 ...

  4. 毕业设计 : 基于stm32的微信天气机器人 - 天气检测 环境监测 微信机器人

    0 简介 Hi,大家好,这里是三文工作室,今天向大家介绍一个 单片机项目 基于stm32的微信天气机器人 - 天气检测 环境监测 微信机器人 大家可用于 课程设计 或 毕业设计 print(" ...

  5. stm32 esp8266 ota升级-自建mqtt和文件服务器全量升级

    stm32 esp8266 ota系列文章: stm32 esp8266 ota-快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级-tcp模拟http ...

  6. STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台

    STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台   Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指 ...

  7. 基于STM32的动态天气时钟毕业设计

    目录 概述 一.设计背景及设计内容 1.1背景 1.2设计内容 二.软件开发工具 2.1.串口调试助手 2.2 取模软件 2.3 Keil uVision5 MDK(ARM)软件 三. 系统硬件模块 ...

  8. stm32 esp8266配网-smartConfig和BT串口方式配网

    stm32 esp8266 ota系列文章: stm32 esp8266 ota-快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级-tcp模拟http ...

  9. STM32+ESP8266+小程序的智能家居(项目简介)

    "学习或者了解人工智能小伙伴福利来了,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家." 想了解或者学习人工智能可以看一下,我觉得学习起来挺有趣的 ...

最新文章

  1. 未来几年,人工智能就业市场将会如何?
  2. 图像对象paip.Image对象出现“对象当前正在其他地方使用或者GDI+中发生一般性错误的解决...
  3. python 中cookie_Python 处理Cookie的菜鸟教程(一)Cookie库
  4. 使用python移动飞信模块发送短信
  5. 框架学习与探究之AOP--Castle DynamicProxy
  6. 你以为妹子穿短裙真的是为了诱惑你吗?
  7. 项目经理让我陪着技术加班
  8. python亿级mysql数据库导出_Python之csv文件从MySQL数据库导入导出的方法
  9. 全排列 DFS 回溯
  10. 百度十亿级流量的搜索前端,是怎么做架构升级的?
  11. 嵌入式 U 盘自动挂载
  12. android缓存框架SimpleCache
  13. excel 某个单元格不是等于空值_将数据合并到一个单元格,用函数也OK
  14. python程序设计方法学_python学习笔记(12)--程序设计方法学
  15. dumpsys命令用法
  16. GO语言的进阶之路-流程控制
  17. 【树叶识别】基于matlab BP神经网络树叶类别【含Matlab源码 799期】
  18. MC9S12G128模块化分层化软件架构之八_QAC静态代码分析
  19. VMware中的三种网络模式
  20. eliteadmin网页后台管理模板简介

热门文章

  1. 微软天下行,豪侠汤山会 2008 Oct MVP OpenDay 博客园全家福!(更新完毕)
  2. 第十五篇:大球联赛与小球联赛
  3. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十四) Be careful!前方怪物出没
  4. php is numeric用法,PHP使用 is_numeric的实例解析
  5. java集合方法之TreeSet.floor()和TreeSet.ceiling()
  6. 3-----A Forcast for Bicycle Rental Demand Based on Random Forests and Multiple Linear Regression
  7. 关于微信平台朋友和朋友圈分享不回调的问题。
  8. 9大吸金手游公司盘点 2013年营收破1亿美元
  9. 矿物岩石学知识点总结
  10. win10服务器权限修改时间,Win10没有权限修改系统时间如何解决?