Sambungkan pin signal modul DHT11 ke GPIO4 pada ESP32, SDA dan SCL OLED ke GPIO21 dan GPIO22, bekalkan kuasa kedua-duanya dari pin 3V3, kemudian jalankan satu sketch dengan library Adafruit DHT dan SSD1306. Semuanya berjalan pada 3.3V dan tak perlu apa-apa resistor tambahan — modul DHT11 3-pin memang sudah ada pull-up terbina di atas board.
Apa komponen yang anda perlukan untuk weather station ESP32 ini?
Board NodeMCU-32S ESP32 ialah otaknya: ada WiFi, logik 3.3V, dan sangat mesra untuk projek pertama. Ia diprogram melalui micro-USB, bukan USB-C, jadi sediakan kabel data micro-USB. Cip USB-nya CP2102, jadi komputer anda perlukan driver Silicon Labs CP210x — bukan driver CH340 yang dipakai board lain.
Kalau COM port masih tak muncul walaupun driver sudah dipasang, ikut panduan ESP32 tak detect kami dulu sebelum salahkan kod.
Senarai komponen
Macam mana nak sambung DHT11 dan OLED ke ESP32?
OLED 0.96″ ini bercakap melalui I2C, dan pin I2C default ESP32 dalam Arduino ialah GPIO21 (SDA) dan GPIO22 (SCL), jadi tak perlu remap apa-apa. DHT11 pula guna protokol single-wire dia sendiri pada mana-mana GPIO kosong; kami guna GPIO4.
| Pin modul | Pin ESP32 | Nota |
|---|---|---|
| OLED GND | GND | Pin pertama pada display ini — semak silkscreen |
| OLED VCC | 3V3 | Pin kedua, bukan pertama |
| OLED SCL | GPIO22 | Clock I2C default Arduino |
| OLED SDA | GPIO21 | Data I2C default Arduino |
| DHT11 S (signal) | GPIO4 | Mana-mana GPIO kosong boleh; sketch guna 4 |
| DHT11 VCC | 3V3 | Modul terima 3.3–5.5V |
| DHT11 GND | GND | — |
Satu amaran sebelum anda cucuk apa-apa: header OLED ini tersusun GND, VCC, SCL, SDA dari kiri ke kanan — terbalik daripada susunan VCC-dulu pada banyak modul lain. Kalau ikut tabiat sambung wayar merah ke pin pertama, bekalan kuasa masuk terbalik ke display — itulah cara klasik OLED jenis ini mati. Ikut silkscreen, jangan sesekali ikut warna wayar dalam gambar orang lain.

