- Kas yra RTC?
- Susipažinimas su OLED ekranais:
- Reikalinga medžiaga:
- Grandinės schema:
- Kodo paaiškinimas:
Šioje pamokoje sužinosime apie realaus laiko laikrodį (RTC) ir jo sąsają su ESP32 ir OLED ekranu.
Mes naudosime DS3231 RTC modulį, norėdami sekti tikslų laiką ir rodyti jį SPI OLED, naudodami ESP32 kaip savo mikrovaldiklį. ESP32 yra daugiau nei mikrovaldiklis. Jame yra „Wi-Fi“ ir „Bluetooth“ lustas bei 39 GPIO kaiščiai. Jis palaiko visus ryšio protokolus, tokius kaip SPI, I2C, UART ir kt. Jei dar nesinaudojote ESP32, pirmiausia perskaitykite mūsų „Pradžia nuo ESP32“ pamoką.
Kas yra RTC?
DS3231 yra RTC (Real Time Clock) modulis. Jis naudojamas daugumos „Electronics“ projektų datai ir laikui palaikyti. Šis modulis turi savo monetų elementų maitinimo šaltinį, kurį naudodamas jis palaiko datą ir laiką net tada, kai pagrindinė energija yra pašalinta arba MCU yra iš naujo nustatytas iš naujo. Taigi, kai šiame modulyje nustatysime datą ir laiką, ji visada ją stebės. Yra keli RTC IC tipai, tokie kaip DS1307, DS3231 ir kt.
Anksčiau mes naudojome DS3231 RTC su „Arduino “ toliau pateiktuose projektuose:
- Automatinis naminių gyvūnėlių tiektuvas naudojant „Arduino“
- „Arduino“ duomenų kaupiklis
Pastaba: Pirmą kartą naudodamiesi šiuo moduliu turite nustatyti datą ir laiką. Taip pat galite naudoti RTC IC DS1307, anksčiau mes naudojome DS1307 su „Arduino“.
Susipažinimas su OLED ekranais:
Terminas OLED reiškia „ organinis šviesos diodas“. Jame naudojama ta pati technologija, kuri naudojama daugumoje mūsų televizorių, tačiau turi mažiau taškų, palyginti su jais. Labai smagu turėti šiuos šauniai atrodančius ekranus, nes tai leis mūsų projektams atrodyti šauniai. Čia apžvelgėme visą straipsnį apie OLED ekranus ir jo tipus.
Mes naudojame vienspalvį 7 kontaktų SSD1306 0,96 ”OLED ekraną. Šio ekrano pasirinkimo priežastis yra ta, kad jis gali dirbti su trimis skirtingais ryšio protokolais, tokiais kaip SPI 3 laido režimas, SPI keturių laidų režimas ir IIC režimas. Šioje pamokoje bus aprašyta, kaip naudoti modulį SPI 4 laidų režimu, nes tai greičiausias ir numatytasis ryšio būdas.
Smeigtukai ir jo funkcijos paaiškinti toliau pateiktoje lentelėje.
PIN kodas |
PIN vardas |
Kiti vardai |
Naudojimas |
1 |
Gnd |
Žemė |
Įžemintas modulio kaištis |
2 |
Vdd |
Vcc, 5 V |
Maitinimo kaištis (3-5V toleruojamas) |
3 |
SCK |
D0, SCL, CLK |
Veikia kaip laikrodžio kaištis. Naudojamas tiek I2C, tiek SPI |
4 |
SDA |
D1, MOSI |
Modulio duomenų kaištis. Naudojamas tiek IIC, tiek SPI |
5 |
RES |
RST, RESET |
Iš naujo nustatomas modulis (naudinga SPI metu) |
6 |
DC |
A0 |
Duomenų komandos kaištis. Naudojamas SPI protokolui |
7 |
CS |
Chip Select |
Naudinga, kai pagal SPI protokolą naudojami daugiau nei vienas moduliai |
Šioje pamokoje mes paprasčiausiai valdysime modulį 4 laidų SPI režimu, o likusius paliksime kitai pamokai.
„Arduino“ bendruomenė jau suteikė mums daugybę bibliotekų, kurias galima tiesiogiai naudoti, kad būtų daug paprasčiau. Išbandžiau keletą bibliotekų ir sužinojau, kad „Adafruit_SSD1306“ biblioteka buvo labai paprasta naudotis ir joje buvo keletas grafinių parinkčių, todėl ir šioje instrukcijoje naudosime tas pačias. Bet jei jūsų projekte yra atminties / greičio apribojimų, pabandykite naudoti U8g biblioteką, nes ji veikia greičiau ir užima mažiau programos atminties.
Mes taip pat susiejome OLED su „Raspberry pi“ ir „Arduino“.
Reikalinga medžiaga:
- ESP32
- DS3231 RTC modulis
- 7 kontaktų 128 × 64 OLED ekrano modulis (SSD1306)
- Vyrų ir moterų laidai
- Bandomoji Lenta
Grandinės schema:
Grandinės schema, skirta prijungti RTC3231 prie ESP plokštės, pateikiama žemiau:
RTC DS3231 IC naudoja I2C ryšio režimą. Jis turi SCL, SDA, Vcc ir GND kaiščius. Prijungimas RTC modulis su ESP32 pateikiamas toliau:
- RTC SCL -> ESP32 SCL, ty kaištis D22
- RTC SDA -> ESP32 SDA, ty kaištis D21
- RTC GND -> ESP32 GND
- RTC Vcc -> ESP32 Vcc
Čia mes naudojame SPI režimą, kad savo 128 × 64 OLED ekrano modulį (SSD1306) prijungtume prie ESP32. Taigi, jis naudos 7 kaiščius. Jungtys su ESP32 pateikiamos taip:
- CS (lusto pasirinkimas) kaištis iš OLED -> ESP32 PIN D5
- OLED nuolatinės srovės kaištis -> ESP32 PIN D4
- OLED RES kaištis -> ESP32 PIN D2
- SED kaištis iš OLED -> PIN D23, ty ESP32 MOSI
- OLK SCK kaištis -> PIN D18, ty ESP32 SCK
- OLED Vdd -> ESP32 Vcc
- OLED GND -> ESP32 GND
ESP32 reikia lentos failų. Patikrinkite lentos tvarkyklės išskleidžiamąjį meniu „Arduino IDE“, skirtą ESP32 „dev“ rinkiniui. Jei jo nėra, atlikite toliau pateiktoje nuorodoje nurodytus veiksmus:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Šiam projektui taip pat galite naudoti ESP12, čia išmokite naudotis ESP12.
Kodo paaiškinimas:
Visas ESP32 kodas pateikiamas straipsnio pabaigoje. Čia mes paaiškiname keletą svarbių kodo dalių.
Mums reikia kelių bibliotekų, kurias naudosime savo kode, kurias galite atsisiųsti iš žemiau pateiktų nuorodų:
1. „Adafruit_SSD1306“:
2. SPI:
3. „Adafruit_GFX“:
4. RTClib:
Taigi mes įtraukėme visas bibliotekas
# įtraukti
Tada apibrėžkite visus OLED kaiščius. RTC moduliui nereikia apibrėžti kaiščių, nes šie kaiščiai jau apibrėžti WIRE bibliotekoje.
#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_CS);
Be sąrankos funkcijai, mes vadiname funkcija rtc.adjust (datetime (__ DATE__, __TIME__)) , kuris bus nustatyti laiką pagal mūsų PC laiką.
negaliojanti sąranka () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Nepavyko rasti RTC"); o (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Po to mes kviečiame ekrano funkcijas rodyti OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (BALTAS); //display.startscrollright(0x00, 0x0F); // Galite panaikinti šios eilutės komentarą, jei norite slinkti savo tekstą OLED display.setTextSize (2); display.setCursor (0,5); display.print („Laikrodis“); // Tai 3 sekundes rodys laikrodį OLED ekrane.display (); vėlavimas (3000); }
Tada pagaliau ciklo funkcijoje mes išsaugosime laiką „ DateTime“ dabar iš anksto nustatytame kintamajame ir rodysime laiką naudodamiesi tokiomis rodymo funkcijomis kaip „ setTextSize“, „setCursor“ ir kt. Nustatykite juos pagal savo poreikius ir naudokite display.println funkciją, kad ji būtų rodoma OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (dabar.second (), DEC);
Taigi tokiu būdu galite rodyti laiką OLED naudodami ESP32 ir, kaip žinote, ESP yra žinomas dėl savo IoT galimybių, todėl galite tai naudoti paskelbdami laiką internete. Kitame straipsnyje mes parodysime jums, kaip rodyti interneto laiką ESP nenaudojant jokio RTC modulio.