DS3231 Gerçek Zamanlı Saat (RTC) Modülünü ESP32 ile Kullanma

Ds3231 Gercek Zamanli Saat Rtc Modulunu Esp32 Ile Kullanma



ESP32, yerleşik Wi-Fi ve Bluetooth özelliklerine sahip akıllı bir mikro denetleyici kartıdır. ESP32 dahili bir RTC ile birlikte gelir ancak çalışması güce bağlıdır. Yani enerji olmadığında bile çalıştırmak istediğiniz proje veya devreleri tasarlamak istiyorsanız DS1307 veya DS3231 gibi herhangi bir harici RTC modülünü kullanmanız gerekir.

Zaten bununla ilgili bir eğitim yapmıştık DS1307, ESP32 modülüyle arayüz oluşturuyor . Bugün DS3231 RTC sensörünün temellerini tartışacağız ve ESP32 kartıyla nasıl arayüz oluşturulabileceğini kontrol edeceğiz.

İçindekiler:







1. DS3231 RTC Modülü Nedir?



2. DS3231'in ESP32 ile Arayüzlenmesi



3. Donanım





4. Kod

5. Çıkış



6. ESP32 Kullanarak OLED Ekranda RTC DS3231 Saatini Görüntüleme

Çözüm

1. DS3231 RTC Modülü Nedir?

DS3231 modülü son derece doğru zaman işleyişi sağlar. Bize büyük bir hassasiyetle zaman kazandıran entegre bir sıcaklık dengelemeli kristal osilatör (TCXO) içerir. Modül, Master-Slave konfigürasyonunu kullanarak I2C protokolü üzerinde çalışır. Ana giriş gücü olmadığında bile yedek pil ile saat ve tarihi tutabilir. Genellikle zamana ve tarihe bağlı cihazlarda kullanılır.

DS3231 saniyeleri, dakikaları ve saatleri takip eder. Ayrıca tarihlerin ve hafta içi günlerin kaydını da tutabilir. Artık yıllarla uğraşırken zamanı buna göre otomatik olarak ayarlar. Ayrıca, AM/PM göstergesiyle birlikte saati hem 12 saatlik hem de 24 saatlik formatta görüntüleyebilir.

1.1. DS3231 ve DS1307

Hem DS3231 hem de DS1307, pil yedekleme desteğine sahip zaman tutma modülleridir. Ancak DS3231, DS1307'den daha doğrudur. Bunun temel nedeni, DS1307'nin zaman işleyişi için harici 32kHz kristale bağlı olmasıdır.

Ancak RTC DS3231, dahili bir Sıcaklık Dengelemeli Kristal Osilatöre (TCXO) sahiptir. Bu, dış sıcaklıktan daha az etkilenmesini sağlar ve bunun sonucunda DS1307'ye göre yılda birkaç dakika doğruluk avantajına sahiptir.

1.2. DS3231 Pin Çıkışı

DS3231, I2C protokolünü kullanarak çalışır. Bu RTC modülünün kalbinde Maxim tarafından tasarlanan doğru RTC çipi bulunmaktadır. Bu çip tüm zaman işlevlerini yerine getirir ve I2C'yi kullanarak ESP32 veya Arduino kartıyla iletişim kurar.

RTC DS3231 modüllerinin ana pinleri şunlardır:

  • VCC: Bu pimi güç kaynağınızın pozitif terminaline bağlayın.
  • TOPRAK: Topraklama.
  • SDA: Seri Veri pini (I2C iletişimi için kullanılır).
  • SCL: Seri Saat pini (aynı zamanda I2C arayüzünün bir parçası).
  • Soru: Kare Dalga çıkış pimi (örneğin alarmlar veya diğer zamanlama amaçları için periyodik bir sinyal üretebilir).
  • 32K: 32KHz osilatör çıkışı (hassas zamanlama uygulamaları için kullanışlıdır).

