- Що таке RTC ??
- Ознайомлення з OLED-дисплеями:
- Необхідний матеріал:
- Кругова діаграма:
- Пояснення коду:
У цьому підручнику ми дізнаємося про годинник реального часу (RTC) та його взаємодію з дисплеєм ESP32 та OLED.
Ми будемо використовувати модуль RTC DS3231 для відстеження правильного часу та відображення його на SPI OLED, використовуючи ESP32 як наш мікроконтролер. ESP32 - це більше, ніж мікроконтролер. У ньому є мікросхема Wi-Fi та Bluetooth, а також 39 штифтів GPIO. Він підтримує всі комунікаційні протоколи, такі як SPI, I2C, UART тощо. Якщо ви новачок у ESP32, спершу перейдіть до нашого Посібника з початку роботи з ESP32.
Що таке RTC ??
DS3231 - це модуль RTC (Годинник реального часу). Він використовується для збереження дати та часу для більшості проектів з електроніки. Цей модуль має власний блок живлення для монетних клітин, за допомогою якого він підтримує дату та час, навіть коли основне живлення відключено або MCU пройшов жорсткий скидання. Отже, як тільки ми встановимо дату та час у цьому модулі, він буде відстежувати їх завжди. Існує кілька типів мікросхем RTC, таких як DS1307, DS3231 тощо.
Раніше ми використовували DS3231 RTC з Arduino в наступних проектах:
- Автоматична годівниця для домашніх тварин за допомогою Arduino
- Реєстратор даних Arduino
Примітка: Під час першого використання цього модуля вам потрібно встановити дату та час. Ви також можете використовувати RTC IC DS1307, ми вже використовували DS1307 з Arduino.
Ознайомлення з OLED-дисплеями:
Термін OLED означає « органічний світлодіод», він використовує ту саму технологію, яка використовується в більшості наших телевізорів, але має менше пікселів порівняно з ними. Це дуже цікаво мати ці дивовижно виглядаючі модулі дисплея, оскільки це дозволить нашим проектам виглядати круто. Тут ми розглянули повну статтю про OLED-дисплеї та їх типи.
Ми використовуємо монохромний 7-контактний OLED-дисплей SSD1306 0,96 ”. Причиною вибору цього дисплея є те, що він може працювати на трьох різних протоколах зв'язку, таких як режим SPI 3 Wire, режим SPI чотири дроти та режим IIC. У цьому посібнику буде розказано про те, як використовувати модуль у 4-провідному режимі SPI, оскільки це найшвидший режим зв'язку та стандартний.
Шпильки та її функції пояснюються в таблиці нижче.
Номер PIN-коду |
Ім'я PIN-коду |
Інші імена |
Використання |
1 |
Gnd |
Земля |
Штифт заземлення модуля |
2 |
Vdd |
Vcc, 5 В. |
Штифт живлення (3-5 В допустимий) |
3 |
SCK |
D0, SCL, CLK |
Діє як годинниковий штифт. Використовується як для I2C, так і для SPI |
4 |
SDA |
D1, MOSI |
Штифт даних модуля. Використовується як для IIC, так і для SPI |
5 |
ВДЕ |
RST, RESET |
Скидає модуль (корисно під час SPI) |
6 |
Постійного струму |
A0 |
Командний штифт даних. Використовується для протоколу SPI |
7 |
CS |
Вибір чіпа |
Корисно, коли за протоколом SPI використовується більше одного модуля |
У цьому посібнику ми просто будемо керувати модулем у режимі 4-Wire SPI, а решту залишимо для якогось іншого підручника.
Спільнота Arduino вже надала нам багато бібліотек, які можна безпосередньо використовувати, щоб зробити це набагато простішим. Я спробував кілька бібліотек і виявив, що бібліотека Adafruit_SSD1306 була дуже простою у використанні і мала кілька графічних параметрів, отже, ми будемо використовувати те саме в цьому посібнику. Але якщо у вашого проекту обмеження пам’яті / швидкості, спробуйте скористатися бібліотекою U8g, оскільки вона працює швидше і займає менше програмної пам’яті.
Ми також з'єднали OLED з Raspberry pi та Arduino.
Необхідний матеріал:
- ESP32
- Модуль RTC DS3231
- 7-контактний модуль дисплея 128 × 64 OLED (SSD1306)
- Чоловіче-жіночі дроти
- Макет
Кругова діаграма:
Схема підключення RTC3231 до плати ESP наведена нижче:
ІЦ RTC DS3231 використовує режим зв'язку I2C. Він має виводи SCL, SDA, Vcc та GND. Підключення модуля RTC до ESP32 наведено нижче:
- SCL RTC -> SCL ESP32, тобто контакт D22
- SDA RTC -> SDA ESP32, тобто контакт D21
- GND RTC -> GND ESP32
- Vcc RTC -> Vcc ESP32
Тут ми використовуємо режим SPI для підключення нашого модуля дисплея OLED 128 × 64 (SSD1306) до ESP32. Отже, він буде використовувати 7 штифтів. З'єднання з ESP32 даються як:
- CS (вибір мікросхеми) PIN-код OLED -> PIN-код D5 ESP32
- Контакт постійного струму OLED -> PIN D4 ESP32
- RES-штифт OLED -> PIN-код D2 ESP32
- SDA-штифт OLED -> PIN-код D23, тобто MOSI ESP32
- Штифт SCK OLED -> PIN D18, тобто SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Вам потрібні файли плати для вашого ESP32. Перевірте спадне меню менеджера дошки Arduino IDE для набору розробників ESP32. Якщо його немає, виконайте дії, наведені в посиланні нижче:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Ви також можете використовувати ESP12 для цього проекту, навчіться використовувати ESP12.
Пояснення коду:
Повний код для ESP32 наведено в кінці статті. Тут ми пояснюємо кілька важливих частин коду.
Нам потрібно кілька бібліотек для використання в нашому коді, які можна завантажити за посиланнями нижче:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Отже, ми включили всі бібліотеки
#включати
Потім визначте всі шпильки 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_CSK;
У функції налаштування ми будемо викликати функцію rtc.adjust (DateTime (__ DATE__, __TIME__)), яка встановить час відповідно до нашого часу на ПК.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Не вдалося знайти RTC"); в той час як (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Після цього ми викликаємо функції відображення для відображення на OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (БІЛИЙ); //display.startscrollright(0x00, 0x0F); // Ви можете прокоментувати цей рядок, щоб прокрутити текст на oled display.setTextSize (2); display.setCursor (0,5); display.print ("Годинник"); // Це відображатиме годинник на OLED протягом 3 секунд display.display (); затримка (3000); }
Потім, нарешті, у циклічній функції, ми збережемо свій час у заздалегідь визначеній змінній DateTime і відобразимо час, використовуючи такі функції відображення, як setTextSize, setCursor тощо. Встановіть їх відповідно до своїх потреб і використовуйте функцію display.println для відображення на OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Отже, таким чином ви можете відображати час на OLED за допомогою ESP32, і, як ви знаєте, ESP відомий своїми можливостями IoT, тому ви можете використовувати це для публікації часу в Інтернеті. У наступній статті ми покажемо вам відображати Інтернет-час на ESP без використання будь-якого модуля RTC.