0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用ESP32在OLED上显示时间的方式

科技观察员 来源:circuitdigest 作者:里沙布·耆那教 2022-11-14 16:40 次阅读

在本教程中,我们将了解实时时钟 (RTC) 及其与 ESP32OLED 显示器的接口

我们将使用DS3231 RTC 模块来跟踪正确的时间,并使用 ESP32 作为我们的微控制器将其显示在 SPI OLED 上。ESP32 不仅仅是一个微控制器。它内部有Wi-Fi蓝牙芯片以及39个GPIO引脚。它支持所有通信协议,如SPI,I2CUART等。

什么是 RTC??

DS3231是RTC(实时时钟)模块。它用于维护大多数电子项目的日期和时间。该模块有自己的纽扣电池电源,即使主电源被移除或MCU经过硬复位,它也能保持日期和时间。因此,一旦我们在此模块中设置了日期和时间,它将始终跟踪它。RTC IC有几种类型可供选择,如DS1307、DS3231等。

pYYBAGNx_x2Ab33zAABklFhj4XI314.jpg

注意:首次使用此模块时,您必须设置日期和时间。您也可以使用RTC IC DS1307,我们之前将DS1307与Arduino一起使用。

了解OLED显示器:

术语OLED代表“有机发光二极管”,它使用与我们大多数电视中使用的相同技术,但与它们相比像素更少。拥有这些看起来很酷的显示模块真的很有趣,因为它会让我们的项目看起来很酷。


poYBAGNx_yCAGqS-AABOIi8OHNM838.jpg

pYYBAGNx_yKAWTO3AACPFjAo-nU476.jpg

我们使用单色 7 针 SSD1306 0.96 英寸 OLED 显示屏。选择此显示器的原因是它可以在三种不同的通信协议上工作,例如SPI 3线模式,SPI四线模式和IIC模式。本教程将介绍如何在SPI 4线模式下使用该模块,因为它是最快的通信模式,也是默认的通信模式。

引脚及其功能在下表中进行了说明。

引脚编号 引脚名称 其他名称 用法
1 格德 模块的接地引脚
2 Vdd 直流电,5V 电源引脚(可承受 3-5V 电压)
3 SCK D0,SCL,CLK 充当时钟引脚。用于 I2C 和 SPI
4 自主权评估 D1,莫西 模块的数据引脚。用于 IIC 和 SPI
5 RES RST,重置 重置模块(在 SPI 期间很有用)
6 直流 答0 数据命令引脚。用于 SPI 协议
7 .CS 芯片选择 在 SPI 协议下使用多个模块时很有用

在本教程中,我们将简单地在4-Wire SPI模式下操作模块,其余的将留给其他教程。

Arduino社区已经为我们提供了很多库,可以直接用于使它变得更加简单。我尝试了一些库,发现Adafruit_SSD1306库非常易于使用,并且有一些图形选项,因此我们将在本教程中使用相同的选项。但是,如果您的项目有内存/速度限制,请尝试使用 U8g 库,因为它运行速度更快且占用的程序内存更少。

所需材料:

ESP32

DS3231 RTC 模块

7 针 128×64 OLED 显示模块 (SSD1306)

公母线

面包板

电路图:

RTC3231与ESP板的连接电路图如下:

poYBAGNx_ySAVG3HAADvSXELoZM515.png

RTC DS3231 IC采用I2C通信模式。它具有SCL,SDA,Vcc和GND引脚。RTC 模块与 ESP32 的连接如下:

RTC 的标准与标准实验室 -> ESP32 的标准与标准实验室,即引脚 D22

RTC 的 SDA -> ESP32 的 SDA 即引脚 D21

RTC 的 GND -> ESP32 的 GND

RTC 的 Vcc -ESP32 的 > Vcc

在这里,我们使用SPI 模式将 128×64 OLED 显示模块 (SSD1306) 连接到 ESP32。因此,它将使用 7 个引脚。与 ESP32 的连接方式如下:

OLED 的 CS(片选)引脚 -ESP32 的 > 引脚 D5

OLED 的直流引脚 -ESP32 的 > 引脚 D4

OLED 的 RES 引脚 -ESP32 的 > 引脚 D2

OLED 的 SDA 引脚 -> 引脚 D23 即 ESP32 的 MOSI

OLED 的 SCK 引脚 -> 引脚 D18 即 ESP32 的 SCK

OLED 的 Vdd -ESP32 的 > Vcc

