Qoʻllanma · Displeylar · Ulash
ESP32’ga displeyni qanday ulash kerak
Deyarli har qanday havaskor displey ham Arduino (5 V), ham ESP32 (3.3 V) bilan ishlaydi — ESP32 esa grafika, sensor va Wi-Fi uchun qulayroq. Amalda toʻrt turga duch kelasiz: monoxrom OLED, rangli TFT, sensorli TFT va E-Ink panel. Quyida — har biri qanday ulanadi va uni yoqadigan birinchi qatorlar.
Hali tanlayapsizmi? Qoʻshni qoʻllanma ularni yonma-yon solishtiradi — OLED vs TFT vs E-Paper vs Nextion. Bu sahifa esa amaliy yarmi: har biri uchun sxema va ishlaydigan sketch.
| Tur | Chiplar | Shina | Rang | Yangilanish | Nima uchun |
|---|---|---|---|---|---|
| OLED | SSD1306 · SH1106 | I²C | mono | tez | soat, holat, mini-UI |
| Rangli TFT | ST7789 · ILI9341 · ST7735 | SPI | 65k | tez | panel, grafik, rasm |
| Sensorli TFT | ILI9341 + XPT2046 | SPI (+tach) | 65k | tez | aqlli uy, pult |
| E-Ink | Waveshare · GDEH | SPI | mono / oz | sekin | narx yorligʻi, taxta, soat |
1. OLED (SSD1306 / SH1106) — ikki sim, chin qora
Klassik 0.96" OLED I²C orqali ishlaydi, shu bois faqat ikki signal simi — SDA va SCL hamda quvvat kerak. Yuqori kontrast (piksel chindan oʻchadi, orqa yoritish yoʻq), juda kam quvvat va arzon narx. 128×64 piksel bir necha qator matn yoki kichik grafikaga yetadi — soat, ob-havo va Wi-Fi/IP holati uchun ideal. SH1106 — deyarli toʻliq oʻxshashi (ustun siljishini kutubxona oʻzi hisobga oladi).
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(128, 64, &Wire); // I2C, address 0x3C (SH1106 is near-identical)
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(SSD1306_WHITE);
oled.setCursor(0, 0);
oled.println("24.7 C");
oled.display(); // push the frame to the panel
} 2. Rangli TFT (ST7789 / ILI9341 / ST7735) — SPI orqali toʻliq rang
Rangli TFT SPI orqali 65 000 rang va jonli grafik,
menyu hamda rasmlar uchun yetarli yangilanish beradi — haqiqiy panel kerak boʻlganda asosiy ish oti. U I²C’dan
koʻra koʻproq pin talab qiladi (SCK, MOSI, DC, CS, RES + orqa yoritish), yoritish esa doim tok tortadi, ammo
evaziga toʻliq UI. Asosiy kutubxona — TFT_eSPI, pinlar bir marta User_Setup.h’da
beriladi. Arzon modullar koʻpincha SCK/MOSI’ni SCL/SDA deb belgilaydi — bu oʻsha SPI, faqat
chalgʻituvchi belgi.
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI(); // SPI pins are set once in User_Setup.h
void setup() {
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_CYAN, TFT_BLACK);
tft.setTextSize(3);
tft.drawString("24.7 C", 20, 20); // a full 65k-colour UI
} 3. Sensorli TFT (ILI9341 + XPT2046) — bosiladigan ekran
Sensor qatlamini qoʻshsangiz, TFT boshqaruv paneliga aylanadi: aqlli uy, termostat, qoʻl pultlari. Bilishga arzigulik nuqta: displey va XPT2046 tach kontrolleri bitta SPI shinasini boʻlishadi (SCK/MOSI/MISO); tach chipiga faqat oʻz T_CS (chip-select) va ixtiyoriy T_IRQ (uzilish) kerak. Shu bilan pin soni meʼyorida qoladi. Mashhur Cheap Yellow Display aynan shu: ESP32 + 2.8" ILI9341 + XPT2046 bitta platada.
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI(); // screen + XPT2046 touch share one SPI bus
void loop() {
uint16_t x, y;
if (tft.getTouch(&x, &y)) { // T_CS + T_IRQ report the press
tft.fillCircle(x, y, 4, TFT_CYAN); // draw where the finger landed
}
} 4. E-Ink (E-Paper) — quvvat faqat oʻzgarganda
E-Ink — avtonomlik chempioni: tok faqat rasm yangilanayotganda kerak, soʻng tasvir bepul turadi — va u toʻgʻridan-toʻgʻri quyoshda ham xuddi qogʻozdek oʻqiladi. Narx yorligʻi, xona taxtachasi, taqvim va bitta batareyada oylab ishlaydigan sekin soatlar uchun ideal. Kamchiligi — tezlik: toʻliq yangilanish yuz millisekunddan bir necha soniyagacha davom etadi va koʻpincha miltillaydi, shuning uchun animatsiya mumkin emas. SPI orqali deyarli TFT kabi ulanadi, ustiga panel mikrokontrollerga qaytaradigan BUSY chizigʻi. Keng tarqalgan kutubxona — GxEPD2.
#include <GxEPD2_BW.h>
// 2.9" panel, pins: CS=5, DC=2, RST=4, BUSY=27
GxEPD2_BW<GxEPD2_290, GxEPD2_290::HEIGHT> epd(GxEPD2_290(5, 2, 4, 27));
void setup() {
epd.init();
epd.setFullWindow();
epd.firstPage();
do {
epd.fillScreen(GxEPD_WHITE);
epd.setCursor(10, 40);
epd.print("+23 C"); // then it holds the image on zero power
} while (epd.nextPage());
} Kavsharlashdan oldin
Ikki narsa eng koʻp asab tejaydi. Birinchi — mantiq darajasi: ESP32 GPIO’si 3.3 V, koʻp modullarga bu mos, ammo Arduino’dan faqat 5 V displeyni teskari yoʻnalishda ulash ehtiyot talab qiladi. Ikkinchi — pinlar: rangli yoki sensorli ekran GPIO’ning yarmini egallashi mumkin, shuning uchun ularni ulashdan oldin rejalashtiring — ayniqsa displey allaqachon koʻp qismini olgan «hammasi bir joyda» platalarda. Avval BoardLab’da ulashni chizib, qaysi pinlar boʻsh qolishini koʻring.
Ekran sxemasini vizual yigʻing va sensorlarga qaysi GPIO qolishini koʻring.