学习HAL库STM32F103C8T6(实时时钟项目、WIFI天气预报项目)
1.项目:实时时钟(结合RTC、OLED相关内容)
1.2 项目需求
1. OLED屏幕显示当前时间、日期、闹钟等信息;
2. 正常模式下,按下 KEY1 ,进入时间设置模式,此时按下 KEY2 则可以循环跳转修改秒、分、时、日、 月、年;
3. 时间设置模式下,KEY3 增加数值,KEY4 减小数值,再次按下 KEY1 则退出时间设置模式,并保存修改 后的时间;
4. 正常模式下,按下 KEY2,进入闹钟设置模式,此时按下 KEY2 则可以循环跳转修改秒、分、时;
5. 闹钟设置模式下,KEY3 增加数值,KEY4 减小数值,再次按下 KEY1 则退出闹钟设置模式,并保存修改 后的闹钟;
6. 到达闹钟时间后,蜂鸣器响起。按下 KEY3 或 KEY4 停止蜂鸣器。
1.3 硬件清单
1.OLED 屏幕
2.蜂鸣器
3.按键(2个)
4.开发板
1.4 硬件接线
1.5 项目框图
1.6 代码编写
1.6.1OLED屏幕相关代码编写
1.6.1.1 OLED头文件编写
1.6.1.2 OLED相关字符库编写
使用取模工具将要使用的汉字存到这个数组里
1.6.1.3 OLED相关函数编写
屏幕上显示按照这个图来显示
1.6.2 RTC相关代码编写(设置时间和闹钟)
1.6.2.1 RTC头文件编写
1.6.2.2 RTC相关函数编写
1.6.3 按键相关代码编写
1.6.3.1 按键头文件编写
1.6.3.2 按键相关函数编写
1.6.4.蜂鸣器相关代码编写
1.6.4.1 蜂鸣器头文件编写
1.6.4.2 蜂鸣器相关函数编写
1.6.5 主函数编写
1.7 项目展示效果(上传不了视频不方面展示全部功能)
2.项目:Wi-Fi天气预报
2.1 项目需求
使用 ESP8266 通过 HTTP 获取天气数据(心知天气),并显示在 OLED 屏幕上。
按键 1 :循环切换今天/明天/后天天气数据;
按键 2 :更新天气。
2.2 硬件清单
1.OLED
2.ESP8266
3.开发板
4.硬件接线
2.3 项目框图
2.4 相关代码编写
2.4.1 OLED相关代码编写
2.4.1.1 OLED头文件编写
2.4.1.2 OLED相关字符库编写
2.4.1.3 OLED相关函数编写
2.4.2 ESP8266模块编写(发送JSON包到心知平台上,主机接收返回结果)
心知天气的JSON包格式是
https://api.seniverse.com/v3/weather/daily.json?key=自己账号的密钥&location=想查询的地区代码&language=语言&unit=c&start=从哪一天开始查&查到第几天
下面是我的json包
https://api.seniverse.com/v3/weather/daily.json?key=SUZyuS__R6vKw-sxv&location=WX4FBXXFKE4F&language=zh-Hans&unit=c&start=0&days=1
放到浏览器搜索出现了
再将这段放进JSON解析工具里解析出来了下面这段
2.4.2.1 EPS8266头文件编写
2.4.2.2 ESP8266相关函数编写
2.4.3 weather相关代码编写(用于解析JSON包和封装天气的函数)
2.4.3.1 weather头文件编写
2.4.3.2 weather相关函数编写
JSON包解析库函数是从GitHub上下载的,使用前将内存堆的空间改大些
将0x00000200改为0x00000C00防止堆空间不够用
下面这段代码是给三天天气的JSON包解析我们只要日期、天气、最高温度、最低温度的数据
流程如图一层一层的拨开(可以对照代码和图来看):
1.第一步
2.第二步
3.第三步(获取想要的数据)