- Что такое RTC ??
- Знакомство с OLED-дисплеями:
- Требуемый материал:
- Принципиальная электрическая схема:
- Пояснение к коду:
В этом руководстве мы узнаем о часах реального времени (RTC) и их взаимодействии с ESP32 и OLED-дисплеями.
Мы будем использовать модуль DS3231 RTC, чтобы отслеживать правильное время и отображать его на 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, четырехпроводный режим SPI и режим IIC. В этом руководстве будет рассказано, как использовать модуль в 4-проводном режиме SPI, поскольку это самый быстрый способ связи и режим по умолчанию.
Контакты и их функции описаны в таблице ниже.
Пин код |
Имя контакта |
Другие названия |
Применение |
1 |
Gnd |
Земля |
Контакт заземления модуля |
2 |
Vdd |
Vcc, 5 В |
Вывод питания (допустимое напряжение 3-5 В) |
3 |
SCK |
D0, SCL, CLK |
Действует как штифт часов. Используется как для I2C, так и для SPI |
4 |
ПДД |
D1, MOSI |
Вывод данных модуля. Используется как для IIC, так и для SPI |
5 |
ВИЭ |
RST, СБРОС |
Сбрасывает модуль (полезно во время SPI) |
6 |
ОКРУГ КОЛУМБИЯ |
A0 |
Вывод команды данных. Используется для протокола SPI |
7 |
CS |
Выбор чипа |
Полезно, когда по протоколу SPI используется более одного модуля |
В этом уроке мы просто будем работать с модулем в режиме 4-Wire SPI, остальное мы оставим для другого урока.
Сообщество Arduino уже предоставило нам множество библиотек, которые можно использовать напрямую, чтобы сделать это намного проще. Я опробовал несколько библиотек и обнаружил, что библиотека Adafruit_SSD1306 очень проста в использовании и имеет несколько графических опций, поэтому мы будем использовать их в этом руководстве. Но, если ваш проект имеет ограничение памяти / скорости, попробуйте использовать библиотеку U8g, так как она работает быстрее и занимает меньше программной памяти.
Мы также связали OLED с Raspberry pi и Arduino.
Требуемый материал:
- ESP32
- Модуль DS3231 RTC
- 7-контактный модуль дисплея OLED 128 × 64 (SSD1306)
- Мужской-женский провода
- Макетная плата
Принципиальная электрическая схема:
Схема подключения RTC3231 к плате ESP приведена ниже:
RTC DS3231 IC использует режим связи 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 для подключения нашего модуля дисплея 128 × 64 OLED (SSD1306) к ESP32. Итак, он будет использовать 7 контактов. Связи с ESP32 представлены как:
- Вывод CS (выбор микросхемы) OLED -> PIN D5 ESP32
- Контакт постоянного тока OLED -> контакт D4 ESP32
- Вывод RES OLED -> PIN D2 ESP32
- Вывод SDA OLED -> PIN D23, то есть MOSI ESP32
- Контакт SCK OLED -> PIN D18, т.е. SCK ESP32
- Vdd OLED -> Vcc ESP32
- Земля OLED -> Земля 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 (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
В функции настройки мы вызовем функцию 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 now и отобразим время с помощью функций отображения, таких как setTextSize, setCursor и т. Д. Установите их в соответствии с вашими потребностями и используйте функцию display.println для отображения на OLED.
недействительный цикл () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Вот как вы можете отображать время на OLED с помощью ESP32, и, как вы знаете, ESP известен своими возможностями IoT, поэтому вы можете использовать его для публикации времени в Интернете. В следующей статье мы покажем вам, как отображать Интернет-время на ESP без использования какого-либо модуля RTC.