|
在本篇文章中,我们将介绍实时时钟 (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 一起使用:
OLED显示屏简介 OLED,全称是Organic Light emitting diode(有机发光二极管),它使用的技术与我们大多数电视中使用的技术相同,但像素更少。使用这些显示模块会很有趣,因为它会让我们的项目看起来很酷。
我们使用的是单色SSD1306 0.96英寸OLED显示屏。选择这款显示器的原因是它可以工作在SPI 3线模式、SPI 4线模式和IIC模式三种不同的通信协议上。本教程将介绍如何在SPI 4线模式下使用该模块。
Arduino社区已经为我们提供了很多库,可以直接使用这些库来简化这个过程。我尝试了一些库,发现Adafruit_SSD1306库非常易于使用,并且有一些图形选项,因此我们将在本文中使用该库。但是,如果您的项目有内存/速度限制,请尝试使用U8g库,因为它运行速度更快,占用的程序内存更少。
所需的组件 ● ESP32开发板 ● DS3231 RTC模块 ● OLED显示屏模块 (SSD1306) ● 面包板
电路连接图 RTC3231实时时钟模块与ESP32开发板连接的电路图如下:
DS3231模块使用I2C通信,包含4个引脚,分别是SCL、SDA、Vcc和GND引脚。 DS3231模块的SCL和SDA分别连接到ESP32开发板的D22和D21引脚,DS3231模块的电源引脚VCC和GND连接到ESP32的VCC和GND。
OLED显示屏模块 (SSD1306) 通过SPI模式连接到ESP32开发板。与ESP32的连接参考原理图。
代码说明 我们需要中使用几个库来简化代码流程,可以从以下链接下载: 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 <SPI.h> // for OLED display
- #include <Wire.h> // for I2C with RTC module
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h> // 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以其物联网功能而闻名,因此您可以使用它从互联网上获取时间。如果有任何问题,请随时在本帖下面进行回复。
|