class SPIDisplay -- مشغّل عرض SPI

تشغّل الفئة SPIDisplay لوحات TFT وOLED الصغيرة المتصلة عبر SPI -- وأكثرها شيوعًا شاشة SSD1351 128x160 RGB OLED على OpenMV LCD Shield. يمتلك المشغّل ناقل SPI ودبوس GPIO لاختيار الشريحة / خط DC داخليًا، لذا لا يحتاج المستدعون سوى إلى تهيئة هندسة اللوحة ومعدل التحديث وأي أعلام اتجاه. تُورَّد تهيئة اللوحة الخاصة (تسلسلات السجلات، تأطير الكتابة إلى RAM) عبر الوسيط المفتاحي controller -- مرّر نسخة SSD1351 لتشغيل LCD Shield، أو نفّذ فئة متحكم خاصة بك للوحات أخرى.

تُعرَض الإطارات باستدعاء write() مع كائن image.Image. يحوّل المشغّل المصدر إلى RGB565 ويطبّق التحجيم ومنطقة الاهتمام واللوحة اللونية وتحويلات الاتجاه داخليًا، لذا لا يحتاج المستدعي إلى ضبط حجم الصورة مسبقًا. يمكن ترك سطوع الإضاءة الخلفية كدبوس GPIO بسيط بنظام تشغيل/إطفاء (افتراضيًا) أو تشغيله عبر DACBacklight / PWMBacklight بتمرير أحدها كوسيط مفتاحي backlight.

مثال -- عكس الكاميرا على شاشة SSD1351 OLED الخاصة بـ OpenMV LCD Shield:

import csi
import display

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize((128, 160))        # matches the SSD1351 panel

lcd = display.SPIDisplay(controller=display.SSD1351())

while True:
    lcd.write(csi0.snapshot())

المُنشئات

class display.SPIDisplay(width: int = 128, height: int = 160, refresh: int = 60, bgr: bool = False, byte_swap: bool = False, hmirror: bool = True, vflip: bool = True, triple_buffer: bool | None = None, *, controller: object | None = None, backlight: object | None = None)

width عرض شاشة SPI LCD بالبكسل (1..32767).

height ارتفاع شاشة SPI LCD بالبكسل (1..32767).

refresh معدل تحديث شاشة LCD بالهرتز (1..120). يتحكم في معدل ساعة SPI.

bgr اضبطه على True لتبديل قناتي الأحمر والأزرق.

byte_swap اضبطه على True لتبديل بايتات بكسل RGB565 المرسلة إلى شاشة LCD.

hmirror اضبطه على True لعكس خرج العرض أفقيًا.

vflip اضبطه على True لقلب خرج العرض رأسيًا.

triple_buffer إذا كان True فإنه يجعل تحديثات الشاشة غير حاجبة مقابل استهلاك ثلاثة أضعاف حجم العرض في ذاكرة RAM. تعتمد القيمة الافتراضية على اللوحة (مفعّلة للوحات المزودة بـ SDRAM).

controller مفتاحي فقط. مرّر نسخة من فئة شريحة المتحكم لتهيئتها مع العرض. عند توفيره، تُستدعى دوال المتحكم init وdisplay_on وdisplay_off وram_write (إن وُجدت) بدلًا من الأوامر المدمجة.

backlight مفتاحي فقط. مرّر وحدة متحكم الإضاءة الخلفية لاستخدامها. افتراضيًا، يُتحكَّم في الإضاءة الخلفية عبر دبوس GPIO.

width() int

يُرجع عرض الشاشة.

height() int

يُرجع ارتفاع الشاشة.

refresh() int

يُرجع معدل التحديث.

bgr() bool

يُرجع ما إذا كانت قناتا الأحمر والأزرق مُبدَّلتين.

byte_swap() bool

يُرجع ما إذا كانت بكسلات RGB565 تُرسَل بترتيب بايتات معكوس.

triple_buffer() bool

يُرجع ما إذا كان التخزين الثلاثي مفعّلًا.

framesize() int

يُرجع معرّف framesize المُهيّأ.

write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None

يعرض image بزاويتها العلوية اليسرى عند (x, y). يمكن تمرير سلسلة مسار بدلًا من صورة لتحميلها ورسمها في خطوة واحدة.

x_scale معامل تحجيم المحور x. القيم السالبة تقلب أفقيًا. إذا حُذف y_scale، فإنه يتبع x_scale للحفاظ على نسبة العرض إلى الارتفاع.

y_scale معامل تحجيم المحور y. القيم السالبة تقلب رأسيًا (يتطلب triple_buffer=True). إذا حُذف x_scale، فإنه يتبع y_scale.

roi صفّ منطقة الاهتمام المستطيلة (x, y, w, h) من الصورة المصدر المراد رسمها.

rgb_channel قناة RGB المراد استخراجها من صورة مصدر RGB565 (0=R، 1=G، 2=B، -1=الكل). المدى: -1..2.

alpha عتامة الصورة. 0 شفافة تمامًا (سوداء)، 255 معتمة. المدى: 0..255.

color_palette تعداد للوحة لونية (مثل image.PALETTE_RAINBOW) أو صورة RGB565 من 256 بكسل تُستخدم كجدول بحث لوني على قيمة تدرج الرمادي للمصدر. تُطبَّق بعد استخراج rgb_channel.

alpha_palette صورة بتدرج الرمادي من 256 بكسل تُستخدم كجدول بحث ألفا لكل بكسل يعدّل alpha بناءً على قيمة تدرج الرمادي للمصدر.

hint OR منطقي للأعلام:

clear(display_off: bool = False) None

يمسح شاشة LCD إلى اللون الأسود.

display_off إذا كان True، يُطفئ منطق العرض بدلًا من مسح مخزن الإطارات. ينبغي أيضًا تعطيل الإضاءة الخلفية بعد ذلك.

backlight(value: int | None = None) int | None

مع value، يضبط شدة الإضاءة الخلفية (0=مطفأة..100=كاملة). دون وسائط، يُرجع قيمة الإضاءة الخلفية الحالية.

ما لم يُمرَّر متحكم DACBacklight أو PWMBacklight عند الإنشاء، تُشغَّل الإضاءة الخلفية كدبوس GPIO ولا تتجاوز 0 (مطفأة) إلى قيمة غير صفرية (مضاءة).

bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None

يرسل cmd إلى العرض عبر ناقل SPI، متبوعًا اختياريًا بـ args (بايت عدد صحيح أو مخزن مؤقت من البايتات). يختار dcs تأطير DCS عند دعمه من المتحكم.

bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytearray

يرسل cmd عبر ناقل SPI ويقرأ len بايتًا، مُرجِعًا إياها على هيئة bytearray. يُكتب args اختياريًا قبل القراءة (بايت عدد صحيح أو مخزن مؤقت من البايتات). يختار dcs تأطير DCS عند دعمه من المتحكم.

ioctl(cmd: int, arg: object | None = None) object

يصدر ioctl خاصًا بالمتحكم cmd مع arg اختياري. يُطلق ValueError إذا كان العرض الأساسي لا يدعم ioctl.