Dalam tutorial ini, kita akan belajar mengenai Real Time Clock (RTC) dan hubungannya dengan paparan ESP32 dan OLED.
Kami akan menggunakan modul RTC DS3231 untuk mengesan masa yang betul dan memaparkannya di SPI OLED dengan menggunakan ESP32 sebagai mikrokontroler kami. ESP32 lebih daripada pengawal mikro. Ia mempunyai cip Wi-Fi dan Bluetooth di dalamnya dan 39 pin GPIO. Ia menyokong semua protokol komunikasi seperti SPI, I2C, UART, dan lain-lain. Sekiranya anda baru menggunakan ESP32, mulailah terlebih dahulu melalui tutorial Bermula dengan ESP32 kami.
Apa itu RTC ??
DS3231 adalah modul RTC (Real Time Clock). Ia digunakan untuk mengekalkan tarikh dan masa untuk kebanyakan projek Elektronik. Modul ini mempunyai bekalan kuasa sel duit syiling sendiri yang menggunakannya mengekalkan tarikh dan masa walaupun kuasa utama dikeluarkan atau MCU telah melalui tetapan semula keras. Oleh itu, setelah kita menetapkan tarikh dan masa dalam modul ini, ia akan sentiasa melacaknya. Terdapat beberapa jenis IC RTC yang tersedia seperti DS1307, DS3231 dll.
Kami sebelum ini menggunakan DS3231 RTC dengan Arduino dalam projek di bawah:
- Feeder Pet Automatik menggunakan Arduino
- Pencatat Data Arduino
Catatan: Semasa menggunakan modul ini untuk pertama kalinya anda mesti menetapkan tarikh dan waktu. Anda juga dapat menggunakan RTC IC DS1307, sebelumnya kami telah menggunakan DS1307 dengan Arduino.
Mengetahui tentang Paparan OLED:
Istilah OLED adalah singkatan dari " Organic Light emitting diode" yang menggunakan teknologi yang sama dengan yang digunakan di kebanyakan televisyen kita tetapi mempunyai piksel yang lebih sedikit dibandingkan dengan mereka. Sangat menyeronokkan apabila mempunyai modul paparan yang kelihatan keren ini kerana ia akan menjadikan projek kita kelihatan keren. Kami telah membahas Artikel lengkap mengenai paparan OLED dan jenisnya di sini.
Kami menggunakan paparan OLED Monochrome 7-pin SSD1306 0.96 ”. Sebab untuk memilih paparan ini adalah kerana ia boleh berfungsi pada tiga Protokol komunikasi yang berbeza seperti mod Wire SPI, mod empat wayar SPI dan mod IIC. Tutorial ini akan merangkumi cara menggunakan modul dalam mod 4-wayar SPI kerana ia adalah mod komunikasi terpantas dan yang lalai.
Pin dan fungsinya dijelaskan dalam jadual di bawah.
Nombor PIN |
Nama Pin |
Nama lain |
Penggunaan |
1 |
Gnd |
Tanah |
Pin bawah modul |
2 |
Vdd |
Vcc, 5V |
Pin kuasa (boleh tahan 3-5V) |
3 |
SCK |
D0, SCL, CLK |
Bertindak sebagai pin jam. Digunakan untuk I2C dan SPI |
4 |
SDA |
D1, MOSI |
Pin data modul. Digunakan untuk IIC dan SPI |
5 |
RES |
RST, RESET |
Tetapkan semula modul (berguna semasa SPI) |
6 |
DC |
A0 |
Pin Perintah Data. Digunakan untuk protokol SPI |
7 |
CS |
Pilih Cip |
Berguna apabila lebih daripada satu modul digunakan di bawah protokol SPI |
Dalam tutorial ini kita hanya akan mengendalikan modul dalam mod 4-Wire SPI, kita akan meninggalkan yang lain untuk beberapa tutorial lain.
Komuniti Arduino telah memberi kami banyak Perpustakaan yang boleh digunakan secara langsung untuk menjadikannya lebih mudah. Saya mencuba beberapa perpustakaan dan mendapati bahawa Perpustakaan Adafruit_SSD1306 sangat mudah digunakan dan mempunyai sebilangan besar pilihan grafik sehingga kami akan menggunakan yang sama dalam tutorial ini. Tetapi, jika projek anda mempunyai kekangan memori / kelajuan, cuba gunakan Perpustakaan U8g kerana ia berfungsi lebih pantas dan kurang mengambil memori program.
Kami juga telah menghubungkan OLED dengan Raspberry pi dan Arduino.
Bahan yang Diperlukan:
- ESP32
- Modul RTC DS3231
- Modul paparan OLED 7 pin 128 × 64 (SSD1306)
- Wayar lelaki-perempuan
- Papan roti
Rajah Litar:
Gambarajah litar untuk menyambungkan RTC3231 ke papan ESP diberikan di bawah:
RTC DS3231 IC menggunakan mod komunikasi I2C. Ia mempunyai pin SCL, SDA, Vcc dan GND yang keluar dari dalamnya. Sambungan modul RTC dengan ESP32 diberikan di bawah:
- SCL of RTC -> SCL ESP32 iaitu Pin D22
- SDA RTC -> SDA ESP32 iaitu Pin D21
- GND RTC -> GND ESP32
- Vcc RTC -> Vcc ESP32
Di sini, kami menggunakan mod SPI untuk menghubungkan Modul paparan OLED 128 × 64 kami (SSD1306) ke ESP32. Jadi, ia akan menggunakan 7 pin. Sambungan dengan ESP32 diberikan sebagai:
- CS (pilih cip) OLED -> PIN D5 dari ESP32
- Pin DC OLED -> PIN D4 dari ESP32
- RES pin OLED -> PIN D2 dari ESP32
- Pin SDA OLED -> PIN D23 iaitu MOSI ESP32
- Pin SCK OLED -> PIN D18 iaitu SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Anda memerlukan fail papan untuk ESP32 anda. Daftar masuk menu pengurus lembaga pengarah Arduino IDE untuk kit dev ESP32. Sekiranya tidak ada, ikuti langkah-langkah yang diberikan dalam pautan di bawah:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Anda juga boleh menggunakan ESP12 untuk projek ini, belajar di sini untuk menggunakan ESP12.
Penjelasan Kod:
Kod lengkap untuk ESP32 diberikan pada akhir artikel. Di sini kami menerangkan beberapa bahagian penting kod.
Kami memerlukan beberapa perpustakaan untuk digunakan dalam kod kami yang boleh dimuat turun dari pautan di bawah:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Oleh itu, kami telah memasukkan semua perpustakaan
#sertakan
Kemudian tentukan semua pin OLED. Anda tidak perlu menentukan pin untuk modul RTC kerana pin ini sudah ditentukan di perpustakaan WIRE.
#definisi OLED_MOSI 23 #tentukan OLED_CLK 18 #tentukan OLED_DC 4 #tentukan OLED_CS 5 #tentukan OLED_RESET 2 Paparan Adafruit_SSD1306 (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Dalam fungsi persediaan , kita akan memanggil fungsi rtc.adjust (DateTime (__ DATE__, __TIME__)) yang akan menetapkan waktu mengikut waktu PC kita.
persediaan tidak sah () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Tidak dapat menemui RTC"); sementara (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Selepas itu kami memanggil fungsi paparan untuk ditunjukkan di OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (PUTIH); //display.startscrollright(0x00, 0x0F); // Anda boleh melepaskan baris ini untuk menatal teks anda di oled display.setTextSize (2); display.setCursor (0,5); display.print ("Jam"); // Ini akan Memaparkan Jam di OLED selama 3 saat paparan.display (); kelewatan (3000); }
Kemudian akhirnya dalam fungsi gelung , kita akan menyimpan masa kita di DateTime sekarang pemboleh ubah yang telah ditentukan dan memaparkan waktu menggunakan fungsi paparan seperti setTextSize, setCursor, dll. Tetapkan ini mengikut keperluan anda dan gunakan fungsi display.println untuk ditunjukkan di OLED.
gelung kosong () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (sekarang.second (), DEC);
Jadi ini adalah bagaimana anda dapat memaparkan waktu di OLED menggunakan ESP32 dan seperti yang anda tahu ESP terkenal dengan kemampuan IoTnya, jadi anda boleh menggunakannya untuk menerbitkan waktu di internet. Dalam artikel seterusnya kami akan menunjukkan kepada anda untuk memaparkan Waktu Internet di ESP tanpa menggunakan Modul RTC.