به نام خدا
مقدمه
در جلسه قبل به آموزش نحوه اتصال و برنامه نویسی نمایشگر SSD1306 به رزبری پای پیکو پرداختیم. در این جلسه قصد داریم به نحوه اتصال و برنامهنویسی نمایشگر رنگی ILI9341 به رزبری پای پیکو (Raspberry Pi Pico) بپردازیم.
نمایشگر LCD با درایور ILI9341 یک نمایشگر رنگی با کیفیت است که در ابعاد گوناگون ساخته میشود. مدل 320 در 240 آن در چندین اندازه مختلف ساخته شده و در این آموزش از مدل 2.8 اینچی این نمایشگر استفاده میکنیم. نمایشگری که در این آموزش استفاده میکنیم بدون تاچ است.
نصب درایور نمایشگر ili9341 برای رزبری پای و میکروپایتون
در حال حاضر هیچ درایوری در مخزن رسمی میکروپایتون برای این نمایشگر وجود ندارد و باید از کتابخانه های شخص ثالث استفاده کنیم. ما در این آموزش از کتابخانهای در آدرس:
https://github.com/rdagger/micropython-ili9341
استفاده میکنیم. وارد آدرس بالا شده و کل محتوای پوشه را دانلود و سپس Unzip کنید.
برد رزبری پای پیکو را به کامپیوتر متصل کرده و سپس Thonny IDE را باز کنید و از منوی View روی Files کلیک کنید تا مطابق شکل زیر فایلهای داخل کامپیوتر و پیکو مشاهده شود و از قسمت بالا یعنی This Computer پوشه کتابخانه ILI9341 را باز کنید:
در قسمت پایین یعنی Raspberry Pi Pico یک پوشه با نام images ایجاد کنید و وارد آن شوید. سپس در بخش بالا وارد پوشه images شوید و فقط روی فایل RaspberryPiWB128x128.raw راست کلیک کرده و گزینه Upload to را کلیک کنید تا عکس مورد نظر در پوشه images پیکو کپی شود. سپس از پوشه images از کامپیوتر و رزبری خارج شوید. اینبار کل پوشه fonts را به رزبری انتقال دهید، چون قرار است که پوشه با تمام محتوای داخل آن انتقال داده شود کافیست روی نام پوشه در بخش بالا (کامپیوتر) راست کلیک کرده و گزینه Upload to را بزنید تا پوشه به طور کامل به پیکو منتقل شود. از فایلهای py نیز همه را به غیر از فایلهایی که پیشوند Demo دارند به پیکو انتقال دهید. فایلهای demo مثالهای کاربردی هستند که در صورت تمایل میتوانید آنها را نیز انتقال دهید. سپس در محیط IDE یک فایل جدید ایجاد کرده و به نام دلخواه مثلا main.py یا main2.py ایجاد کرده و کدهای زیر را در آن وارد کنید. همانطوریکه از جلسه قبل به یاد دارید فایل main.py با روشن شدن رزبری پیکو به صورت خودکار اجرا میشود.
داخل پوشه Utils یک اسکریپت پایتون به نام img2rgb565.py وجود دارد که با کمک آن میتوانید فایلهای png خود را به raw تبدیل و برای نمایش در این LCD آماده کنید. مثلا برای فایلی به اسم ali.png دستور را بصورت زیر در CMD کامپیوتر بنویسید:
python img2rgb565.py ali.png
کد اصلی برنامه:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
from machine import Pin, SPI import ili9341 import time from xglcd_font import XglcdFont import os def freeMem(): stats = os.statvfs('/') total = stats[0] * stats[2] free = stats[0] * stats[3] used = total - free print("Total storage:", total, "bytes") print("Used:", used, "bytes") print("Free:", free, "bytes") def test(): spi = SPI(0, baudrate=40000000, sck=Pin(18), mosi=Pin(19)) display = ili9341.Display(spi, dc=Pin(16), cs=Pin(17), rst=Pin(20), width=240, height=320) display.draw_image('images/RaspberryPiWB128x128.raw', 0, 0, 128, 128) display.draw_text8x8(10, 150, "ili9341 LCD by Pico", ili9341.color565(0, 255, 0)) display.draw_text8x8(10, 160, "Micropython", ili9341.color565(255, 255, 255)) display.draw_text8x8(10, 170, "AVR64.com", ili9341.color565(255, 0, 0)) display.draw_text(160, 30, "320", XglcdFont('fonts/EspressoDolce18x24.c', 18, 24),ili9341.color565(242, 121, 242)) display.draw_text(170, 60, "x", XglcdFont('fonts/EspressoDolce18x24.c', 18, 24),ili9341.color565(250, 146, 55)) display.draw_text(160, 90, "240", XglcdFont('fonts/EspressoDolce18x24.c', 18, 24),ili9341.color565(55, 243, 250)) display.draw_text(1, 200, "ILI9341", XglcdFont('fonts/Dejavu24x43.c', 24, 43),ili9341.color565(255, 255, 255)) display.draw_text(1, 270, "AVR64.com", XglcdFont('fonts/Dejavu24x43.c', 24, 43),ili9341.color565(255, 255, 0)) #time.sleep(5) #display.clear() freeMem() test() |
در این کد در ابتدا کلاسهای Pin و SPI از ماژول machine به برنامه افزوده شدهاند. سپس کلاس ili9341 که فایل آن را در داخل روت رزبری کپی کردیم به پروژه افزوده میشود. بعد از آن کلاس time را اضافه میکنیم که برای ایجاد delay یا تاخیر از آن استفاده خواهیم کرد. سپس کلاس XglcdFont از ماژول xglcd_font اضافه شده و در نهایت کلاس os را به پروژه اضافه میکنیم. این کلاس os خاص این پروژه نیست و برای نمایش میزان حافظه مصرف شده و باقی مانده پیکو از آن استفاده خواهیم کرد.
در متن اصلی برنامه دو تابع نوشتهایم: freeMem و test
تابع freeMem از کلاس os برای نمایش میزان حافظه فلش مصرف شده و باقیمانده استفاده میکند، موقع اجرای برنامه میتوانید در کنسول پایین صفحه خروجی آن را مشاهده کنید. پیشنهاد میشود این تابع را به همین شکلی که هست در ابتدای تمام پروژههای خود قرار دهید.
تابع بعدی تابع test است. در این تابع در ابتدا پورت SPI با سرعت 40 مگ روی پایههای 18 و 19 برد باز شده است. دقت کنید منظور از پایه 18 یعنی GP18 یا همان پایه فیزیکی 24:
در تابع بعدی یک شی از نمایشگر با معرفی پایههای کنترلی و ارجاع به SPI ایجاد شده است. همچنین طول و عرض نمایشگر را نیز تنظیم کرده ایم که برای این نمایشگر 320×240 پیکسل است. کار تعریف نمایشگر در اینجا به پایان میرسد. از اینجا به بعد برای نوشتن در نمایشگر یا نمایش عکس می توانیم از توابع شی display استفاده کنیم.
مثلا برای نمایش عکس از تایع draw_image استفاده میکنیم و برای نوشتن متن بصورت ساده با فونت کوچک داخلی پایتون از تابع draw_text8x8 بهره میبریم. برای نمایش متن با فونت دلخواه نیز میتوان از تابع draw_text استفاده کرد، دقت کنید این تابع بسیار کند است و برای نمایش فونتهای بزرگ به چند ثانیه زمان نیاز دارد.
شماتیک
برای اتصال LCD با چیپ درایور ili9341 به رزبری پای پیکو (Raspberry Pi Pico) از این نقشه شماتیک استفاده کنید. با توجه به اینکه این نمایشگر 3.3 ولت است و سطح منطقی تمام پایههای پیکرو نیز 3.3 میباشد نیازی به مقاومت یا مبدل سطح منطقی نیست.
نتیجه گیری:
در این آموزش یاد گرفتیم که چگونه السیدی رنگی ILI9341 را به برد رزبری پای پیکو متصل کنیم و در آن عکس و متن نمایش دهیم. در جلسات بعدی انشاءالله به راه اندازی بخشهای دیگر این میکروکنترلر قدرتمند و اتصال سایر ماژولهای کاربردی به آن خواهیم پرداخت.
منبع:
Connect an SPI LCD Display to Your Raspberry Pi Pico Using MicroPython – ILI9341 Driver
بازدیدها: 1