STM32-ESP8266解析天气
一:材料准备
STM32F103ZET6一个,TFT彩屏一个,esp8266一个
二:ESP8266前期准备
- esp8266使用AT固件
- 提前使用串口助手配置8266为STA模式,连上无线网络,网址参考https://www.cnblogs.com/lifan3a/articles/7070028.html
三:stm32配置
- 使用串口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); //释放内存
}
JSON数据解析是从网上参考大神的,读者可以系统学习一下。
api参考链接:https://docs.seniverse.com/api/start/code.html
测试方法:打开浏览器,打开以下链接,查看反馈数据,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解析天气相关推荐
- 使用 Fiddler 调试 心知天气,stm32 esp8266获取天气api
心知天气 - 免费用户的功能: 国内 370 个主要城市 天气实况,包括天气现象文字.代码和气温 3 项数据 未来 3 天天气预报,包括白天天气现象文字及代码.晚间天气现象文字及代码.当天最高温度和最 ...
- stm32+esp8266 GET请求心知天气的简单方法
文章目录 前言 一.ESP8266调试 二.代码部分 1.esp8266部分 2.单片机代码部分 总结 前言 因为之前学习stm32+esp8266请求心知天气时看的不是很懂,然后在成功调试出来之后发 ...
- 基于STM32+ESP8266+TFTLCD的天气预报显示
STM32+ESP8266+TFTLCD实现天气预报显示 前言 项目思路 效果演示 心知天气API 硬件部分 材料 硬件连接 软件部分 ESP8266AT固件指令 页面布局 JSON数据解析 时间数据 ...
- 毕业设计 : 基于stm32的微信天气机器人 - 天气检测 环境监测 微信机器人
0 简介 Hi,大家好,这里是三文工作室,今天向大家介绍一个 单片机项目 基于stm32的微信天气机器人 - 天气检测 环境监测 微信机器人 大家可用于 课程设计 或 毕业设计 print(" ...
- stm32 esp8266 ota升级-自建mqtt和文件服务器全量升级
stm32 esp8266 ota系列文章: stm32 esp8266 ota-快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级-tcp模拟http ...
- STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台
STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台 Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指 ...
- 基于STM32的动态天气时钟毕业设计
目录 概述 一.设计背景及设计内容 1.1背景 1.2设计内容 二.软件开发工具 2.1.串口调试助手 2.2 取模软件 2.3 Keil uVision5 MDK(ARM)软件 三. 系统硬件模块 ...
- stm32 esp8266配网-smartConfig和BT串口方式配网
stm32 esp8266 ota系列文章: stm32 esp8266 ota-快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级-tcp模拟http ...
- STM32+ESP8266+小程序的智能家居(项目简介)
"学习或者了解人工智能小伙伴福利来了,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家." 想了解或者学习人工智能可以看一下,我觉得学习起来挺有趣的 ...
最新文章
- 未来几年,人工智能就业市场将会如何?
- 图像对象paip.Image对象出现“对象当前正在其他地方使用或者GDI+中发生一般性错误的解决...
- python 中cookie_Python 处理Cookie的菜鸟教程(一)Cookie库
- 使用python移动飞信模块发送短信
- 框架学习与探究之AOP--Castle DynamicProxy
- 你以为妹子穿短裙真的是为了诱惑你吗?
- 项目经理让我陪着技术加班
- python亿级mysql数据库导出_Python之csv文件从MySQL数据库导入导出的方法
- 全排列 DFS 回溯
- 百度十亿级流量的搜索前端,是怎么做架构升级的?
- 嵌入式 U 盘自动挂载
- android缓存框架SimpleCache
- excel 某个单元格不是等于空值_将数据合并到一个单元格,用函数也OK
- python程序设计方法学_python学习笔记(12)--程序设计方法学
- dumpsys命令用法
- GO语言的进阶之路-流程控制
- 【树叶识别】基于matlab BP神经网络树叶类别【含Matlab源码 799期】
- MC9S12G128模块化分层化软件架构之八_QAC静态代码分析
- VMware中的三种网络模式
- eliteadmin网页后台管理模板简介
热门文章
- 微软天下行,豪侠汤山会 2008 Oct MVP OpenDay 博客园全家福!(更新完毕)
- 第十五篇:大球联赛与小球联赛
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十四) Be careful!前方怪物出没
- php is numeric用法,PHP使用 is_numeric的实例解析
- java集合方法之TreeSet.floor()和TreeSet.ceiling()
- 3-----A Forcast for Bicycle Rental Demand Based on Random Forests and Multiple Linear Regression
- 关于微信平台朋友和朋友圈分享不回调的问题。
- 9大吸金手游公司盘点 2013年营收破1亿美元
- 矿物岩石学知识点总结
- win10服务器权限修改时间,Win10没有权限修改系统时间如何解决?