关于ESP8266+OLED显示网络天气+天气图标,我掉进过的一些坑 |
您所在的位置:网站首页 › 天气的标志怎么画 › 关于ESP8266+OLED显示网络天气+天气图标,我掉进过的一些坑 |
就权当是给自己写的一个总结吧。 中间也走过不少的弯路,没人指导,只有自己慢慢摸索,网上看到的教程也是零零散散,或许是自己C代码功底不够硬,总之照搬别人的结果坑到最后还是自己,搞得一身疲惫,最后索性,按自己的想法来搞,废话不多说,先上几张图: 第二个指针数组是提示。这里多说一句,本人不才,在这里问一下大家,这个串口通信能不能同时复用两组引脚?比如USART1,它可以复用PA9,PA10还有PD5,PD6,如果我两组都想一起用行不行?我自己试了一下,结果搞得两组引脚都失灵了,屏闭掉其中一组,另外一组又好了,实在无语!如果不用两组引脚,那么我就无法在串口助手上打印我需要的信息,我记得在做GPS实验时是可行的,为什么这里就不行了呢?仔细缕一下思路发现了问题:就是说两组引脚共用一个USART,会出现两个输入和两个输出,USART在串口打印出来变成输出,而只要有输出了,它又会变成是给ESP8266输出命令的!这有点乱套了,反正我是试不出来,不知道哪位兄弟做出来过,告知我一下。 对了,这里我要说一下,我用的是STM32F407VET6。 后来,我又充分挖掘了我的这颗小脑袋的潜能,我找到了一种方法,用两个串口通信:USART1,和USART2。 USART1连接ESP8266,USART2配合USART1和串口助手,这样我就能在串口助手上看到了调试信息,还能用串口助手给ESP8266发送指令!具体做法请看本文后边的代码,总 之呢,没有人带,靠自己去摸索,坑真的是一个接着一个,比如,ESP8266,要用AT退出透传真的好难,发了三个“+++”--此处没有回车换行,它是一点反应都没有,看来是我对ESP8266学得不够精,我承认了!我只会按MCU上的复位键,然后再“+++”,这样好多了,每次都能退出了。 回到正题:我用一个for循环就把所有的AT指令发送出去,因为我发现ESP8266也不是吃素的,它反应很快,都是秒应答的,既然如此,我为什么不发快一点呢,所以我用for循环把指令发送出去,而且后期上边的设置可能也不会再走一遍吧?因为每次只有连上网了,前边的设置不已经是默认的吗? void WIFI_Init(void) { int i; u8 mark = 0; for(i=0;i6)page=1; } } else if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==RESET) { delay_ms(10); if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==RESET) { OLED_Clear(); page--; if(page==0)page=6; } } }最后主函数用switch()达到换页显示的效果: while(1) { KeyScan(); switch(page) { case 1: { RTC_ShowTime(); break; } case 2: { Current_Weather_Show_0(); break; } case 3: { Current_Weather_Show_1(); break; } case 4: { Current_Weather_Show_2(); break; } case 5: { Current_Weather_Show_3(); break; } default: { OLED_ShowStr(30,3," WELCOME",2); break; } }case 1是显示RTC时钟的,网络上返回的时钟仅用来校正; ```c void Current_Weather_Show_0(void) { if(code>10)code=0;//本语句后期加入图标调整 OLED_ShowBMP(15,1,code);//天气图标 OLED_ShowCHinese(54,1,10);//深 OLED_ShowCHinese(72,1,11);//圳 OLED_ShowCHinese(90,1,12);//今 OLED_ShowCHinese(108,1,13);//天 OLED_ShowStr(10,6,buff[1],1);//天气状态 OLED_ShowCHinese(54,4,17);//温 OLED_ShowCHinese(72,4,19);//度 OLED_ShowStr(92,5,buff[2],2);//温度值 OLED_ShowCHinese(108,4,16);//温度单位 OLED_ShowCHinese(54,6,18);//湿 OLED_ShowCHinese(72,6,19);//度 OLED_ShowStr(92,7,buff[3],2);//湿度值 } csae 2显示深圳今天的天气,由心知天气返回来的数据包解析得到,显示天气图标,温度,湿度和天气状态; case 3 是显示明天的天气状态,格式和case2一样,只是数据不一样而已; case 4也是同理; case 5显示数据更新时间。默认页显示“WELCOME”字样 ```c void Current_Weather_Show_3(void) { OLED_ShowCHinese(24,1,23);//上 OLED_ShowCHinese(44,1,24);//次 OLED_ShowCHinese(60,1,25);//更 OLED_ShowCHinese(78,1,26);//新 OLED_ShowStr(44,5,buff[6],2); }需要说明的是天气图标我并没有全部做成16进制的数据格式,因为太多了,所以只做了一部分。同时我也会把天气图标全部放传上,供大家参考。 总之,ESP8266模块想玩好并不容易,说难不难,说不难又难,它涉及到IIC或SPI,USART,OLED,ESP8266,RTC,当然还有按键的写法,如果是参考正点原子的还会涉及到定时器TIM,解析数据包cJSON的两个文件,网上很难找,也附上供大家使用,千万不要傻傻的用strstr()函数,会被人笑的。 文章的最后,附上全部代码,喜欢的就下载吧。相互学习,知无不答。 ESP8266+OLED+显示天气图标 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |