Tässä opetusohjelmassa opitaan reaaliaikakellosta (RTC) ja sen liitännöistä ESP32- ja OLED-näyttöihin.
Käytämme DS3231 RTC -moduulia seuraamaan oikeaa aikaa ja näyttämään sen SPI OLED: llä käyttämällä ESP32: ta mikrokontrollerina. ESP32 on enemmän kuin mikrokontrolleri. Sen sisällä on Wi-Fi ja Bluetooth-siru ja 39 GPIO-nastaa. Se tukee kaikkia tiedonsiirtoprotokollia, kuten SPI, I2C, UART jne. Jos olet uusi ESP32-käyttäjä, käy ensin läpi ESP32-opetusohjelma.
Mikä on RTC?
DS3231 on RTC (Real Time Clock) -moduuli. Sitä käytetään pitämään päivämäärä ja aika useimmissa elektroniikkaprojekteissa. Tällä moduulilla on oma kolikkovirtalähde, jonka avulla se ylläpitää päivämäärää ja kellonaikaa, vaikka päävirta irrotettaisiin tai MCU olisi nollattu kovalla teholla. Joten kun asetamme päivämäärän ja kellonajan tässä moduulissa, se seuraa sitä aina. Saatavilla on useita RTC-IC-tyyppejä, kuten DS1307, DS3231 jne.
Olemme aiemmin käyttäneet DS3231 RTC: tä Arduinon kanssa alla olevissa projekteissa:
- Automaattinen lemmikkieläinten syöttölaite Arduinoa käyttämällä
- Arduino Data Logger
Huomaa: Kun käytät tätä moduulia ensimmäistä kertaa, sinun on asetettava päivämäärä ja kellonaika. Voit käyttää myös RTC IC DS1307: tä, olemme aiemmin käyttäneet DS1307: tä Arduinon kanssa.
OLED-näytöihin tutustuminen:
Termi OLED tarkoittaa ” orgaanista valoa emittoivaa diodia”. Se käyttää samaa tekniikkaa, jota käytetään useimmissa televisioissamme, mutta siinä on vähemmän pikseleitä. On todella hauskaa saada nämä tyylikkäät näyttömoduulit, koska se saa projektimme näyttämään hienolta. Olemme käsittäneet koko artikkelin OLED-näytöistä ja sen tyypeistä täällä.
Käytämme yksiväristä 7-nastaista SSD1306 0,96 tuuman OLED-näyttöä. Syynä tämän näytön valitsemiseen on se, että se voi toimia kolmella erilaisella tiedonsiirtoprotokollalla, kuten SPI 3 Wire -moodilla, SPI: n nelijohtimella ja IIC-tilalla. Tässä opetusohjelmassa käsitellään moduulin käyttöä SPI 4-johdin-tilassa, koska se on nopein ja oletustapa.
Tapit ja niiden toiminnot on selitetty alla olevassa taulukossa.
Pin koodi |
PIN-nimi |
Muut nimet |
Käyttö |
1 |
Gnd |
Maa |
Moduulin maadoitettu tappi |
2 |
Vdd |
Vcc, 5 V |
Virtatappi (3-5V siedettävä) |
3 |
SCK |
D0, SCL, CLK |
Toimii kellotapina. Käytetään sekä I2C: lle että SPI: lle |
4 |
SDA |
D1, MOSI |
Moduulin datanasta. Käytetään sekä IIC: lle että SPI: lle |
5 |
RES |
RST, NOLLAA |
Nollaa moduulin (hyödyllinen SPI: n aikana) |
6 |
DC |
A0 |
Data Command -tappi. Käytetään SPI-protokollaan |
7 |
CS |
Sirun valinta |
Hyödyllinen, kun SPI-protokollassa käytetään useampaa kuin yhtä moduulia |
Tässä opetusohjelmassa yksinkertaisesti käytämme moduulia 4-johdin SPI-tilassa, jätämme loput muuhun opetusohjelmaan.
Arduino-yhteisö on jo antanut meille paljon kirjastoja, joita voidaan käyttää suoraan tekemään tästä paljon yksinkertaisempaa. Kokeilin muutamia kirjastoja ja huomasin, että Adafruit_SSD1306-kirjasto oli erittäin helppokäyttöinen ja sillä oli kourallinen graafisia vaihtoehtoja, joten käytämme samaa tässä opetusohjelmassa. Mutta jos projektissasi on muistin / nopeuden rajoitus, yritä käyttää U8g-kirjastoa, koska se toimii nopeammin ja vie vähemmän ohjelmamuistia.
Olemme myös liittäneet OLED: n Raspberry pi: n ja Arduinon kanssa.
Tarvittava materiaali:
- ESP32
- DS3231 RTC-moduuli
- 7-nastainen 128 × 64 OLED -näyttömoduuli (SSD1306)
- Uros-naaras johdot
- Leipälauta
Piirikaavio:
Kytkentäkaavio RTC3231: n liittämiseksi ESP-korttiin on annettu alla:
RTC DS3231 IC käyttää I2C- tiedonsiirtotilaa. Siinä on SCL-, SDA-, Vcc- ja GND-nastoja. Liitäntä RTC moduulin ESP32 on seuraava:
- RTC: n SCL -> ESP32: n SCL eli nasta D22
- RTC: n SDA -> ESP32: n SDA eli nasta D21
- RTC: n GND -> ESP32: n GND
- RTC: n Vcc -> ESP32: n Vcc
Tässä käytämme SPI-tilaa 128 × 64 OLED -näyttömoduulin (SSD1306) liittämiseen ESP32: een. Joten se käyttää 7 nastaa. Yhteydet ESP32: n kanssa ovat seuraavat:
- OLEDin CS (sirun valinta) -tappi -> ESP32: n PIN D5
- OLED: n DC-nasta -> ESP32: n PIN D4
- OLED: n RES-nasta -> ESP32: n PIN D2
- OLED: n SDA-tappi -> PIN D23 eli ESP32: n MOSI
- OLK: n SCK-tappi -> PIN D18 eli ESP32: n SCK
- OLED: n Vdd -> ESP32: n Vcc
- OLED: n GND -> ESP32: n GND
Tarvitset levytiedostot ESP32: lle. Tarkista Arduino IDE for ESP32 dev kit -paneelin hallinnan pudotusvalikko. Jos sitä ei ole, noudata alla olevan linkin ohjeita:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Voit käyttää ESP12: ta myös tähän projektiin. Opi täältä käyttämään ESP12: ta.
Koodin selitys:
ESP32: n täydellinen koodi on artikkelin lopussa. Tässä selitämme muutamia tärkeitä koodin osia.
Tarvitsemme useita kirjastoja käytettäväksi koodissamme, jotka voidaan ladata alla olevista linkeistä:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Joten olemme sisällyttäneet kaikki kirjastot
#sisältää
Määritä sitten kaikki OLED-nastat. Sinun ei tarvitse määrittää nastoja RTC-moduulille, koska nämä nastat on jo määritelty WIRE-kirjastossa.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2 Adafruit_SSD1306 -näyttö (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Vuonna setup -toiminto, soitamme funktio rtc.adjust (Aikaleiman (__ DATE__, __TIME__)) , joka asettaa ajan mukaan meidän PC aikaa.
void setup () { Sarja.alku (9600); if (! rtc.begin ()) { Serial.println ("RTC: tä ei löydy"); kun (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Sen jälkeen kutsumme näyttötoiminnot näyttämään OLED: ssä.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (VALKOINEN); //display.startscrollright(0x00, 0x0F); // Voit vierittää tätä riviä vierittämällä tekstiä oled display.setTextSize (2); display.setCursor (0,5); display.print ("Kello"); // Tämä näyttää kellon OLED-näytössä 3 sekunnin ajan . Näyttö (); viive (3000); }
Lopuksi silmukka- toiminnossa, tallennamme aikamme DateTime nyt ennalta määritetty muuttuja ja näyttää ajan käyttämällä näyttötoimintoja, kuten setTextSize, setCursor jne. Aseta nämä tarpeidesi mukaan ja käytä display.println- toimintoa näyttämään OLED: ssä.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (nyt. sekunti (), DEC);
Joten voit näyttää ajan OLED: llä käyttämällä ESP32: ta ja kuten tiedät, ESP tunnetaan IoT-ominaisuuksistaan, joten voit käyttää tätä julkaisemaan ajan Internetissä. Seuraavassa artikkelissa näytämme sinulle Internet-ajan näyttämisen ESP: ssä käyttämättä mitään RTC-moduulia.