OLED 的 GND -ESP32 的 GND >

所以我们包含了所有的库

#include // for OLED display

#include // for I2C with RTC module

#include

#include // for display graphics

#include "RTClib.h" //to show time

然后定义OLED的所有引脚。您不需要为 RTC 模块定义引脚,因为这些引脚已在 WIRE 库中定义。

#define OLED_MOSI 23

#define OLED_CLK 18

#define OLED_DC 4

#define OLED_CS 5

#define OLED_RESET 2

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

在设置函数中,我们将调用一个函数rtc.adjust(DateTime(__DATE__,__TIME__)),它将根据我们的PC时间设置时间。

void setup()

{

Serial.begin(9600);

if (! rtc.begin()) {

Serial.println("Couldn't find RTC");

while (1);

}

rtc.adjust(DateTime(__DATE__, __TIME__));

之后,我们调用显示函数以在OLED上显示。

display.begin(SSD1306_SWITCHCAPVCC);

display.clearDisplay();

display.setTextColor(WHITE);

//display.startscrollright(0x00, 0x0F); // You can uncomment this line to scroll your text on oled

display.setTextSize(2);

display.setCursor(0,5);

display.print(" Clock "); //This will Display Clock on OLED for 3 seconds

display.display();

delay(3000);

}

最后在循环函数中,我们将时间存储在DateTime 现在预定义的变量中,并使用 setTextSize、setCursor 等显示函数显示时间。根据需要设置这些,并使用display.println功能在OLED上显示。

void loop()

{

DateTime now = rtc.now();

display.clearDisplay();

display.setTextSize(2);

display.setCursor(75,0);

display.println(now.second(), DEC);

因此,这就是您可以使用 ESP32 在 OLED上显示时间的方式,并且您知道 ESP 以其物联网功能而闻名,因此您可以使用它在互联网上发布时间。

#include

#include

#include

#include

#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

#define OLED_MOSI 23

#define OLED_CLK 18

#define OLED_DC 4

#define OLED_CS 5

#define OLED_RESET 2

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);


void setup()

{


Serial.begin(9600);


if (! rtc.begin()) {

Serial.println("Couldn't find RTC");

while (1);

}


rtc.adjust(DateTime(__DATE__, __TIME__));

display.begin(SSD1306_SWITCHCAPVCC);

display.clearDisplay();

display.setTextColor(WHITE);

//display.startscrollright(0x00, 0x0F);

display.setTextSize(2);

display.setCursor(0,5);

display.print(" Clock ");

display.display();

delay(3000);

}


void loop()

{

DateTime now = rtc.now();


display.clearDisplay();

display.setTextSize(2);

display.setCursor(75,0);

display.println(now.second(), DEC);


display.setTextSize(2);

display.setCursor(25,0);

display.println(":");


display.setTextSize(2);

display.setCursor(65,0);

display.println(":");


display.setTextSize(2);

display.setCursor(40,0);

display.println(now.minute(), DEC);


display.setTextSize(2);

display.setCursor(0,0);

display.println(now.hour(), DEC);


display.setTextSize(1);

display.setCursor(0,15);

display.println(now.day(), DEC);

display.print(daysOfTheWeek[now.dayOfTheWeek()]);


display.setTextSize(1);

display.setCursor(25,15);

display.println("-");


display.setTextSize(1);

display.setCursor(40,15);

display.println(now.month(), DEC);


display.setTextSize(1);

display.setCursor(55,15);

display.println("-");


display.setTextSize(1);

display.setCursor(70,15);

display.println(now.year(), DEC);


display.display();

}


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OLED
    +关注

    关注

    118

    文章

    5986

    浏览量

    221466
  • 实时时钟
    +关注

    关注

    4

    文章

    210

    浏览量

    65339
  • RTC
    RTC
    +关注

    关注

    2

    文章

    484

    浏览量

    65454
  • ESP32
    +关注

    关注

    13

    文章

    896

    浏览量

    15815
