在本教程中,我們將了解實時時鐘 (RTC) 及其與 ESP32和OLED 顯示器的接口。
我們將使用DS3231 RTC 模塊來跟蹤正確的時間,并使用 ESP32 作為我們的微控制器將其顯示在 SPI OLED 上。ESP32 不僅僅是一個微控制器。它內(nèi)部有Wi-Fi和藍(lán)牙芯片以及39個GPIO引腳。它支持所有通信協(xié)議,如SPI,I2C,UART等。
什么是 RTC??
DS3231是RTC(實時時鐘)模塊。它用于維護大多數(shù)電子項目的日期和時間。該模塊有自己的紐扣電池電源,即使主電源被移除或MCU經(jīng)過硬復(fù)位,它也能保持日期和時間。因此,一旦我們在此模塊中設(shè)置了日期和時間,它將始終跟蹤它。RTC IC有幾種類型可供選擇,如DS1307、DS3231等。
注意:首次使用此模塊時,您必須設(shè)置日期和時間。您也可以使用RTC IC DS1307,我們之前將DS1307與Arduino一起使用。
了解OLED顯示器:
術(shù)語OLED代表“有機發(fā)光二極管”,它使用與我們大多數(shù)電視中使用的相同技術(shù),但與它們相比像素更少。擁有這些看起來很酷的顯示模塊真的很有趣,因為它會讓我們的項目看起來很酷。
我們使用單色 7 針 SSD1306 0.96 英寸 OLED 顯示屏。選擇此顯示器的原因是它可以在三種不同的通信協(xié)議上工作,例如SPI 3線模式,SPI四線模式和IIC模式。本教程將介紹如何在SPI 4線模式下使用該模塊,因為它是最快的通信模式,也是默認(rèn)的通信模式。
引腳及其功能在下表中進(jìn)行了說明。
引腳編號 | 引腳名稱 | 其他名稱 | 用法 |
1 | 格德 | 地 | 模塊的接地引腳 |
2 | Vdd | 直流電,5V | 電源引腳(可承受 3-5V 電壓) |
3 | SCK | D0,SCL,CLK | 充當(dāng)時鐘引腳。用于 I2C 和 SPI |
4 | 自主權(quán)評估 | D1,莫西 | 模塊的數(shù)據(jù)引腳。用于 IIC 和 SPI |
5 | RES | RST,重置 | 重置模塊(在 SPI 期間很有用) |
6 | 直流 | 答0 | 數(shù)據(jù)命令引腳。用于 SPI 協(xié)議 |
7 | .CS | 芯片選擇 | 在 SPI 協(xié)議下使用多個模塊時很有用 |
在本教程中,我們將簡單地在4-Wire SPI模式下操作模塊,其余的將留給其他教程。
Arduino社區(qū)已經(jīng)為我們提供了很多庫,可以直接用于使它變得更加簡單。我嘗試了一些庫,發(fā)現(xiàn)Adafruit_SSD1306庫非常易于使用,并且有一些圖形選項,因此我們將在本教程中使用相同的選項。但是,如果您的項目有內(nèi)存/速度限制,請嘗試使用 U8g 庫,因為它運行速度更快且占用的程序內(nèi)存更少。
所需材料:
ESP32
DS3231 RTC 模塊
7 針 128×64 OLED 顯示模塊 (SSD1306)
公母線
面包板
電路圖:
RTC3231與ESP板的連接電路圖如下:
RTC DS3231 IC采用I2C通信模式。它具有SCL,SDA,Vcc和GND引腳。RTC 模塊與 ESP32 的連接如下:
RTC 的標(biāo)準(zhǔn)與標(biāo)準(zhǔn)實驗室 -> ESP32 的標(biāo)準(zhǔn)與標(biāo)準(zhǔn)實驗室,即引腳 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);
在設(shè)置函數(shù)中,我們將調(diào)用一個函數(shù)rtc.adjust(DateTime(__DATE__,__TIME__)),它將根據(jù)我們的PC時間設(shè)置時間。
void setup()
{
Serial.begin(9600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
rtc.adjust(DateTime(__DATE__, __TIME__));
之后,我們調(diào)用顯示函數(shù)以在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);
}
最后在循環(huán)函數(shù)中,我們將時間存儲在DateTime 現(xiàn)在預(yù)定義的變量中,并使用 setTextSize、setCursor 等顯示函數(shù)顯示時間。根據(jù)需要設(shè)置這些,并使用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 以其物聯(lián)網(wǎng)功能而聞名,因此您可以使用它在互聯(lián)網(wǎng)上發(fā)布時間。
#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
+關(guān)注
關(guān)注
119文章
6253瀏覽量
226580 -
實時時鐘
+關(guān)注
關(guān)注
4文章
297瀏覽量
66654 -
RTC
+關(guān)注
關(guān)注
2文章
603瀏覽量
68063 -
ESP32
+關(guān)注
關(guān)注
20文章
999瀏覽量
18617
發(fā)布評論請先 登錄
相關(guān)推薦
ESP32如何獲取系統(tǒng)上電時間?
ESP32模組的主要特性
ESP32在2.4寸彩屏的應(yīng)用
淺析Zephyr在ESP32上的啟動流程
ESP32系列芯片的規(guī)格
使用ESP8266從NTP服務(wù)器獲取時間并在OLED顯示器上顯示

使用Visuino DIY如何在M5StickC ESP32上顯示時間

帶有ESP32和OLED顯示屏的Instagram追隨者計數(shù)器

帶GPS和OLED顯示屏的ESP32開發(fā)板

帶OLED顯示屏的LoRa節(jié)點和3個帶ESP32的繼電器

LoRa模塊SX1278與ESP32結(jié)合使用的方法-上

ESP8266或ESP32上的WiFi Webradio

如何使用Visuino在M5StickC ESP32上顯示文本

在MATRIX Voice ESP32上開始使用藍(lán)牙

在ESP Wemos D1 OLED上顯示CPU時間

評論