欢迎光临散文网 会员登陆 & 注册

NodeMCU(ESP8266) WiFi时钟

2021-03-01 10:28 作者:老闲渔  | 我要投稿

一、实现功能

利用oled屏幕作为显示,esp8266作为联网模块,实现一个可以联网校准时间的时钟😁

                                                                       (PS:文末有完整代码以及相关资料)


二、主要材料

1、NodeMCU(esp8266

NodeMCU(esp8266)

2、oled屏


OLED(i2c协议通信)


三、开发环境

这里代码我选择用arduino IDE写,因为有很多很方便很好用的库

具体如何使用arduino搭建esp8266环境网上有很多超详细保姆级教程,这里就不再赘述😁

然后就可以开始愉快的码代码了!

思路:连上WiFi---->通过获取时间的api得到准确时间---->将时间经过处理后保存---->用oled屏显示出来!

只要再加上亿点点细节就好啦!

一、连接WiFi

连接WiFi的方法和库有很多,我这里列出两种方法,大家可以自行根据情况选择

(1)使用ESP8266WiFi库

该库是用于控制esp8266 WiFi功能的基本库,功能强大,我这里只介绍如何连接上自己的WiFi这一功能

我们主要用到该库的两个基本函数----mode()和begin()

示例代码:

连接WiFi

(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

总结 

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


NodeMCU(ESP8266) WiFi时钟的评论 (共 条)

分享到微博请遵守国家法律