Bu eğitimde, Gerçek Zamanlı Saat (RTC) ve bunun ESP32 ve OLED ekranla arayüzünü öğreneceğiz.
Biz kullanacağız DS3231 RTC modülü mikroişlemcinin olarak ESP32 kullanarak SPI OLED'de onu doğru zamanda takip ve görüntülemek için. ESP32 bir mikro denetleyiciden daha fazlasıdır. İçinde Wi-Fi ve Bluetooth çipi ve 39 GPIO pini var. SPI, I2C, UART, vb. Gibi tüm iletişim protokollerini destekler. ESP32'de yeniyseniz, önce ESP32 ile Başlarken eğitimimizi inceleyin.
RTC nedir?
DS3231, bir RTC (Gerçek Zamanlı Saat) modülüdür. Elektronik projelerinin çoğu için tarih ve saati korumak için kullanılır. Bu modül, ana güç kesildiğinde veya MCU donanımdan sıfırlamadan geçtiğinde bile tarih ve saati koruyan kendi madeni para hücreli güç kaynağına sahiptir. Bu modülde tarih ve saati bir kez belirlediğimizde, her zaman takip edecektir. DS1307, DS3231 vb. Gibi çeşitli RTC IC türleri mevcuttur.
Daha önce DS3231 RTC'yi Arduino ile aşağıdaki projelerde kullandık:
- Arduino kullanarak Otomatik Evcil Hayvan Besleyici
- Arduino Veri Kaydedici
Not: Bu modülü ilk kez kullanırken tarih ve saati ayarlamanız gerekir. Ayrıca RTC IC DS1307'yi de kullanabilirsiniz, daha önce DS1307'yi Arduino ile kullandık.
OLED Ekranları tanımak:
OLED terimi " Organik Işık yayan diyot" anlamına gelir ve televizyonlarımızın çoğunda kullanılanla aynı teknolojiyi kullanır, ancak bunlara kıyasla daha az piksel içerir. Projelerimizi havalı göstereceği için bu havalı görünen ekran modüllerine sahip olmak gerçekten eğlenceli. Burada OLED ekranlar ve türleri hakkında tam bir Makaleyi ele aldık.
Biz kullanan tek renkli 7-pin SSD1306 0.96” OLED ekran. Bu ekranı seçmenin nedeni, SPI 3 Tel modu, SPI dört tel modu ve IIC modu gibi üç farklı iletişim Protokolü üzerinde çalışabilmesidir. Bu eğitim, en hızlı iletişim modu ve varsayılan mod olduğu için SPI 4 telli modda modülün nasıl kullanılacağını kapsayacaktır.
Pimler ve işlevleri aşağıdaki tabloda açıklanmıştır.
PIN numarası |
Pin Adı |
Diğer isimler |
Kullanım |
1 |
Gnd |
Zemin |
Modülün topraklama pimi |
2 |
Vdd |
Vcc, 5V |
Güç pimi (3-5V tolere edilebilir) |
3 |
SCK |
D0, SCL, CLK |
Saat pimi görevi görür. Hem I2C hem de SPI için kullanılır |
4 |
SDA |
D1, MOSI |
Modülün veri pini. Hem IIC hem de SPI için kullanılır |
5 |
RES |
RST, RESET |
Modülü sıfırlar (SPI sırasında kullanışlıdır) |
6 |
DC |
A0 |
Veri Komutu pimi. SPI protokolü için kullanılır |
7 |
CS |
Çip Seçimi |
SPI protokolü altında birden fazla modül kullanıldığında kullanışlıdır |
Bu eğitimde, modülü 4-Wire SPI modunda çalıştıracağız, gerisini başka bir eğitim için bırakacağız.
Arduino topluluğu bize zaten bunu çok daha basit hale getirmek için doğrudan kullanılabilecek birçok Kitaplık verdi. Birkaç kitaplık denedim ve Adafruit_SSD1306 Kitaplığının kullanımının çok kolay olduğunu ve bir avuç grafik seçeneğe sahip olduğunu buldum, bu nedenle bu eğitimde de aynısını kullanacağız. Ancak, projenizde bellek / hız kısıtlaması varsa, daha hızlı çalıştığı ve daha az program belleği kapladığı için U8g Kitaplığını kullanmayı deneyin.
Ayrıca OLED'i Raspberry pi ve Arduino ile arayüzledik.
Gerekli Materyal:
- ESP32
- DS3231 RTC modülü
- 7 pin 128 × 64 OLED ekran Modülü (SSD1306)
- Erkek-dişi teller
- Breadboard
Devre şeması:
RTC3231'i ESP kartına bağlamak için devre şeması aşağıda verilmiştir:
RTC DS3231 IC, I2C iletişim modunu kullanır. Dışarı çıkan SCL, SDA, Vcc ve GND pinlerine sahiptir. Bağlantı ESP32 ile RTC modülü aşağıda verilmiştir:
- RTC'nin SCL'si -> ESP32'nin SCL'si, yani Pin D22
- RTC'nin SDA'sı -> ESP32'nin SDA'sı yani Pin D21
- RTC'nin GND'si -> ESP32'nin GND'si
- RTC'nin Vcc'si -> ESP32'nin Vcc'si
Burada 128 × 64 OLED ekran Modülümüzü (SSD1306) ESP32'ye bağlamak için SPI modunu kullanıyoruz. Yani 7 pin kullanacaktır. ESP32 ile bağlantılar şu şekilde verilir:
- OLED'in CS (Çip seçme) pini -> ESP32'nin PIN D5'i
- OLED'in DC pini -> ESP32'nin PIN D4'ü
- OLED'in RES pini -> ESP32'nin PIN D2'si
- OLED'in SDA pini -> PIN D23 yani ESP32'nin MOSI'si
- OLED'in SCK pini -> PIN D18 yani ESP32'nin SCK'si
- OLED'in Vdd'si -> ESP32'nin Vcc'si
- OLED'in GND'si -> ESP32'nin GND'si
ESP32'niz için pano dosyalarına ihtiyacınız var. ESP32 geliştirme kiti için Arduino IDE'nin kart yöneticisi açılır menüsünü kontrol edin. Orada yoksa, aşağıdaki bağlantıda verilen adımları izleyin:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Bu proje için ESP12'yi de kullanabilirsiniz, buradan ESP12'yi kullanmayı öğrenin.
Kod Açıklaması:
ESP32 için tam kod makalenin sonunda verilmiştir. Burada kodun birkaç önemli parçasını açıklıyoruz.
Kodumuzda kullanmak için aşağıdaki bağlantılardan indirilebilecek birkaç kitaplığa ihtiyacımız var:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Bu yüzden tüm kütüphaneleri dahil ettik
#Dahil etmek
Ardından OLED'in tüm pinlerini tanımlayın. RTC modülü için pin tanımlamanıza gerek yoktur çünkü bu pinler WIRE kütüphanesinde zaten tanımlanmıştır.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2 Adafruit_SSD1306 ekran (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
In kurulum fonksiyonu, bir fonksiyon çağıracak rtc.adjust (DateTime (__ DATE__, __TIME__ veri)) bizim PC saatine göre zaman koyacaktır.
geçersiz kurulum () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("RTC bulunamadı"); while (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Bundan sonra OLED'de gösterilecek görüntüleme işlevlerini çağırıyoruz.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (BEYAZ); //display.startscrollright(0x00, 0x0F); // Metninizi oled display.setTextSize (2) üzerinde kaydırmak için bu satırı açabilirsiniz ; display.setCursor (0,5); display.print ("Saat"); // Bu, 3 saniye boyunca OLED'de Saati Gösterecektir display.display (); gecikme (3000); }
Son olarak döngü fonksiyonunda, zamanımızı DateTime değişkeninde saklayacağız ve setTextSize, setCursor, vb. Gibi görüntüleme fonksiyonlarını kullanarak zamanı görüntüleyeceğiz. Bunları ihtiyacınıza göre ayarlayın ve OLED'de göstermek için display.println fonksiyonunu kullanın.
void döngü () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (şimdi.second (), DEC);
ESP32'yi kullanarak OLED'de zamanı bu şekilde görüntüleyebilirsiniz ve bildiğiniz gibi ESP, IoT yetenekleriyle tanınır, böylece zamanı internette yayınlamak için bunu kullanabilirsiniz. Bir sonraki makalede, herhangi bir RTC Modülü kullanmadan ESP'de İnternet Saatini görüntülemenizi göstereceğiz.