0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用ESP32在OLED上顯示時(shí)間的方式

科技觀察員 ? 來(lái)源:circuitdigest ? 作者:里沙布·耆那教 ? 2022-11-14 16:40 ? 次閱讀

在本教程中,我們將了解實(shí)時(shí)時(shí)鐘 (RTC) 及其與 ESP32OLED 顯示器的接口。

我們將使用DS3231 RTC 模塊來(lái)跟蹤正確的時(shí)間,并使用 ESP32 作為我們的微控制器將其顯示在 SPI OLED 上。ESP32 不僅僅是一個(gè)微控制器。它內(nèi)部有Wi-Fi藍(lán)牙芯片以及39個(gè)GPIO引腳。它支持所有通信協(xié)議,如SPI,I2C,UART等。

什么是 RTC??

DS3231是RTC(實(shí)時(shí)時(shí)鐘)模塊。它用于維護(hù)大多數(shù)電子項(xiàng)目的日期和時(shí)間。該模塊有自己的紐扣電池電源,即使主電源被移除或MCU經(jīng)過(guò)硬復(fù)位,它也能保持日期和時(shí)間。因此,一旦我們?cè)诖四K中設(shè)置了日期和時(shí)間,它將始終跟蹤它。RTC IC有幾種類型可供選擇,如DS1307、DS3231等。

pYYBAGNx_x2Ab33zAABklFhj4XI314.jpg

注意:首次使用此模塊時(shí),您必須設(shè)置日期和時(shí)間。您也可以使用RTC IC DS1307,我們之前將DS1307與Arduino一起使用。

了解OLED顯示器:

術(shù)語(yǔ)OLED代表“有機(jī)發(fā)光二極管”,它使用與我們大多數(shù)電視中使用的相同技術(shù),但與它們相比像素更少。擁有這些看起來(lái)很酷的顯示模塊真的很有趣,因?yàn)樗鼤?huì)讓我們的項(xiàng)目看起來(lái)很酷。


poYBAGNx_yCAGqS-AABOIi8OHNM838.jpg

pYYBAGNx_yKAWTO3AACPFjAo-nU476.jpg

我們使用單色 7 針 SSD1306 0.96 英寸 OLED 顯示屏。選擇此顯示器的原因是它可以在三種不同的通信協(xié)議上工作,例如SPI 3線模式,SPI四線模式和IIC模式。本教程將介紹如何在SPI 4線模式下使用該模塊,因?yàn)樗亲羁斓耐ㄐ拍J?,也是默認(rèn)的通信模式。

引腳及其功能在下表中進(jìn)行了說(shuō)明。

引腳編號(hào) 引腳名稱 其他名稱 用法
1 格德 模塊的接地引腳
2 Vdd 直流電,5V 電源引腳(可承受 3-5V 電壓)
3 SCK D0,SCL,CLK 充當(dāng)時(shí)鐘引腳。用于 I2C 和 SPI
4 自主權(quán)評(píng)估 D1,莫西 模塊的數(shù)據(jù)引腳。用于 IIC 和 SPI
5 RES RST,重置 重置模塊(在 SPI 期間很有用)
6 直流 答0 數(shù)據(jù)命令引腳。用于 SPI 協(xié)議
7 .CS 芯片選擇 在 SPI 協(xié)議下使用多個(gè)模塊時(shí)很有用

在本教程中,我們將簡(jiǎn)單地在4-Wire SPI模式下操作模塊,其余的將留給其他教程。

Arduino社區(qū)已經(jīng)為我們提供了很多庫(kù),可以直接用于使它變得更加簡(jiǎn)單。我嘗試了一些庫(kù),發(fā)現(xiàn)Adafruit_SSD1306庫(kù)非常易于使用,并且有一些圖形選項(xiàng),因此我們將在本教程中使用相同的選項(xiàng)。但是,如果您的項(xiàng)目有內(nèi)存/速度限制,請(qǐng)嘗試使用 U8g 庫(kù),因?yàn)樗\(yùn)行速度更快且占用的程序內(nèi)存更少。

所需材料:

ESP32

DS3231 RTC 模塊

7 針 128×64 OLED 顯示模塊 (SSD1306)

公母線

面包板

電路圖:

RTC3231與ESP板的連接電路圖如下:

poYBAGNx_ySAVG3HAADvSXELoZM515.png