Aşağıdakiler RTC DS3231 modülünün ana yerleşik bileşenleridir:

  • Batarya tutucu: Harici güç olmadığında modülün çalışmaya devam etmesini sağlar.
  • RTC Çipi: Bu çip saati ve tarihi koruyor.
  • AT24C32 EEPROM'u: 1.000.000 yazma döngüsüyle veri kaydı ve diğer amaçlar için kalıcı depolama sağlar.
  • - TCXO: Değişen sıcaklık aralıkları için doğru zamanı sağlamak üzere sıcaklık dengelemeli osilatör.
  • Sıcaklık sensörü: Sıcaklık okumalarını alır ve bunları modülün özelliğinin bir parçası olarak sağlar.

2. DS3231 ile ESP32 Arayüzü Nasıl Kurulur?

DS3231 ile ESP32 arasında arayüz oluşturmak için aşağıdakileri yüklemeniz gerekir: RTClib kütüphanesi Birinci. Adafruit RTC kütüphanesini kurduktan sonra ESP32 kartınızı I2C protokolünü kullanarak DS3231'e bağlayabilirsiniz. ESP32 I2C'yi RTC DS3231 modülüne bağlamak için ESP32 D21 ve D22 pinlerini kullanabilirsiniz.

2.1. ESP32'nin RTC DS3231 ile Bağlantı Şeması

Öncelikle ESP32'yi I2C RTC DS3231 modülünüze bağlamanız gerekir. Kablolama için aşağıda verilen pin konfigürasyonunu izleyin:

ESP32'yi RTC DS3231'e bağladıktan sonra bağlantı şemanız aşağıdaki gibi görünmelidir. Ayrıca DS3231'e ESP32'nin VIN pininden de güç verebilirsiniz. DS3231'in çalışma voltajları 3,3 ila 5,5 VDC'dir.

2.2. Gerekli Kütüphanelerin Kurulumu

Devre hazır olduktan sonra bir sonraki adım ESP32 kartınızı Arduino IDE ile yapılandırın . DS3231 ile arayüz oluşturmak için aşağıdakileri yüklemeniz gerekecektir: RTClib kütüphanesi . Arduino IDE kütüphane yöneticisini kullanarak kurabilirsiniz.

3. Donanım

DS3231 tabanlı RTC saatini ESP32 ile tasarlamak için aşağıdaki donanıma ihtiyacınız olacaktır:

  • ESP32 geliştirme kurulu
  • RTC DS3231 modülü
  • CR2032 pil
  • Jumper kabloları
  • Ekmek Tahtası

4. Kod

RTC kütüphanesini kurduktan sonra sıra DS3231 kodunu yazıp ESP32 kartına yüklemektir. Öncelikle mevcut saatinizi ayarlamak için kodu yazmanız gerekir. DS3231'de saati ayarladıktan sonra, ESP32 kartınız kapatılsa bile saati hatırlayacak ve çalışmaya devam edecektir.

Şimdi Arduino IDE'yi açın, derleyin ve kodu ESP32 kartına yazın.

#include
#include

RTC_DS3231 rtc ; // RTC_DS3231 sınıfının bir örneğini başlatıyoruz

