Arduino UNO R4 DHT22 OLED
Trong hướng dẫn này, chúng ta sẽ học cách kiểm tra và hiển thị nhiệt độ và độ ẩm bằng module DHT22 trên màn hình OLED.

Phần Cứng Cần Thiết
| 1 | × | Arduino UNO R4 WiFi hoặc Arduino UNO R4 Minima | ||
| 1 | × | (Tùy chọn) DIYables STEM V4 IoT, tương thích với Arduino Uno R4 WiFi | ||
| 1 | × | Arduino UNO R4 Minima (Thay thế) | ||
| 1 | × | Cáp USB Type-C | ||
| 1 | × | Màn hình OLED I2C SSD1306 128x64 | ||
| 1 | × | Màn hình OLED I2C SSD1306 128x32 | ||
| 1 | × | Module Cảm biến Nhiệt độ Độ ẩm DHT22 | ||
| 1 | × | Dây Jumper | ||
| 1 | × | (Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Breadboard Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Enclosure for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Power Splitter for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO |
Or you can buy the following kits:
| 1 | × | DIYables STEM V4 IoT Starter Kit (Arduino included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về màn hình OLED và Cảm biến Nhiệt độ Độ ẩm DHT22
Tìm hiểu về màn hình OLED và cảm biến nhiệt độ độ ẩm DHT22, bao gồm pinout, cách hoạt động và phương pháp lập trình trong các tutorial dưới đây.
- Tutorial Arduino UNO R4 - Màn Hình OLED
- Tutorial Arduino UNO R4 - DHT22
Sơ Đồ Đấu Nối

This image is created using Fritzing. Click to enlarge image
Code Arduino UNO R4 - Cảm biến DHT22 - OLED
/*
* Mã Arduino UNO R4 này được phát triển bởi newbiely.vn
* Mã Arduino UNO R4 này được cung cấp để sử dụng công khai, không có ràng buộc.
* Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập:
* https://newbiely.vn/tutorials/arduino-uno-r4/arduino-uno-r4-dht22-temperature-humidity-sensor-oled
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define DHT22_PIN 2 // The Arduino UNO R4 pin connected to DHT22 sensor
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C
DHT dht22(DHT22_PIN, DHT22);
String temperature;
String humidity;
void setup() {
Serial.begin(9600);
// initialize OLED display with address 0x3C for 128x64
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
while (true);
}
delay(2000); // wait for initializing
oled.clearDisplay(); // clear display
oled.setTextSize(3); // text size
oled.setTextColor(WHITE); // text color
oled.setCursor(0, 10); // position to display
dht22.begin(); // initialize DHT22 the temperature and humidity sensor
temperature.reserve(10); // to avoid fragmenting memory when using String
humidity.reserve(10); // to avoid fragmenting memory when using String
}
void loop() {
float humi = dht22.readHumidity(); // read humidity
float tempC = dht22.readTemperature(); // read temperature
// check if any reads failed
if (isnan(humi) || isnan(tempC)) {
temperature = "Failed";
humidity = "Failed";
} else {
temperature = String(tempC, 1); // one decimal places
temperature += char (247); // degree character
temperature += "C";
humidity = String(humi, 1); // one decimal places
humidity += "%";
Serial.print(tempC); // print to Serial Monitor
Serial.print("°C | " ); // print to Serial Monitor
Serial.print(humi); // print to Serial Monitor
Serial.println("%"); // print to Serial Monitor
}
oledDisplayCenter(temperature, humidity); // display temperature and humidity on OLED
}
void oledDisplayCenter(String temperature, String humidity) {
int16_t x1;
int16_t y1;
uint16_t width_T;
uint16_t height_T;
uint16_t width_H;
uint16_t height_H;
oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_T, &height_T);
oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_H, &height_H);
// display on horizontal and vertical center
oled.clearDisplay(); // clear display
oled.setCursor((SCREEN_WIDTH - width_T) / 2, SCREEN_HEIGHT/2 - height_T - 5);
oled.println(temperature); // text to display
oled.setCursor((SCREEN_WIDTH - width_H) / 2, SCREEN_HEIGHT/2 + 5);
oled.println(humidity); // text to display
oled.display();
}
Các Bước Thực Hiện
Thực hiện theo các hướng dẫn từng bước sau:
- Nếu đây là lần đầu tiên bạn sử dụng Arduino Uno R4 WiFi/Minima, hãy tham khảo hướng dẫn Arduino UNO R4 - Cài Đặt Phần Mềm.
- Kết nối board Arduino Uno R4 với module DHT22 và màn hình OLED theo sơ đồ được cung cấp.
- Kết nối board Arduino Uno R4 với máy tính của bạn bằng cáp USB.
- Khởi động Arduino IDE trên máy tính của bạn.
- Chọn board Arduino Uno R4 phù hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
- Đi đến biểu tượng Libraries ở phía bên trái của Arduino IDE.
- Tìm kiếm "SSD1306" và tìm thư viện SSD1306 của Adafruit.
- Nhấn nút Install để cài đặt thư viện.

- Bạn cần cài đặt thêm các thư viện phụ thuộc.
- Nhấn nút Install All để cài đặt tất cả các thư viện cần thiết.

- Tìm kiếm "DHT" và tìm thư viện DHT sensor của Adafruit.
- Nhấn nút Install để cài đặt thư viện.

- Bạn sẽ cần cài đặt thêm các thư viện phụ thuộc.
- Nhấn nút Install All để cài đặt tất cả các thư viện phụ thuộc.

- Sao chép code và mở trong Arduino IDE.
- Nhấn nút Upload trong Arduino IDE để truyền code lên Arduino UNO R4 của bạn.
- Đặt cảm biến vào nước nóng và nước lạnh, hoặc cầm nó trong tay.
- Kiểm tra kết quả trên màn hình OLED và Serial Monitor.
※ Lưu ý:
Code tự động căn giữa văn bản theo chiều ngang và chiều dọc trên màn hình OLED.
Video Tutorial
Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.