Sekarang berita baiknya: skip resistor pull-up 10k yang disuruh oleh kebanyakan tutorial DHT11. Nasihat itu untuk sensor bare 4-pin; yang kami jual ialah versi modul 3-pin dengan pull-up sedia terpasang pada PCB hitam kecilnya. Sambung S, VCC dan GND, wiring pun siap — dan sebab semuanya berjalan pada 3.3V, level shifting langsung tak diperlukan.
Library dan kod apa yang buat display ini berfungsi?
Stack Adafruit menggerakkan kedua-dua komponen, dipasang dari Library Manager Arduino IDE (Sketch → Include Library → Manage Libraries). Cari DHT sensor library oleh Adafruit dan terima prompt untuk pasang dependency Adafruit Unified Sensor sekali, kemudian pasang Adafruit SSD1306, yang akan tarik Adafruit GFX dengan cara yang sama.
Sketch ini membaca sekali setiap dua saat menggunakan millis() dan bukannya delay(), jadi loop tak pernah tersekat. Datasheet DHT11 Aosong menetapkan tempoh sampling sekurang-kurangnya dua saat, dan library Adafruit pun menguatkuasakan minimum dua saat yang sama secara dalaman — poll lebih laju cuma pulangkan bacaan cache atau bacaan gagal. Dua saat memang rentak semula jadi sensor ini — dan sketch yang sama boleh terus jalan dengan DHT22 tanpa sebarang ubahan.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C // jalankan I2C scanner kalau skrin kekal kosong
#define DHTPIN 4 // pin S modul DHT11
#define DHTTYPE DHT11 // tukar ke DHT22 kalau anda beli varian itu
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHT dht(DHTPIN, DHTTYPE);
const unsigned long READ_INTERVAL = 2000; // DHT11 perlukan sekurang-kurangnya 2 s antara bacaan
unsigned long lastRead = 0;
void setup() {
Serial.begin(115200);
dht.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
Serial.println("SSD1306 not found - check wiring and address");
while (true) delay(10); // berhenti di sini, tiada apa nak dipapar
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println("DHT11 monitor ready");
display.display();
}
void loop() {
if (millis() - lastRead < READ_INTERVAL) return; // tunggu tanpa blocking
lastRead = millis();
float h = dht.readHumidity();
float t = dht.readTemperature(); // Celsius
display.clearDisplay();
display.setCursor(0, 0);
if (isnan(h) || isnan(t)) {
display.setTextSize(1);
display.println("Sensor read failed");
display.println("Check DHT11 wiring");
} else {
display.setTextSize(1);
display.println("Temperature:");
display.setTextSize(2);
display.print(t, 1);
display.println(" C");
display.setTextSize(1);
display.println("Humidity:");
display.setTextSize(2);
display.print(h, 1);
display.println(" %");
}
display.display();
}
Macam mana kalau OLED anda di alamat 0x3D dan bukan 0x3C?
Display kelas SSD1306 duduk di salah satu daripada dua alamat I2C — 0x3C atau 0x3D, ditentukan oleh bit alamat SA0 pada controller. 0x3C ialah default yang paling biasa dan itulah yang sketch ini guna.
Kalau skrin kekal gelap, jangan teka — scan. Core Arduino ESP32 sudah sedia ada scanner di File → Examples → Wire → WireScan; upload, buka Serial Monitor, dan ia akan cetak setiap alamat I2C yang dijumpai. Apa sahaja yang dilaporkan itulah yang masuk ke OLED_ADDR; kalau tiada apa dijumpai, itu masalah wiring, bukan masalah alamat.
Patut beli DHT11 atau DHT22?
DHT11 dan DHT22 ialah dua varian sensor yang sama — listing kami ada kedua-duanya — dan jawapan jujurnya, setiap satu ada tugas masing-masing. Angka di bawah diambil dari panduan DHT Adafruit; kadar sampling pula ikut datasheet DHT11 Aosong sendiri, yang lebih ketat daripada angka 1 Hz Adafruit.
| Spesifikasi | DHT11 | DHT22 |
|---|---|---|
| Julat suhu | 0–50°C | −40 hingga 80°C |
| Ketepatan suhu | ±2°C | ±0.5°C |
| Julat kelembapan | 20–80% RH | 0–100% RH |
| Ketepatan kelembapan | ±5% | ±2–5% |
| Kadar sampling maksimum | 0.5 Hz (setiap 2 saat) | 0.5 Hz (setiap 2 saat) |
Untuk bilik, pejabat atau grow cabinet di Malaysia, julat 0–50°C dan ketepatan ±2°C DHT11 sudah lebih dari cukup. Pilih DHT22 kalau nak bacaan bawah 0°C (log peti sejuk), kelembapan di luar julat 20–80%, atau ketepatan lebih tinggi untuk benda macam inkubator. Dalam kod, satu-satunya perubahan ialah #define DHTTYPE DHT22.
Kenapa skrin kosong atau bacaan keluar “nan”?
Bacaan nan (not a number) bermaksud library DHT tanya sensor tapi tak dapat jawapan. Semak tiga perkara ikut urutan: wayar S betul-betul pada GPIO4 dan tercucuk kemas, DHTTYPE padan dengan sensor sebenar anda (DHT11 yang dibaca sebagai DHT22 akan gagal), dan VCC/GND pergi ke 3V3 dan GND. Kod yang dicopy selalunya poll terlalu laju juga — kekalkan sekurang-kurangnya dua saat antara bacaan.
OLED kosong sedangkan sensor berfungsi hampir selalu berpunca dari bahagian I2C: SDA dan SCL tertukar, alamat salah dalam OLED_ADDR, atau GND/VCC terbalik pada header yang tersusun terbalik itu. Jalankan sketch WireScan dulu — dalam sepuluh saat ia beritahu sama ada display hidup dan di alamat mana ia duduk.