RTC DS3231 IC采用I2C通信模式。它具有SCL,SDA,Vcc和GND引腳。RTC 模塊與 ESP32 的連接如下:

RTC 的標(biāo)準(zhǔn)與標(biāo)準(zhǔn)實(shí)驗(yàn)室 -> ESP32 的標(biāo)準(zhǔn)與標(biāo)準(zhǔn)實(shí)驗(yàn)室,即引腳 D22

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

RTC 的 GND -> ESP32 的 GND

RTC 的 Vcc -ESP32 的 > Vcc

在這里,我們使用SPI 模式將 128×64 OLED 顯示模塊 (SSD1306) 連接到 ESP32。因此,它將使用 7 個(gè)引腳。與 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 >

所以我們包含了所有的庫(kù)

#include // for OLED display

#include // for I2C with RTC module

#include

#include // for display graphics

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

然后定義OLED的所有引腳。您不需要為 RTC 模塊定義引腳,因?yàn)檫@些引腳已在 WIRE 庫(kù)中定義。

#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)用一個(gè)函數(shù)rtc.adjust(DateTime(__DATE__,__TIME__)),它將根據(jù)我們的PC時(shí)間設(shè)置時(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ù)中,我們將時(shí)間存儲(chǔ)在DateTime 現(xiàn)在預(yù)定義的變量中,并使用 setTextSize、setCursor 等顯示函數(shù)顯示時(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上顯示時(shí)間的方式,并且您知道 ESP 以其物聯(lián)網(wǎng)功能而聞名,因此您可以使用它在互聯(lián)網(wǎng)上發(fā)布時(shí)間。

