ESP32控制器使用DS3231实时时钟模块的方法 您所在的位置:网站首页 ds3231误差 ESP32控制器使用DS3231实时时钟模块的方法

ESP32控制器使用DS3231实时时钟模块的方法

2024-01-25 23:50| 来源: 网络整理| 查看: 265

在本篇文章中,我们将介绍实时时钟 (RTC)模块以及OLED显示屏与ESP32控制器的连接使用方法。

我们将使用ESP32作为微控制器,DS3231实时时钟模块记录正确的时间,然后在SPI OLED显示屏上进行显示。 ESP32不仅仅是一个微控制器,同时内部有Wi-Fi和蓝牙芯片以及39个GPIO引脚。它支持所有常见通信协议,如SPI、I2C、UART等。

什么是RTC?

DS3231是一款RTC(实时时钟)模块。它记录大多数电子项目的日期和时间。该模块自带纽扣电池电源,即使主电源被移除或MCU复位,它也能保持日期和时间。因此,一旦我们在此模块中设置了日期和时间,它将始终对其进行记录。RTC芯片型号众多,如DS1307、DS3231等。

我们之前曾在以下项目中将 DS3231 RTC 与 Arduino 一起使用:

DS3231-RTC-Module.jpg (21.9 KB, 下载次数: 61)

下载附件  保存到相册

2021-9-8 15:49 上传

OLED显示屏简介

OLED,全称是Organic Light emitting diode(有机发光二极管),它使用的技术与我们大多数电视中使用的技术相同,但像素更少。使用这些显示模块会很有趣,因为它会让我们的项目看起来很酷。

Monochrome-7-pin-SSD1306-0.96-OLED-display.jpg (16.63 KB, 下载次数: 38)

下载附件  保存到相册

2021-9-8 15:52 上传

我们使用的是单色SSD1306 0.96英寸OLED显示屏。选择这款显示器的原因是它可以工作在SPI 3线模式、SPI 4线模式和IIC模式三种不同的通信协议上。本教程将介绍如何在SPI 4线模式下使用该模块。

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

所需的组件

●    ESP32开发板

●    DS3231 RTC模块

●    OLED显示屏模块 (SSD1306)

●    面包板

电路连接图

RTC3231实时时钟模块与ESP32开发板连接的电路图如下:

DS3231-Module-based-ESP32-Real-Time-Clock-circuit-diagram.jpg (162.59 KB, 下载次数: 87)

下载附件  保存到相册

2021-9-8 15:55 上传

DS3231模块使用I2C通信,包含4个引脚,分别是SCL、SDA、Vcc和GND引脚。 DS3231模块的SCL和SDA分别连接到ESP32开发板的D22和D21引脚,DS3231模块的电源引脚VCC和GND连接到ESP32的VCC和GND。

OLED显示屏模块 (SSD1306) 通过SPI模式连接到ESP32开发板。与ESP32的连接参考原理图。

ESP32-Real-Time-Clock-using-DS3231-Module.jpg (33.41 KB, 下载次数: 64)

下载附件  保存到相册

2021-9-8 16:01 上传

代码说明

我们需要中使用几个库来简化代码流程,可以从以下链接下载:

1. Adafruit_SSD1306:https://github.com/adafruit/Adafruit_SSD1306

2. SPI : https://github.com/PaulStoffregen/SPI

3. Adafruit_GFX : https://github.com/adafruit/Adafruit-GFX-Library

4. RTClib : https://github.com/adafruit/RTClib

首先在代码中包含所有的库的头文件

#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);复制代码

在setup()函数中,我们将调用一个函数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); }复制代码

最后在loop()函数中,我们将时间存储在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和RTC模块在OLED屏上显示时间的全部内容。ESP32以其物联网功能而闻名,因此您可以使用它从互联网上获取时间。如果有任何问题,请随时在本帖下面进行回复。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有