NodeMCU(ESP8266) WiFi时钟

一、实现功能
利用oled屏幕作为显示,esp8266作为联网模块,实现一个可以联网校准时间的时钟😁
(PS:文末有完整代码以及相关资料)
二、主要材料
1、NodeMCU(esp8266)

2、oled屏

三、开发环境
这里代码我选择用arduino IDE写,因为有很多很方便很好用的库
具体如何使用arduino搭建esp8266环境网上有很多超详细保姆级教程,这里就不再赘述😁

然后就可以开始愉快的码代码了!
思路:连上WiFi---->通过获取时间的api得到准确时间---->将时间经过处理后保存---->用oled屏显示出来!
只要再加上亿点点细节就好啦!
一、连接WiFi
连接WiFi的方法和库有很多,我这里列出两种方法,大家可以自行根据情况选择
(1)使用ESP8266WiFi库
该库是用于控制esp8266 WiFi功能的基本库,功能强大,我这里只介绍如何连接上自己的WiFi这一功能
我们主要用到该库的两个基本函数----mode()和begin()
示例代码:

(2)使用WiFiManager库
该库功能强大,在一定程度上包含了上一个库的部分功能,在连接WiFi上更加自由,不需要在代码中配置WiFi名称和密码了
这个库并不是自带的,需要我们自行下载安装,大家可以去官网下载,也可以通过我的网盘下载,已经放在文末了(放心,是最新版本的,文件不大,下载很快😁)
工作流程:先判断有无连接WiFi,如果连上了就继续执行后续代码,如果没有连接WiFi,则先将8266的模式改为ap模式(热点模式),此时通过手机或者电脑可以看到一个名为“configure WiFi”的热点,连接8266发出的WiFi热点,会自动跳转到配置界面,在配置界面配置好WiFi后会自动退出ap模式,再转为sta模式连接刚刚配置好的WiFi
示例代码:

配置界面:


然后等待连接成功就好啦😁
二、获取时间
这里涉及到一个概念----->API
什么是API呢?简单的说就是一个接口,就是...有点不好解释哈哈😂,不太明白的可以百度一哈😁百度上有详细的解释
大家可以百度搜索一下时间api,有很多的,我这里不方便做推荐
大家可以先直接用浏览器打开这个api看一下是啥样的
我所用的这个api用浏览器打开后可以看到一长串字符,:{"sysTime2":"2021-02-27 21:35:09","sysTime1":"20210227213509"}
没错,我们要的时间就已经在这里面啦!😁
至于我们如何通过8266去访问这个api,直接看代码---->
代码示例:

三、数据处理
经过前两步我们已经能够得到当前的准确时间了,但是那么一长串信息显然没法直接使用,所以我们需要经过一定的处理,准确的将年、月、日、时、分、秒都单独的提取出来,这里我本来是想用正则表达式去提取的,但是没找到arduino相关的库,后来发现直接用字符串分割操作就可以完成了😂
网站返回的时间信息是字符串格式的,我们需要转成整数型,然后利用8266每秒+1成为一个时钟
数据处理代码:


substring(x,y)函数可以将第x个到第y个数之间的字符串提取出来,然后用toint()函数将字符串转为整型
四、每秒加一的实现
实现秒的加一有很多方法,例如在主循环中delay(1000),然后加一,我这里提供一种更好的方法,更加精确一点,需要用到 Ticker库
ticker库可以指定时间去自动执行一个函数
代码示例:

五、OLED的显示
数据已经全部准备完毕了!只要将数据显示出来就完工了!
oled的显示需要用到u8g2这个库,这是一个专门用于处理屏幕显示的库,十分强大好用
这里提供一段hello world的显示例程,大家先感受下
代码示例:


本人使用的是128*64像素的oled屏,通信协议为硬件i2c
小伙伴们可能找不到自己板子硬件i2c的脚,所以也可以这么写:

这样就是用IO口模拟的i2c,可以自定义引脚
其他的屏幕也是类似的方法,不论是spi还是i2c,硬件或是模拟,u8g2库都提供相应的支持,如果小伙伴们在型号的选择上还不是很清楚的话可以看看u8g2库的相关资料
六、亿点点细节
那么基本上就已经完成啦,接下来只要将各个部分拼接到一起,然后加以协调就可以了,前面所讲述的只是最重要最基础的部分,实际上还有许多需要思考的地方----->
1、WiFi不用一直连着,获取完时间就可以关闭
2、屏幕不用一直亮着,过一段时间能自动关闭
3、如何触发获取时间这一步骤(定时获取或者按一下按钮获取)
....
七、演示
开机后会有提示语,提醒按下按键

按下按键后会开始自动连接WiFi并且获取网络时间

然后就可以看到时间啦,并且30秒后oled会自动关闭,再次按下按钮可以唤醒

八、完整代码及资料
PS:本来可以直接把代码粘在这里的,但是出了点小问题,我发现会出现部分代码不全的情况,所以就用百度网盘来分享啦(小文件,下载很快的😉)
源码:
链接:https://pan.baidu.com/s/15Dl70g3fRFNg44HjhZ9f_w
提取码:8266
库:
链接:https://pan.baidu.com/s/1P1Je_-wMdL-Bv-GrhWfOAw
提取码:wifi

总结
总算码完啦!新人小白第一次写这个,百分百原创!有不足的地方望大家指出😁我会加以改进,希望大家多多支持呀!