geçersiz kurmak ( ) {
Seri. başlamak ( 115200 ) ;
Tel. başlamak ( ) ;

eğer ( ! rtc. başlamak ( ) ) {
Seri. baskı ( 'RTC algılanmadı' ) ;
sırasında ( 1 ) ; // RTC bulunamazsa süresiz olarak askıda kal
}

//Başlangıç ​​tarihini ve saatini ayarlamak için aşağıdaki satırın açıklamasını kaldırın
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

geçersiz döngü ( ) {
// Sensörden güncel saati oku (DS3231)
TarihSaat şimdi = rtc. Şimdi ( ) ;

// Tarih ve saati aynı satıra saat, dakika ve saniye olarak iki rakamla yazdırıyoruz
Seri. Yazdır ( 'Geçerli tarih: ' ) ;
Seri. Yazdır ( Şimdi. yıl ( ) , Aralık ) ;
Seri. Yazdır ( '/' ) ;
İki Haneli Yazdır ( Şimdi. ay ( ) ) ;
Seri. Yazdır ( '/' ) ;
İki Haneli Yazdır ( Şimdi. gün ( ) ) ;
Seri. Yazdır ( ' Şimdiki zaman: ' ) ;
İki Haneli Yazdır ( Şimdi. saat ( ) ) ;
Seri. Yazdır ( ':' ) ;
İki Haneli Yazdır ( Şimdi. dakika ( ) ) ;
Seri. Yazdır ( ':' ) ;
İki Haneli Yazdır ( Şimdi. ikinci ( ) ) ;
Seri. baskı ( ) ;

gecikme ( 1000 ) ; // Her 1 saniyede bir güncelle
}

geçersiz İki Haneli Yazdır ( int sayı ) {
eğer ( sayı < 10 ) {
Seri. Yazdır ( '0' ) ; // Tek basamaklı sayıların başına sıfır ekleyin
}
Seri. Yazdır ( sayı ) ;
}

4.1. Kod Açıklaması

Kod, bir wire kütüphanesi yardımıyla seri I2C iletişimini başlatarak başlar. Daha sonra DS3231 modülü ile arayüz oluşturmak için Adafruit'in RTC kütüphanesini dahil ettik. Bu kitaplık, RTC DS3231 modülüyle etkileşime girecek bir işlev sağlar.

İçinde kurmak bölümünde I2C veri yolu başlatılır ve mevcut I2C cihazları için kontrol edilir. Bulunamazsa program süresiz olarak kilitlenir. Baud hızı da tanımlanmıştır, böylece Arduino IDE seri monitöründeki çıkışı kontrol edebilirsiniz.

Saatin İlk Kez Ayarlanması

DS3231'i programlarken şunları yapmanız gerekir: bu satırın yorumunu kaldır . Bu, sistem zamanınızı alacak ve RTC belleğinde saklayacaktır. Bunu yaparak, RTC modülü saati sistem saatiniz ile senkronize edilir.

//rtc.adjust(DateTime(__DATE__, __TIME__));

Süre ayarlandıktan sonra yukarıdaki kodu yeniden yüklemeniz gerekir ancak bu sefer rtc.adjust() işlev satırını yorumlayın . Aksi takdirde bu, daha önce ayarladığınız zamanın üzerine yazacaktır ve ESP32'niz kapatıldığında, kodu yüklediğiniz andan itibaren RTC yeniden başlayacaktır.

Bunu yaparak, RTC modülü CR2032 hücresinde güç olduğu sürece zamanınız RTC modülü arka planında mevcut kalacaktır.

İçinde döngü bölümünde, geçerli tarih ve saat, rtc.now() işlevi kullanılarak DS3231 modülünden okunur. Tarih ve saat bileşenleri çıkarılır ve formatlanan tarih her saniyede bir Arduino IDE seri monitörüne yazdırılır.

5. Çıkış

Kodu ESP32 kartına yükledikten sonra Arduino IDE seri monitöründe saatin yazdırılmaya başlayacağını göreceksiniz.

6. ESP32 Kullanılarak OLED Ekranda RTC DS3231 Saati Nasıl Görüntülenir?

Ayrıca bir adım daha ileri giderek DS3231'den okuyarak saati OLED ekranınızda görüntüleyebilirsiniz. Bunun için yüklemeniz gerekir Adafruit GFX SSD1306 kütüphanesi Arduino IDE'de.

Kurulduktan sonra ESP32'yi OLED ve RTC modülüne aşağıdaki konfigürasyonda bağlayın.

Sensörünüzü bağladıktan sonra devrenin aşağıdaki şematik diyagramdaki gibi göründüğünü göreceksiniz.

Şimdi aşağıdaki DS3231 kodunu ESP32 kartına yükleyin.

#include
#include
#include
#include 'RTClib.h'

RTC_DS3231 rtc ;

karakter günler [ 7 ] [ 12 ] = { 'Pazar' , 'Pazartesi' , 'Salı' , 'Çarşamba' , 'Perşembe' , 'Cuma' , 'Cumartesi' } ;

Adafruit_SSD1306 ekranı = Adafruit_SSD1306 ( 128 , 64 , & Tel , - 1 ) ;

geçersiz kurmak ( ) {
Seri. başlamak ( 115200 ) ;

görüntülemek. başlamak ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

eğer ( ! rtc. başlamak ( ) ) {
Seri. baskı ( 'RTC bulunamadı! Devreyi kontrol edin.' ) ;
sırasında ( 1 ) ;
}
//zamanı ilk kez ayarlarken aşağıdaki satırın yorumunu kaldırın
//rtc.adjust(DateTime(__DATE__, __TIME__));
görüntülemek. ekranı temizle ( ) ;
görüntülemek. setMetinRengi ( BEYAZ ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 0 , yirmi ) ;
görüntülemek. Yazdır ( 'RTC SAAT' ) ;
görüntülemek. görüntülemek ( ) ;
gecikme ( 5000 ) ;
}

geçersiz döngü ( ) {
TarihSaat şimdi = rtc. Şimdi ( ) ;

görüntülemek. ekranı temizle ( ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 75 , 0 ) ;
görüntülemek. baskı ( Şimdi. ikinci ( ) , Aralık ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 25 , 0 ) ;
görüntülemek. baskı ( ':' ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 65 , 0 ) ;
görüntülemek. baskı ( ':' ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 40 , 0 ) ;
görüntülemek. baskı ( Şimdi. dakika ( ) , Aralık ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 0 , 0 ) ;
görüntülemek. baskı ( Şimdi. saat ( ) , Aralık ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 0 , 25 ) ;
görüntülemek. baskı ( Şimdi. gün ( ) , Aralık ) ;
görüntülemek. Yazdır ( günler [ Şimdi. haftanın günü ( ) ] ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( yirmi , 25 ) ;
görüntülemek. baskı ( '-' ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 35 , 25 ) ;
görüntülemek. baskı ( Şimdi. ay ( ) , Aralık ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 60 , 25 ) ;
görüntülemek. baskı ( '-' ) ;
görüntülemek. setTextSize ( 2 ) ;
görüntülemek. setİmleç ( 75 , 25 ) ;
görüntülemek. baskı ( Şimdi. yıl ( ) , Aralık ) ;
görüntülemek. görüntülemek ( ) ;
}

Kod Açıklaması

Kod, RTC ve OLED ekranlar için gerekli olan bazı önemli kütüphanelerle başladı. OLED ekran Adafruit SSD1306 kütüphanesi kullanılarak ayarlanmıştır.

Döngü kısmında geçerli tarih ve saat, rtc.now() kullanılarak elde edilir. Bundan sonra OLED ekranı temizlenir ve zaman bileşenleri dijital saat formatında görüntülenir. Tarih ve saat biçimini ayarlamak için kodu da değiştirebilirsiniz.

Kod panonuza yüklendikten sonra, güncel saati OLED ekranında göreceksiniz.

Not: Yukarıdaki kod şunu kullanır: 0x3C OLED için I2C adresi. Bu, SSD1306 OLED ekranlarda bulunan en yaygın I2C adresidir. OLED ekranınızın I2C adresini bulmak istiyorsanız aşağıdaki komutu çalıştırabilirsiniz. I2C Tarayıcı kodu .

Çözüm

DS3231, zaman işleyişi için kullanılabilecek bir RTC sensörüdür. Mikrodenetleyici kartınız kapalı olsa bile zamanı doğru tutabilen bir pil yedeğine sahiptir. ESP2'yi DS3231 ile arayüzlemek için Arduino IDE'nize RTClib kütüphanesini kurmanız gerekir. Bundan sonra RTC modülünü ESP32'nin dijital pinini kullanarak I2C protokolü üzerinden bağlamanız gerekir. Bağlandıktan sonra kodu yükleyin ve saati ayarlayın. Artık RTC sensörü zamanı tutacak ve tasarım zamanına dayalı projelerde bunu seri monitörünüzde okuyabilirsiniz.