Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Đồng hồ thời gian thực (RTC) và giao diện của nó với màn hình ESP32 và OLED.
Chúng tôi sẽ sử dụng mô-đun DS3231 RTC để theo dõi thời gian chính xác và hiển thị nó trên SPI OLED bằng cách sử dụng ESP32 làm bộ vi điều khiển của chúng tôi. ESP32 không chỉ là một bộ vi điều khiển. Nó có chip Wi-Fi và Bluetooth bên trong và 39 chân GPIO. Nó hỗ trợ tất cả các giao thức giao tiếp như SPI, I2C, UART, v.v. Nếu bạn chưa quen với ESP32 thì trước tiên hãy xem hướng dẫn Bắt đầu với ESP32 của chúng tôi.
RTC là gì ??
DS3231 là một mô-đun RTC (Đồng hồ thời gian thực). Nó được sử dụng để duy trì ngày và giờ cho hầu hết các dự án Điện tử. Mô-đun này có nguồn điện di động đồng xu của riêng nó, sử dụng nó để duy trì ngày và giờ ngay cả khi nguồn điện chính bị ngắt hoặc MCU đã trải qua quá trình khôi phục cài đặt gốc. Vì vậy, một khi chúng tôi đặt ngày và giờ trong mô-đun này, nó sẽ luôn theo dõi. Có một số loại IC RTC có sẵn như DS1307, DS3231, v.v.
Trước đây chúng tôi đã sử dụng DS3231 RTC với Arduino trong các dự án dưới đây:
- Bộ nạp vật nuôi tự động sử dụng Arduino
- Bộ ghi dữ liệu Arduino
Lưu ý: Khi sử dụng mô-đun này lần đầu tiên, bạn phải đặt ngày và giờ. Bạn cũng có thể sử dụng IC RTC DS1307, trước đây chúng tôi đã sử dụng DS1307 với Arduino.
Tìm hiểu về Màn hình OLED:
Thuật ngữ OLED là viết tắt của “ Diode phát sáng hữu cơ”, nó sử dụng cùng một công nghệ được sử dụng trong hầu hết các TV của chúng ta nhưng có ít điểm ảnh hơn so với chúng. Thật là thú vị khi có những mô-đun hiển thị bắt mắt này vì nó sẽ làm cho các dự án của chúng tôi trông thật bắt mắt. Chúng tôi đã đề cập đến một Bài báo đầy đủ về màn hình OLED và các loại của nó ở đây.
Chúng tôi đang sử dụng màn hình OLED 7 chân SSD 1306 0,96 ”đơn sắc. Lý do chọn màn hình này là nó có thể hoạt động trên ba Giao thức truyền thông khác nhau như chế độ SPI 3 Wire, SPI bốn wire và chế độ IIC. Hướng dẫn này sẽ trình bày cách sử dụng mô-đun ở chế độ SPI 4-wire vì đây là chế độ giao tiếp nhanh nhất và là chế độ mặc định.
Các chân và chức năng của nó được giải thích trong bảng dưới đây.
Số PIN |
Tên ghim |
Vài cái tên khác |
Sử dụng |
1 |
Gnd |
Đất |
Chân nối đất của mô-đun |
2 |
Vdd |
Vcc, 5V |
Pin nguồn (3-5V có thể chịu được) |
3 |
SCK |
D0, SCL, CLK |
Hoạt động như kim đồng hồ. Được sử dụng cho cả I2C và SPI |
4 |
SDA |
D1, MOSI |
Chân dữ liệu của mô-đun. Được sử dụng cho cả IIC và SPI |
5 |
RES |
RST, ĐẶT LẠI |
Đặt lại mô-đun (hữu ích trong SPI) |
6 |
DC |
A0 |
Pin Lệnh dữ liệu. Được sử dụng cho giao thức SPI |
7 |
CS |
Chọn chip |
Hữu ích khi nhiều mô-đun được sử dụng theo giao thức SPI |
Trong hướng dẫn này, chúng tôi sẽ chỉ vận hành mô-đun ở chế độ 4-Wire SPI, chúng tôi sẽ để phần còn lại cho một số hướng dẫn khác.
Cộng đồng Arduino đã cung cấp cho chúng tôi rất nhiều Thư viện có thể được sử dụng trực tiếp để làm cho việc này trở nên đơn giản hơn rất nhiều. Tôi đã thử một vài thư viện và thấy rằng Thư viện Adafruit_SSD1306 rất dễ sử dụng và có một số tùy chọn đồ họa, do đó chúng tôi sẽ sử dụng tương tự trong hướng dẫn này. Tuy nhiên, nếu dự án của bạn có hạn chế về bộ nhớ / tốc độ, hãy thử sử dụng Thư viện U8g vì nó hoạt động nhanh hơn và chiếm ít bộ nhớ chương trình hơn.
Chúng tôi cũng đã giao tiếp OLED với Raspberry pi và với Arduino.
Vật liệu cần thiết:
- ESP32
- Mô-đun RTC DS3231
- Mô-đun màn hình OLED 7 chân 128 × 64 (SSD1306)
- Dây nam - nữ
- Breadboard
Sơ đồ mạch:
Sơ đồ mạch để kết nối RTC3231 với bảng ESP được đưa ra dưới đây:
IC RTC DS3231 sử dụng phương thức giao tiếp I2C. Nó có các chân SCL, SDA, Vcc và GND ra khỏi nó. Kết nối của mô-đun RTC với ESP32 được đưa ra dưới đây:
- SCL của RTC -> SCL của ESP32 tức là Chân D22
- SDA của RTC -> SDA của ESP32 tức là Pin D21
- GND của RTC -> GND của ESP32
- Vcc của RTC -> Vcc của ESP32
Ở đây, chúng tôi đang sử dụng chế độ SPI để kết nối Mô-đun màn hình OLED 128 × 64 (SSD1306) với ESP32. Vì vậy, nó sẽ sử dụng 7 chân. Các kết nối với ESP32 được cung cấp như:
- Chân CS (Chọn chip) của OLED -> PIN D5 của ESP32
- Chân DC của OLED -> PIN D4 của ESP32
- Chân RES của OLED -> PIN D2 của ESP32
- Chân SDA của OLED -> PIN D23 tức là MOSI của ESP32
- Chân SCK của OLED -> PIN D18 tức là SCK của ESP32
- Vdd của OLED -> Vcc của ESP32
- GND của OLED -> GND của ESP32
Bạn cần các tệp bảng cho ESP32 của mình. Kiểm tra trình đơn thả xuống của trình quản lý bảng của Arduino IDE dành cho bộ phát triển ESP32. Nếu nó không có ở đó, hãy làm theo các bước được cung cấp trong liên kết bên dưới:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Bạn cũng có thể sử dụng ESP12 cho dự án này, tìm hiểu tại đây để sử dụng ESP12.
Giải thích mã:
Mã hoàn chỉnh cho ESP32 được đưa ra ở cuối bài viết. Ở đây chúng tôi đang giải thích một số phần quan trọng của mã.
Chúng tôi cần một số thư viện để sử dụng trong mã của mình, có thể tải xuống từ các liên kết dưới đây:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Vì vậy, chúng tôi đã bao gồm tất cả các thư viện
#include
Sau đó xác định tất cả các chân của OLED. Bạn không cần xác định các chân cho mô-đun RTC vì các chân này đã được xác định trong thư viện 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_CS);
Trong chức năng thiết lập , chúng ta sẽ gọi một hàm rtc.adjust (DateTime (__ DATE__, __TIME__)) sẽ đặt thời gian theo thời gian trên PC của chúng ta.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Không tìm thấy RTC"); trong khi (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Sau đó, chúng tôi gọi các chức năng hiển thị để hiển thị trên OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (TRẮNG); //display.startscrollright(0x00, 0x0F); // Bạn có thể bỏ ghi chú dòng này để cuộn văn bản của bạn trên oled display.setTextSize (2); display.setCursor (0,5); display.print ("Đồng hồ"); // Điều này sẽ hiển thị Đồng hồ trên OLED trong 3 giây display.display (); chậm trễ (3000); }
Sau đó, cuối cùng trong hàm vòng lặp , chúng ta sẽ lưu trữ thời gian của mình trong biến DateTime hiện được xác định trước và hiển thị thời gian bằng các hàm hiển thị như setTextSize, setCursor, v.v. Đặt chúng theo nhu cầu của bạn và sử dụng hàm display.println để hiển thị trên OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Vì vậy, đây là cách bạn có thể hiển thị thời gian trên OLED bằng cách sử dụng ESP32 và như bạn biết ESP được biết đến với khả năng IoT của nó, vì vậy bạn có thể sử dụng điều này để xuất bản thời gian trên internet. Trong phần tiếp theo, chúng tôi sẽ hướng dẫn bạn hiển thị Thời gian Internet trên ESP mà không cần sử dụng bất kỳ Mô-đun RTC nào.