ESP32控制器使用DS3231实时时钟模块的方法 | 您所在的位置:网站首页 › ds3231误差 › ESP32控制器使用DS3231实时时钟模块的方法 |
在本篇文章中,我们将介绍实时时钟 (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 实验室设备网 版权所有 |