数码之家
标题:
基于WiFi的网络授时时钟(带实时天气更新)设计——DIY方案分享
[打印本页]
作者:
Senseye
时间:
2019-6-17 12:38
标题:
基于WiFi的网络授时时钟(带实时天气更新)设计——DIY方案分享
本方案采用的是
MCU+AT
指令的形式开发,MCU是大家比较熟悉的意法半导体公司
STM32F103C8T6
,WiFi模块使用的是安信可
ESP-12F
,本方案是一个Demo设计,比较简单,仅实现了功能,算是一个抛砖引玉吧!
先上视频演示
:
https://v.youku.com/v_show/id_XN ... m=a2hzp.8244740.0.0
WiFi模块资料链接
:
https://wiki.ai-thinker.com/esp8266
STM32F103C8芯片资料链接
:
https://www.stmicroelectronics.c ... 103c8.html#overview
硬件部分
,由
时钟电路
+
WiFi模块
+
MCU最小系统
+
OLED显示屏
+
稳压电路
+
按键电路
组成,这里采用时钟电路是希望模块在断网后还能获取一个比较精准的时间,并且电路设计上增加了储能电容可以在断电一个月后保持时间数据不丢失,当然这里也可以用STM32里面的RTC时钟;OLED显示屏采用的是裸屏设计,使整体电路板一体化效果好些;其他电路都是参考开发板or硬件手册上设计的;硬件设计软件采用的是
Altium Designer (13.0)
,原理图概略图和硬件3D渲染图,如下图所示:
[attach]250085[/attach][attach]250086[/attach][attach]250087[/attach]
实物图如下图所示:
(电路板是找厂家打样的,元器件是纯人工手焊)
[attach]250088[/attach]
软件部分
,由
底层驱动
+
WiFi联网
+
调用API接口并解析数据
+
OLED显示
组成;首先分析一波,这里面用到了MCU的
USART
、
I2C*2
、
GPIO*2
引脚资源,然后对应去找相关类似的例程,既然已经有轮子了,为何还要花时间去造轮子,当然是直接改例程来的舒服。这里开发方式采用的是库函数开发,用的是
STM32的标准库
,对应找到了
OLED显示屏的驱动资料
、
PCF8563的驱动资料
、
WiFi模组的驱动资料
、
按键输入的驱动资料
;将它们整合到一个工程里面,然后更改里面的引脚配置等,就完成了整个设计的
底层驱动
。
WiFi联网
,这里WiFi是设置成了
STA模式
(STA模式是啥,可自行问度娘),然后连接手机开的热点(注意手机必须要能连接上公网,即我们常用的互联网)。具体如何设置可以参考WiFi模块的AT指令集,AT指令集在上面WiFi模块资料里面有。手机开的WiFi热点的账号密码需要事先知道,并写入在程序里面,后续如果需要更改热点的账号密码,就需要更改程序。
天气和时间更新
,即
调用API接口并解析数据
,这里用到了两个API接口,第一个是
心知天气
的天气实况数据获取,因为是免费版所以只能获取到天气现象和气温两项数据;第二个是
Nowapi
的北京时间数据获取。因为用到的两个API接口是隶属于两个不同的服务器,所以程序上需要进行切换,连完这个服务器后需要断开连另一个服务器,比较麻烦。后面我发现其实Nowapi里面就有天气数据可以获取,完全可以通过只连接这个服务器就实现天气和时间数据的更新。实现方法参考下面的网址,写比较详细。
心知天气
:
https://docs.seniverse.com/api/weather/now.html
、服务器IP
116.62.81.138
(域名api.seniverse.com)、默认端口80
Nowapi
:
https://www.nowapi.com/api/life.time
、服务器IP
103.205.4.43
(域名api.k780.com)、默认端口80
解析数据用的是比较简单的方法,因为需要解析的数据量不大,所以并没有移植cjson,直接用
strtok函数
硬解。
OLED显示
,OLED显示用的是
I2C接口
,然后给的例程只有常用的标点符号和26个英文字母的字库,如果需要汉字还需要自己添加字库,一般是用到什么汉字就添加什么汉字的字库,然后用例程里面给的功能函数去实现显示。
显示屏资料:
http://pan.baidu.com/s/1dFri9Vz
下图是用到的所有.c文件(除库函数之外)
[attach]250108[/attach]
bsp_usart1.c
是用来串口调试使用,可以打印在电脑串口调试助手上显示;
bsp_SysTick.c
是用来生成精准的延时函数,用于I2C通讯等对时序敏感的接口;
bsp_esp8266.c
里面是对WiFi模块的一些初始化配置和WiFi的功能函数;
Common.c
里面是一些辅助函数;
test.c
里面是实现WiFi配网应用和API接口调用及解析;
oled.c
里面显示屏的初始化配置和显示功能函数;
bsp_pcf8563.c
里面是时钟芯片的初始化配置和读写时间功能函数;
bsp_key.c
里面是按键的初始化配置、按键扫描功能函数和静态内容显示函数;
bsp_TiMbase.c
里面是定时器函数,这里为什么用到定时器,因为一般天气和时间数据刷新的频率不会太快,这里设定的是5分钟更新一次,那么这里就需要用到定时器。
注意
:"GET
http://api.k780.com/?app=life.ti ... a77&format=json
\n" ,里面的
appkey
=41298和
sign
=eb689df06015c995b73ae1f60c133a77,最好更换成自己的appkey和sign(网址上注册账号) "GET
https://api.seniverse.com/v3/wea ... =zh-Hans&unit=c
\n",里面的
key
=SO0c3M39I7uTr9XjF和
location
=guangzhou,最好换成自己的Key和城市(网址上注册账号)
[attach]250119[/attach]
[attach]250110[/attach]
作者:
八五哥
时间:
2020-4-1 21:31
这个哥们整得挺牛啊。
作者:
yznj
时间:
2020-4-17 11:08
东西整的不错,如果全部开源玩的人才多
作者:
netbeetle
时间:
2020-4-17 12:00
实际上,只要一片ESP8266就可以完成楼主所需要的功能了。
作者:
lyy-cy
时间:
2020-4-17 17:13
换成图片显示会更好看。
https://www.mydigit.cn/forum.php?mod=viewthread&tid=68548
作者:
水表君
时间:
2020-4-17 20:51
你访问API是用https?那还要涉及到安全证书。。。AT指令用着没骂街?
作者:
一二涯
时间:
2020-11-15 15:56
先试着看看,挺好
作者:
hnqylgq
时间:
2021-2-23 22:52
这个做的很好啊,调试不容易,谢谢分享
作者:
1065307738
时间:
2021-2-24 12:50
51都可以了,没必要用ARM吧。如果能输入WIFI名称密码就好了。
欢迎光临 数码之家 (https://www.mydigit.cn/)
Powered by Discuz! X3.4