- Какво е 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 означава „ Organic Light emitting diode“ , използва същата технология, която се използва в повечето от нашите телевизори, но има по-малко пиксели в сравнение с тях. Истинско забавление е да разполагаме с тези страхотно изглеждащи дисплейни модули, тъй като това ще направи нашите проекти да изглеждат страхотно. Тук разгледахме пълна статия за OLED дисплеите и техните типове.
Използваме монохромен 7-пинов SSD1306 0.96 ”OLED дисплей. Причината за избора на този дисплей е, че той може да работи на три различни комуникационни протокола, като например SPI 3 Wire режим, SPI четирижилен режим и IIC режим. Този урок ще обхване как да използвате модула в SPI 4-жичен режим, тъй като той е най-бързият режим на комуникация и този по подразбиране.
Щифтовете и неговите функции са обяснени в таблицата по-долу.
ПИН номер |
Име на ПИН |
Други имена |
Употреба |
1 |
Gnd |
Земя |
Заземен щифт на модула |
2 |
Vdd |
Vcc, 5V |
Захранващ щифт (3-5V поносим) |
3 |
SCK |
D0, SCL, CLK |
Действа като щифт на часовника. Използва се както за I2C, така и за SPI |
4 |
SDA |
D1, MOSI |
ПИН за данни на модула. Използва се както за IIC, така и за SPI |
5 |
ВЕИ |
RST, RESET |
Нулира модула (полезно по време на SPI) |
6 |
DC |
A0 |
ПИН за команда за данни. Използва се за протокол SPI |
7 |
CS |
Избор на чип |
Полезно, когато по протокол SPI се използват повече от един модул |
В този урок просто ще управляваме модула в 4-Wire SPI режим, а останалото ще оставим за някой друг урок.
Общността на Arduino вече ни предостави много библиотеки, които могат да се използват директно, за да направят това много по-лесно. Изпробвах няколко библиотеки и установих, че библиотеката Adafruit_SSD1306 е много лесна за използване и има шепа графични опции, поради което ще използваме същите в този урок. Но ако вашият проект има ограничение за памет / скорост, опитайте да използвате библиотеката U8g, тъй като работи по-бързо и заема по-малко програмна памет.
Също така сме свързали OLED с Raspberry pi и с Arduino.
Необходим материал:
- ESP32
- DS3231 RTC модул
- 7-пинов 128 × 64 OLED дисплеен модул (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 (Chip select) щифт на OLED -> PIN D5 на ESP32
- DC щифт на OLED -> ПИН D4 на ESP32
- RES щифт на OLED -> ПИН D2 на ESP32
- SDA щифт на OLED -> ПИН D23, т.е. MOSI на ESP32
- SCK щифт на OLED -> PIN D18, т.е. SCK на ESP32
- Vdd на OLED -> Vcc на ESP32
- GND на OLED -> GND на ESP32
Нуждаете се от бордови файлове за вашия ESP32. Проверете падащото меню на диспечера на борда на Arduino IDE за ESP32 dev kit. Ако не е там, следвайте стъпките, дадени в линка по-долу:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Можете също да използвате ESP12 за този проект, научете се тук да използвате ESP12.
Обяснение на кода:
Пълният код за ESP32 е даден в края на статията. Тук обясняваме няколко важни части от кода.
Имаме нужда от няколко библиотеки, които да използваме в нашия код, които могат да бъдат изтеглени от връзките по-долу:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Така че включихме всички библиотеки
#include
След това дефинирайте всички щифтове на 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 ("Clock"); // Това ще покаже часовник на OLED за 3 секунди display.display (); забавяне (3000); }
След това най-накрая в цикъл функция, ние ще съхраним времето си в DateTime вече предварително дефинирана променлива и ще покажем времето, използвайки функции за показване като setTextSize, setCursor и др. Задайте тези според вашите нужди и използвайте функцията display.println за показване на OLED.
цикъл void () { DateTime сега = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (сега.секунда (), DEC);
Така че по този начин можете да показвате времето на OLED с помощта на ESP32 и както знаете ESP е известен със своите IoT възможности, така че можете да го използвате, за да публикувате времето в интернет. В следващата статия ще ви покажем да показвате интернет време на ESP, без да използвате какъвто и да е RTC модул.