收藏 人收藏

    评论

    相关推荐

    【DFRobot Beetle ESP32-C3开发板试用体验】6行代码搞定OLED显示

         作为 单片机 的输出方式,最常用的是串口,显示屏等,OLED(ssd1306)相比串口会直观一些,下面介绍如何用python搞定OLED
    的头像 发表于 11-28 14:17 1508次阅读
    【DFRobot Beetle <b class='flag-5'>ESP32</b>-C3开发板试用体验】6行代码搞定<b class='flag-5'>OLED</b><b class='flag-5'>显示</b>

    ESP32_OLED_webradio-master

    ESP32_OLED_webradio-master
    发表于 01-24 17:13

    ESP32_OLED_webradio-master

    ESP32_OLED_webradio-master
    发表于 01-30 07:37

    基于ESP32设计一款智能手表

    SDA 引脚连接到 ESP32 的 I2C 数据 D21 引脚。请参阅 ESP32 引脚分配。下图向您展示了如何连接所有东西。带ESP32O
    发表于 06-23 06:10

    ESP32如何获取系统时间

    ESP8266里面可以通过 esp_get_time()函数 获取系统时间 ESP32
    发表于 02-17 07:45

    如何将Lolin ESP32连接到7针SPI Oled显示器?

    我需要一些帮助来将 Lolin ESP32 连接到 7 针 SPI Oled 显示器。我目前正在使用下面代码中列出的代码和引脚布局,但我无法显示任何内容。VCC 连接到 3.3V 引脚
    发表于 02-28 06:42

    将Lolin ESP32连接到7针SPI Oled显示器,无法显示任何内容的原因?

    我需要一些帮助来将 Lolin ESP32 连接到 7 针 SPI Oled 显示器。我目前正在使用下面代码中列出的代码和引脚布局,但我无法显示任何内容。VCC 连接到 3.3V 引脚
    发表于 04-12 06:55

    浅谈ESP32-C3与ESP32-S3芯片

    ESP32-C3、ESP32-S3的发布,不仅为IOT行业提供了高性价比、稳定、好用、安全的通讯层,支持AI加速,同时在显示层应用也将占有一席之地。
    发表于 04-28 10:37 1.7w次阅读

    ESP32系列芯片的规格

    ESP32是一款2.4GHz Wi-Fi和蓝牙组合芯片,采用TSMC超低功耗40nm设计技术它旨在实现最佳功率和射频性能,显示出鲁棒性、多功能性和灵活性在各种应用和电源场景中的可靠性。ESP32系列芯片包括
    发表于 04-25 16:21 7次下载

    使用Visuino DIY如何在M5StickC ESP32显示时间

    电子发烧友网站提供《使用Visuino DIY如何在M5StickC ESP32显示时间.zip》资料免费下载
    发表于 11-21 09:36 0次下载
    使用Visuino DIY如何在M5StickC <b class='flag-5'>ESP32</b>上<b class='flag-5'>显示</b><b class='flag-5'>时间</b>

    介绍一个使用ESP32模块开发的信息显示

    这是一个使用ESP32模块开发的信息显示器。同时也可以作为ESP32开发套件,自由实现所需功能,倾向于语音播报、终端显示方向的应用。
    的头像 发表于 11-21 10:47 1848次阅读

    带有ESP32OLED显示屏的Instagram追随者计数器

    电子发烧友网站提供《带有ESP32OLED显示屏的Instagram追随者计数器.zip》资料免费下载
    发表于 12-14 09:55 0次下载
    带有<b class='flag-5'>ESP32</b>和<b class='flag-5'>OLED</b><b class='flag-5'>显示</b>屏的Instagram追随者计数器

    带GPS和OLED显示屏的ESP32开发板

    电子发烧友网站提供《带GPS和OLED显示屏的ESP32开发板.zip》资料免费下载
    发表于 12-28 09:43 1次下载
    带GPS和<b class='flag-5'>OLED</b><b class='flag-5'>显示</b>屏的<b class='flag-5'>ESP32</b>开发板

    OLED显示屏的LoRa节点和3个带ESP32的继电器

    电子发烧友网站提供《带OLED显示屏的LoRa节点和3个带ESP32的继电器.zip》资料免费下载
    发表于 12-29 14:03 0次下载
    带<b class='flag-5'>OLED</b><b class='flag-5'>显示</b>屏的LoRa节点和3个带<b class='flag-5'>ESP32</b>的继电器

    ESP Wemos D1 OLED显示CPU时间

    电子发烧友网站提供《在ESP Wemos D1 OLED显示CPU时间.zip》资料免费下载
    发表于 06-29 14:39 0次下载
    在<b class='flag-5'>ESP</b> Wemos D1 <b class='flag-5'>OLED</b>上<b class='flag-5'>显示</b>CPU<b class='flag-5'>时间</b>