Bacaan yang lari 1–2°C dari remote aircond anda pun bukan kerosakan — itu masih dalam spec ±2°C DHT11.
Boleh guna Arduino Uno ganti ESP32?
Arduino Uno boleh jalankan projek ini dengan tiga library yang sama, cuma pin sahaja berubah: SDA OLED ke A4, SCL ke A5, dan signal DHT11 ke pin digital 2 (kemas kini DHTPIN). Bekalkan kedua-dua modul dari pin 5V Uno — modul DHT11 terima 3.3–5.5V, dan modul OLED ini ada regulator bekalan sendiri di atas board, sebab itulah semua projek klasik Uno OLED memang suap 5V padanya.
Yang hilang ialah WiFi: Uno boleh papar bacaan secara lokal tapi takkan boleh hantar ke phone anda. Kalau weather station yang connected memang matlamat akhir, mula terus dengan ESP32 — perbandingan ESP32 vs ESP8266 vs Uno kami huraikan bila setiap board masuk akal.
Kesilapan biasa yang kami nampak dari pelanggan sebenar
Corak paling mahal ialah wiring OLED dengan wayar-merah-dulu ikut muscle memory. Pada display ini, itu meletakkan VCC pada pin GND, dan bekalan terbalik boleh bunuh modul serta-merta — inilah satu-satunya kesilapan dalam projek ini yang hardware tak maafkan.
Seterusnya, mengikut gambarajah sensor bare padahal guna modul 3-pin: tercari-cari pin keempat, tambah pull-up yang tak perlu, atau percaya warna wayar dalam gambarajah dan bukannya penanda S, VCC dan GND yang tercetak pada modul itu sendiri. Silkscreen pada modul sentiasa menang.
Di bahagian software, perangkap biasa ialah kod paste dengan DHTTYPE DHT22 tertinggal, yang buat DHT11 yang elok pulangkan nan selama-lamanya. Dan banyak projek pertama tersekat lebih awal lagi — pada kabel micro-USB charge-only yang boleh bekalkan kuasa tapi tak boleh upload.

FAQ
Boleh ke DHT11 ukur suhu negatif macam dalam peti sejuk?
Tak boleh. DHT11 baca 0–50°C, jadi ia berhenti pada takat beku. Untuk log peti sejuk atau freezer, pilih varian DHT22 yang boleh baca sampai −40°C — wiring dan sketch kekal sama kecuali satu baris.
Perlu ke tambah resistor 10k untuk DHT11?
Tak perlu dengan modul kami. Modul DHT11 3-pin sudah ada resistor pull-up terbina pada PCB-nya, jadi ia sambung terus ke ESP32 dengan tiga wayar sahaja. Hanya sensor bare 4-pin yang perlukan pull-up luaran.
Kenapa OLED saya tak papar apa-apa walaupun kod berjaya upload?
Biasanya alamat I2C atau wiring. Jalankan contoh WireScan dari core ESP32: kalau ia cetak 0x3D, tukar OLED_ADDR; kalau tiada apa dijumpai, semak semula SDA pada GPIO21, SCL pada GPIO22, dan pastikan GND dan VCC ikut susunan pin GND-dulu display ini.
Boleh ke projek ini guna power bank?
Boleh — keseluruhan litar tarik arus yang sedikit sahaja, dan power bank ke port micro-USB menjadikannya mudah alih. Sesetengah power bank auto-off pada beban ringan; panduan power supply ESP32 kami cover hal itu dan pilihan jangka panjang.
Perlu ke breadboard untuk projek ini?
Tak perlu. Board ESP32, modul DHT11 dan OLED semuanya datang dengan pin header male, jadi tujuh jumper wire female-to-female cukup untuk sambung semuanya terus. Guna breadboard hanya kalau anda nak pemasangan lebih kemas atau merancang tambah sensor lain nanti.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-32(CP2102)
DHT 11 DHT 22 Temperature and Humidity Sensor DHT22 High Sensitivity Sensor DHT11 For Aduino IOT - DHT11 SENSOR
0.96‘ OLED Display Module Blue White Screen I2C IIC Serial 128X64 LCD Display Board - 0.96' OLED WHITE
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE F-F 20CM