#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();

}


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • OLED
    +關(guān)注

    關(guān)注

    119

    文章

    6207

    瀏覽量

    224391
  • 實(shí)時(shí)時(shí)鐘

    關(guān)注

    4

    文章

    246

    瀏覽量

    65834
  • RTC
    RTC
    +關(guān)注

    關(guān)注

    2

    文章

    541

    瀏覽量

    66709
  • ESP32
    +關(guān)注

    關(guān)注

    18

    文章

    971

    瀏覽量

    17361
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP32如何獲取系統(tǒng)時(shí)間?

    ESP8266里面可以通過(guò) esp_get_time()函數(shù) 獲取系統(tǒng)時(shí)間, ESP32
    發(fā)表于 02-17 07:45

    ESP32模組的主要特性

    WT-ESP32-DevKitC V4是一款基于ESP32的小型開發(fā)板,集WIFI+藍(lán)牙方案于一體,板模組絕大部分管腳均已引出,開發(fā)人員可根據(jù)實(shí)際需求,輕松通過(guò)跳線連接多種外圍器件,或?qū)㈤_發(fā)板直接
    發(fā)表于 11-04 14:54 ?4045次閱讀

    ESP322.4寸彩屏的應(yīng)用

    繼上次的ESP321.54寸彩屏的應(yīng)用外,還有哪些規(guī)格的彩屏同樣可以被ESP32驅(qū)動(dòng)呢?沒錯(cuò),2.4寸的彩屏同樣可以!下圖是2.4寸彩屏ESP3
    發(fā)表于 04-26 09:50 ?1915次閱讀

    淺析ZephyrESP32的啟動(dòng)流程

    理解Zephyr一款soc的啟動(dòng)流程,有利于分析和調(diào)試開機(jī)過(guò)程卡死,驅(qū)動(dòng)異常等的問(wèn)題。因此在上手一款新的soc時(shí)掌握Z(yǔ)ephyr在其上面的啟動(dòng)流程非常必要。本文對(duì)ZephyrESP32
    的頭像 發(fā)表于 06-07 17:04 ?5325次閱讀

    ESP32系列芯片的規(guī)格

    ESP32是一款2.4GHz Wi-Fi和藍(lán)牙組合芯片,采用TSMC超低功耗40nm設(shè)計(jì)技術(shù)它旨在實(shí)現(xiàn)最佳功率和射頻性能,顯示出魯棒性、多功能性和靈活性各種應(yīng)用和電源場(chǎng)景中的可靠性。ESP3
    發(fā)表于 04-25 16:21 ?7次下載

    使用ESP8266從NTP服務(wù)器獲取時(shí)間并在OLED顯示顯示

    本教程中,我們將使用 ESP8266 NodeMCU 從 NTP 服務(wù)器獲取當(dāng)前時(shí)間和日期,并將其顯示
    的頭像 發(fā)表于 09-01 16:09 ?1.9w次閱讀
    使用<b class='flag-5'>ESP</b>8266從NTP服務(wù)器獲取<b class='flag-5'>時(shí)間</b>并在<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>器<b class='flag-5'>上</b><b class='flag-5'>顯示</b>

    使用Visuino DIY如何在M5StickC ESP32顯示時(shí)間

    電子發(fā)燒友網(wǎng)站提供《使用Visuino DIY如何在M5StickC ESP32顯示時(shí)間.zip》資料免費(fèi)下載
    發(fā)表于 11-21 09:36 ?0次下載
    使用Visuino DIY如何在M5StickC <b class='flag-5'>ESP32</b><b class='flag-5'>上</b><b class='flag-5'>顯示</b><b class='flag-5'>時(shí)間</b>

    帶有ESP32OLED顯示屏的Instagram追隨者計(jì)數(shù)器

    電子發(fā)燒友網(wǎng)站提供《帶有ESP32OLED顯示屏的Instagram追隨者計(jì)數(shù)器.zip》資料免費(fèi)下載
    發(fā)表于 12-14 09:55 ?0次下載
    帶有<b class='flag-5'>ESP32</b>和<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>屏的Instagram追隨者計(jì)數(shù)器

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

    電子發(fā)燒友網(wǎng)站提供《帶GPS和OLED顯示屏的ESP32開發(fā)板.zip》資料免費(fèi)下載
    發(fā)表于 12-28 09:43 ?2次下載
    帶GPS和<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>屏的<b class='flag-5'>ESP32</b>開發(fā)板

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

    電子發(fā)燒友網(wǎng)站提供《帶OLED顯示屏的LoRa節(jié)點(diǎn)和3個(gè)帶ESP32的繼電器.zip》資料免費(fèi)下載
    發(fā)表于 12-29 14:03 ?0次下載
    帶<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>屏的LoRa節(jié)點(diǎn)和3個(gè)帶<b class='flag-5'>ESP32</b>的繼電器

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

    任何給定城市的API請(qǐng)求天氣數(shù)據(jù),并將其發(fā)送到Arduino LoRa設(shè)置。然后Arduino LoRa將接收數(shù)據(jù)并將其顯示LCD顯示。因此E
    的頭像 發(fā)表于 01-21 11:30 ?3691次閱讀
    LoRa模塊SX1278與<b class='flag-5'>ESP32</b>結(jié)合使用的方法-<b class='flag-5'>上</b>

    ESP8266或ESP32的WiFi Webradio

    電子發(fā)燒友網(wǎng)站提供《ESP8266或ESP32的WiFi Webradio.zip》資料免費(fèi)下載
    發(fā)表于 06-13 11:38 ?1次下載
    <b class='flag-5'>ESP</b>8266或<b class='flag-5'>ESP32</b><b class='flag-5'>上</b>的WiFi Webradio

    如何使用VisuinoM5StickC ESP32顯示文本

    電子發(fā)燒友網(wǎng)站提供《如何使用VisuinoM5StickC ESP32顯示文本.zip》資料免費(fèi)下載
    發(fā)表于 06-16 15:22 ?0次下載
    如何使用Visuino<b class='flag-5'>在</b>M5StickC <b class='flag-5'>ESP32</b><b class='flag-5'>上</b><b class='flag-5'>顯示</b>文本

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

    電子發(fā)燒友網(wǎng)站提供《MATRIX Voice ESP32開始使用藍(lán)牙.zip》資料免費(fèi)下載
    發(fā)表于 06-20 15:30 ?1次下載
    <b class='flag-5'>在</b>MATRIX Voice <b class='flag-5'>ESP32</b><b class='flag-5'>上</b>開始使用藍(lán)牙

    ESP Wemos D1 OLED顯示CPU時(shí)間

    電子發(fā)燒友網(wǎng)站提供《ESP Wemos D1 OLED顯示CPU時(shí)間.zip》資料免費(fèi)下載
    發(fā)表于 06-29 14:39 ?0次下載
    <b class='flag-5'>在</b><b class='flag-5'>ESP</b> Wemos D1 <b class='flag-5'>OLED</b><b class='flag-5'>上</b><b class='flag-5'>顯示</b>CPU<b class='flag-5'>時(shí)間</b>