RisalDash RisalDash

دليل · شاشات · توصيل

كيف توصّل شاشة بـ ESP32

تعمل معظم شاشات الهواة مع Arduino (5 فولت) وESP32 (3.3 فولت) معًا — وESP32 هو المضيف الأفضل للرسوم واللمس وWi-Fi. عمليًّا ستقابل أربعة أنواع: OLED أحادية اللون، وTFT ملوّنة، وTFT لمسيّة، ولوحة E-Ink. إليك بالضبط كيف يُوصَّل كلٌّ منها وأوّل أسطر الكود لتشغيله.

شاشاتOLEDTFTلمسE-InkESP32
أربعة أنواع شاشات لـ ESP32 وArduino: OLED وTFT ملوّنة وTFT لمسيّة وE-Ink
أربع شاشات، أربع مهامّ — اختر حسب الناقل واللون وسرعة التحديث والطاقة.

ما زلت تختار؟ الدليل الشقيق يقارنها وجهًا لوجه — OLED مقابل TFT مقابل E-Paper مقابل Nextion. وهذه الصفحة هي النصف العمليّ: التوصيل وكود يعمل لكلٍّ منها.

النوعالشرائحالناقلاللونالتحديثالأنسب لـ
OLEDSSD1306 · SH1106I²Cأحاديسريعساعات، حالة، واجهات صغيرة
TFT ملوّنةST7789 · ILI9341 · ST7735SPI65kسريعلوحات، رسوم بيانيّة، صور
TFT لمسيّةILI9341 + XPT2046SPI (+لمس)65kسريعمنزل ذكيّ، أجهزة تحكّم
E-InkWaveshare · GDEHSPIأحادي / قليلبطيءلافتات بطاريّة، ملصقات، ساعات

١. OLED (SSD1306 / SH1106) — سلكان، وأسود حقيقيّ

شاشة OLED الكلاسيكيّة 0.96" تتكلّم I²C، فتحتاج فقط سلكَي إشارة — SDA وSCL إضافةً إلى الطاقة. تباين عالٍ (البكسل مُطفأ فعلًا، بلا إضاءة خلفيّة)، واستهلاك ضئيل، وثمن زهيد. تكفي 128×64 بكسل لبضعة أسطر نصّ أو رسم صغير — مثاليّة للساعات والطقس وسطر حالة Wi-Fi/IP. وSH1106 بديل شبه مطابق (إزاحة أعمدة صغيرة تعالجها المكتبة تلقائيًّا).

شاشة OLED SSD1306 موصّلة بـ ESP32 عبر I²C: SDA وSCL و3V3 وGND
سلكان مع الطاقة. I²C الافتراضيّ على ESP32 هو SDA = GPIO21 وSCL = GPIO22. مبنيّ في BoardLab.
#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
}

٢. TFT ملوّنة (ST7789 / ILI9341 / ST7735) — لون كامل عبر SPI

تمنحك TFT الملوّنة عبر SPI 65٬000 لون وتحديثًا سريعًا بما يكفي للرسوم الحيّة والقوائم والصور — حصان العمل حين تريد لوحة حقيقيّة. تكلّف أطرافًا أكثر من I²C (SCK وMOSI وDC وCS وRES + الإضاءة الخلفيّة)، والإضاءة تسحب تيّارًا دائمًا، لكن المقابل واجهة كاملة. المكتبة المعتمدة هي TFT_eSPI، وتُضبط الأطراف مرّة واحدة في User_Setup.h. غالبًا تُسمّي الوحدات الرخيصة SCK/MOSI بـ SCL/SDA — هو نفسه SPI، لكن طباعة مربكة.

TFT ملوّنة ST7789 موصّلة بـ ESP32 عبر SPI: SCL وSDA وRES وDC والإضاءة الخلفيّة و3V3 وGND
شاشة SPI: الساعة والبيانات وDC وRES على أطراف GPIO؛ الإضاءة إلى 3V3.
#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
}

٣. TFT لمسيّة (ILI9341 + XPT2046) — شاشة تلمسها

أضِف طبقة لمس فتصير TFT سطح تحكّم: لوحات منزل ذكيّ، منظّمات حرارة، أجهزة تحكّم يدويّة. النقطة الجديرة بالمعرفة: الشاشة ومتحكّم اللمس XPT2046 يتقاسمان ناقل SPI نفسه (SCK/MOSI/MISO)؛ لا تحتاج شريحة اللمس سوى T_CS الخاصّ بها وT_IRQ اختياريّ (مقاطعة). هكذا يبقى عدد الأطراف معقولًا. وCheap Yellow Display الشهيرة هي هذا تمامًا: ESP32 + ILI9341 مقاس 2.8" + XPT2046 على لوحة واحدة.

TFT لمسيّة ILI9341 على ESP32: الشاشة ولمس XPT2046 على ناقل SPI واحد، مع T_CS وT_IRQ منفصلين
ناقل SPI واحد للشريحتين — الإضافيّ فقط T_CS وT_IRQ.
#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
  }
}

٤. E-Ink (E-Paper) — تسحب الطاقة عند التغيّر فقط

E-Ink بطلة الاستقلاليّة: تسحب التيّار فقط أثناء تحديث الصورة، ثمّ تحتفظ بالصورة مجّانًا — وتُقرأ بوضوح تحت الشمس المباشرة كالورق. مثاليّة لملصقات الأسعار ولافتات الغرف والتقاويم والساعات البطيئة التي تعمل شهورًا من خليّة واحدة. العيب هو التحديث: يستغرق التحديث الكامل من مئات الأجزاء من الثانية إلى ثانيتين وكثيرًا ما يومض، فلا مجال للحركة. يُوصَّل عبر SPI شبيهًا بـ TFT، مع خطّ BUSY تُرجعه اللوحة إلى المتحكّم. المكتبة الشائعة هي GxEPD2.

لوحة E-Paper موصّلة بـ ESP32 عبر SPI: DIN وCLK وCS وDC وRST ومدخل BUSY
SPI مع طرف BUSY ترفعه اللوحة أثناء إعادة الرسم.
#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());
}

قبل اللحام

أمران يوفّران أكثر المتاعب. أوّلًا مستوى المنطق: طرف ESP32 هو 3.3 فولت، ومعظم الوحدات مناسبة، لكن شاشة 5 فولت فقط من Arduino في الاتجاه العكسيّ تحتاج انتباهًا. ثانيًا الأطراف: قد تحجز شاشة ملوّنة أو لمسيّة نصف أطراف GPIO، فخطّطها قبل التوصيل — خصوصًا في لوحات «الكلّ في واحد» حيث تملك الشاشة أصلًا أغلب المشبك. ارسم التوصيلات في BoardLab أوّلًا لترى الأطراف المتبقّية.

وصّل شاشتك بصريًّا، ثمّ انظر أيّ أطراف GPIO تبقى للحسّاسات.