이 튜토리얼에서는 RTC (Real Time Clock)와 ESP32 및 OLED 디스플레이 와의 인터페이스에 대해 알아 봅니다.
DS3231 RTC 모듈 을 사용 하여 정확한 시간을 추적하고 ESP32를 마이크로 컨트롤러로 사용하여 SPI OLED에 표시합니다. ESP32는 단순한 마이크로 컨트롤러가 아닙니다. 내부에는 Wi-Fi 및 Bluetooth 칩과 39 개의 GPIO 핀이 있습니다. SPI, I2C, UART 등과 같은 모든 통신 프로토콜을 지원합니다. ESP32를 처음 사용하는 경우 먼저 ESP32 시작하기 자습서를 참조하십시오.
RTC 란 ??
DS3231은 RTC (Real Time Clock) 모듈입니다. 대부분의 전자 프로젝트에서 날짜와 시간을 유지하는 데 사용됩니다. 이 모듈은 자체 코인 셀 전원 공급 장치를 사용하여 주 전원이 제거되거나 MCU가 하드 리셋을 수행 한 경우에도 날짜와 시간을 유지합니다. 따라서이 모듈에서 날짜와 시간을 설정하면 항상이를 추적합니다. DS1307, DS3231 등과 같은 여러 유형의 RTC IC를 사용할 수 있습니다.
우리는 이전 에 아래 프로젝트에서 Arduino와 함께 DS3231 RTC를 사용 했습니다.
- Arduino를 이용한 자동 애완 동물 공급기
- Arduino 데이터 로거
참고: 이 모듈을 처음 사용하는 경우 날짜와 시간을 설정해야합니다. RTC IC DS1307을 사용할 수도 있습니다. 이전에 Arduino와 함께 DS1307을 사용했습니다.
OLED 디스플레이에 대해 알아보기:
OLED라는 용어는 " 유기 발광 다이오드"의 약자 로 대부분의 TV에서 사용되는 것과 동일한 기술을 사용하지만 그에 비해 픽셀 수가 적습니다. 이 멋진 디스플레이 모듈을 사용하면 프로젝트가 멋지게 보이기 때문에 정말 재미 있습니다. 여기에서 OLED 디스플레이 및 유형에 대한 전체 기사를 다뤘습니다.
우리가 사용하는 단색 7 핀 SSD1306 0.96 "OLED 디스플레이. 이 디스플레이를 선택하는 이유는 SPI 3 와이어 모드, SPI 4 와이어 모드 및 IIC 모드와 같은 세 가지 다른 통신 프로토콜에서 작동 할 수 있기 때문입니다. 이 튜토리얼 에서는 가장 빠른 통신 모드이고 기본 모드이므로 SPI 4 선 모드에서 모듈을 사용하는 방법을 다룹니다.
핀과 그 기능은 아래 표에 설명되어 있습니다.
핀 번호 |
핀 이름 |
다른 이름들 |
용법 |
1 |
Gnd |
바닥 |
모듈의 접지 핀 |
2 |
Vdd |
Vcc, 5V |
전원 핀 (3-5V 허용) |
삼 |
SCK |
D0, SCL, CLK |
시계 핀 역할을합니다. I2C 및 SPI 모두에 사용 |
4 |
SDA |
D1, MOSI |
모듈의 데이터 핀. IIC 및 SPI 모두에 사용 |
5 |
RES |
RST, 리셋 |
모듈 재설정 (SPI 중에 유용) |
6 |
DC |
A0 |
데이터 명령 핀. SPI 프로토콜에 사용 |
7 |
CS |
칩 선택 |
SPI 프로토콜에서 둘 이상의 모듈을 사용할 때 유용합니다. |
이 튜토리얼에서는 단순히 4-Wire SPI 모드에서 모듈을 작동시키고 나머지는 다른 튜토리얼을 위해 남겨 둘 것입니다.
Arduino 커뮤니티는 이미이를 훨씬 더 간단하게 만드는 데 직접 사용할 수있는 많은 라이브러리를 제공했습니다. 몇 개의 라이브러리를 사용해 보았는데 Adafruit_SSD1306 라이브러리가 사용하기 매우 쉬우 며 그래픽 옵션이 몇 가지 있다는 것을 알았습니다. 따라서이 튜토리얼에서 동일한 것을 사용할 것입니다. 그러나 프로젝트에 메모리 / 속도 제약이있는 경우 U8g 라이브러리를 사용하여 더 빠르게 작동하고 프로그램 메모리를 덜 차지하므로 사용해보십시오.
또한 OLED를 Raspberry pi 및 Arduino와 인터페이스했습니다.
필요한 재료:
- ESP32
- DS3231 RTC 모듈
- 7 핀 128x64 OLED 디스플레이 모듈 (SSD1306)
- 수-암 전선
- 브레드 보드
회로도:
RTC3231을 ESP 보드 에 연결하는 회로도 는 다음과 같습니다.
RTC DS3231 IC는 I2C 통신 모드를 사용합니다. SCL, SDA, Vcc 및 GND 핀이 나와 있습니다. RTC 모듈과 ESP32의 연결 은 다음과 같습니다.
- RTC의 SCL-> ESP32의 SCL, 즉 핀 D22
- RTC의 SDA-> ESP32의 SDA, 즉 핀 D21
- RTC의 GND-> ESP32의 GND
- RTC의 Vcc-> ESP32의 Vcc
여기에서는 SPI 모드를 사용하여 128x64 OLED 디스플레이 모듈 (SSD1306) 을 ESP32에 연결합니다. 따라서 7 개의 핀을 사용합니다. ESP32와의 연결은 다음과 같이 제공됩니다.
- OLED의 CS (Chip select) 핀-> ESP32의 PIN D5
- OLED의 DC 핀-> ESP32의 PIN D4
- OLED의 RES 핀-> ESP32의 PIN D2
- OLED의 SDA 핀-> PIN D23 즉 ESP32의 MOSI
- OLED의 SCK 핀-> PIN D18 즉 ESP32의 SCK
- OLED의 Vdd-> ESP32의 Vcc
- OLED의 GND-> ESP32의 GND
ESP32 용 보드 파일이 필요합니다. ESP32 개발 키트 용 Arduino IDE의 보드 관리자 드롭 다운 메뉴에서 확인합니다. 없는 경우 아래 링크에 제공된 단계를 따르십시오.
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의 모든 핀을 정의합니다. 이러한 핀은 이미 WIRE 라이브러리에 정의되어 있으므로 RTC 모듈에 대한 핀을 정의 할 필요가 없습니다.
#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 (날짜 시간 (__ DATE__, __TIME__)) 우리의 PC 시간에 따라 시간을 설정합니다.
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 (WHITE); //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);
이것이 ESP32를 사용하여 OLED에 시간을 표시하는 방법 이며 ESP는 IoT 기능으로 알려져 있으므로이를 사용하여 인터넷에 시간을 게시 할 수 있습니다. 다음 기사에서는 RTC 모듈을 사용하지 않고 ESP에서 인터넷 시간을 표시하는 방법을 보여줍니다.