آموزش رزبری پای

کاراکتر سفارشی و اسکرول متن در LCD با رزبری پای

هنگامی که ما در مورد ارتباط نمایشگرها با میکروکنترلرها برای یک پروژه صحبت می کنیم، ال سی دی های کاراکتری متداول ترین نمایشگرها هستند و معمولاً مبتنی بر درایور Hitachi HD44780 هستند. آنها LCD های کم مصرف و قوی هستند که قادر به نمایش کاراکترهای مختلف میباشند. در این مقاله، ما یک ال سی دی کاراکتری  20×4 مبتنی بر HD44780 را به رزبری پای 4 وصل می کنیم. همچنین سعی می کنیم یک رشته، متن اسکرول، ایجاد کاراکترهای سفارشی جدید و موارد دیگر را در LCD نمایش دهیم.

در این آموزش، شما استفاده از توابع مختلف کتابخانه منبع باز RPLCD از PyPI را یاد می گیرید. علاوه بر این، می توانید توابع سفارشی خود را مانند اسکرول متون، کاراکترهای سفارشی و … ایجاد کنید.

ابتدا بخوانید: راه اندازی LCD کاراکتری با رزبری پای و کد پایتون

قطعات مورد نیاز

من از رزبری پای 4 برای این پروژه استفاده می کنم شما می توانید از هر بردی استفاده کنید، همچنین در هنگام خرید ال سی دی سعی کنید ال سی دی اصلی هیتاچی HD44780 را خریداری کنید تا بتوانیم به استحکام قطعات خود اعتماد کنیم.

قطعه تعداد
رزبری پای 4 1
20*4 ال سی دی 1
سیم جامپر به تعداد لازم

مدار اتصال LCD 4*20 به رزبری پای

در تصویر زیر میتوانید اتصالات را مشاهده کنید.

مدار اتصال LCD 4*20 به رزبری پای

تصویر بالا اتصالات LCD I2C به Raspberry Pi 4 را به شما نشان می دهد.

تصویر زیر اتصالات واقعی Pi و LCD را نشان می دهد که من برای این آموزش انجام داده ام.

اتصالات واقعی Pi و LCD

تصویر زیر نشان میدهد که هر کاراکتر (هر بلوک) شامل 8 ردیف و 5 ستون است.

ویژگی هر کاراکتر ال سی دی

ماژول I2C Expender PCF8574

ماژول I2C Expender PCF8574

ال سی دی کاراکتری 20*4

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

ال سی دی کاراکتری 20*4

این ال سی دی دارای یک مدار درایور HD44780 است که مانند قلب ال سی دی عمل می کند. ما از این ال سی دی در حالت I2C برای انتقال استفاده می کنیم. اگر ماژول I2C را ندارید میتوانید با توجه به جدول زیر اتصالات را انجام دهید.

LCD Pin Pi GPIO Pin
RS 15
RW 18
E 16
Data 4 21
Data 5 22
Data 6 23
Data 7 24

نصب کتابخانه RPLCD

برای این آموزش، من از RPLCD از PyPI استفاده می کنم، می توانید با نوشتن دستور زیر آن را با استفاده از pip نصب کنید.

Sudo pip install RPLCD

اگر از ماژول I2C استفاده می کنید، باید Python-SMBUS را برای رابط آن با LCD نصب کنید. می توانید از دستور زیر برای اینکار استفاده کنید.

sudo apt install python-smbus

یا

sudo pip install smbus2

RPLCD موارد لازم را به صورت خودکار دریافت می کند. در اینجا به محض اینکه کتابخانه را با موفقیت نصب کردید، از شما خواسته می شود که آدرس i2c و expender را تنظیم کنید.

در اینجا ما از LCD در حالت 4 بیتی استفاده می کنیم که i2c فقط در آن حالت کار می کند. اگر نمیخواهید از ارتباط I2C استفاده کنید از ارتباط مستقیم با GPIO ها استفاده کنید.

کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است

کد نوشتن متن روی ال سی دی

اکنون زمان چاپ “Hello world” بر روی LCD کاراکتری است، برای انجام این کار باید یک فایل پایتون جدید ایجاد کنید. کد زیر را برای چاپ اولین رشته خود بر روی LCD بنویسید.

from RPLCD import *
from time import sleep
from RPLCD.i2c import CharLCD
lcd = CharLCD('PCF8574', 0x27)

در اینجا می توانید ببینید که RPLCD حاوی i2c.py است و با وارد کردن آن، تمام متدهای نوشته شده در “i2c.py” را فرخوانی می کنید .حالا در آرگومان موجود در CharLCD() می توانید نام I2C و آدرس آن را تنظیم کنید. آدرس برای ماژول من 0x27 است و از PCF8574 استفاده می کند.

lcd.cursor_pos = (0, 0)
lcd.write_string('Hello World')

با نوشتن کد بالا می توانید هر رشته ای را چاپ کنید. فقط رشته را در lcd.write_string() بنویسید، می توانید موقعیت رشته را با تابع cursor_pos(m,n) تنظیم کنید که m ردیف است و n شماره ستون است.
به یاد داشته باشید که شما فقط می توانید متن را در قالب رشته چاپ کنید زیرا تابع lcd.write_string() فقط می تواند رشته را نمایش دهد نه مقدار عددی را، بنابراین برای چاک کردن اعداد ابتدا باید آن ها را به رشته تبدیل کنید.

کد نوشتن متن روی ال سی دی

کد برای اسکرول متن روی LCD

ما میتوانیم با اسکرول کردن، متن های طولانی را روی ال سی دی نمایش دهیم.

framebuffer = [
        '',
        '',
        ]
def write_to_lcd(lcd, framebuffer, num_cols):
        """Write the framebuffer out to the specified LCD."""
        lcd.home()
        for row in framebuffer:
            lcd.write_string(row.ljust(num_cols)[:num_cols])
            lcd.write_string('\r\n')
def long_text(text):
        if len(text)<20:
            lcd.write_string(text)      
        for i in range(len(text) - 20 + 1):
            framebuffer[1] = text[i:i+20]
            write_to_lcd(lcd, framebuffer, 20)
            sleep(0.2)

در کد بالا از روش فریم بافر (framebuffer) برای نمایش رشته های طولانی استفاده می کنیم. اکنون برای چاپ متن طولانی می توانید از تابع زیر استفاده کنید:

lcd.cursor_pos = (1, 0)
long_text('This is a long Scrolling text')

با این کار متن اسکرول شونده روی خط دوم LCD چاپ می‌شود.

کد برای اسکرول متن روی LCD

کد ایجاد کاراکتر جدید در LCD

ما می‌توانیم با استفاده از تابع create_char(location,bitmap_tuple) کاراکترهای خودمان را برای LCD خود ایجاد کنیم.

در اینجا location، مکان حافظه کاراکتر است، و bitmap_tuple، اطلاعات باینری است که در 5 بیت ذخیره می شود. در اینجا 5 و 8 مجموعه کاراکترهای 5X8 را نشان می دهد زیرا LCD ما دارای 20×4 کاراکتر است و هر کاراکتر از 5×8 پیکسل تشکیل شده است.

ال سی دی ما دارای حافظه ایجاد 8 کاراکتر سفارشی جدید است که هر کدام را می توان در هر یک از آدرس های x00 تا x07 ذخیره کرد.

Locked = (
  0b00000,
  0b01110,
  0b10001,
  0b10001,
  0b11111,
  0b11111,
  0b11011,
  0b11111
)
Un_Locked = (
  0b00000,
  0b01110,
  0b00001,
  0b00001,
  0b11111,
  0b11111,
  0b11011,
  0b11111
)

در کد بالا، ما اطلاعات بیت مپ خود را برای علامت قفل و باز اعمال میکنیم.

lcd.create_char(0, Locked)

با خط کد بالا، کاراکتر را در مکان 0 ذخیره کرده ایم.

lcd.cursor_pos = (2, 4)
lcd.write_string(‘\x00’)

در اینجا ما علامت Locked را در مکان (2،4) چاپ می کنیم. امیدواریم یاد گرفته باشید که چگونه یک کاراکتر سفارشی روی LCD ایجاد کنید.

کد ایجاد کاراکتر جدید در LCD

کد نمایش انیمیشن شارژ باتری

در کد پیش رو سعی می کنیم انیمیشن شارژ شدن باتری بسازیم.

battery_EMP = (
  0b00000,
  0b01110,
  0b11111,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b11111
)
battery_HLF = (
  0b00000,
  0b01110,
  0b11111,
  0b10001,
  0b10001,
  0b11111,
  0b11111,
  0b11111
)
battery_FULL = (
  0b00000,
  0b01110,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111
)

اعلام اطلاعات باینری کاراکترها،

lcd.create_char(2, battery_EMP)
lcd.create_char(3, battery_HLF)
lcd.create_char(4, battery_FULL)
while 1:
    lcd.cursor_pos = (0, 0)
    lcd.write_string('Battery Charging')   
    lcd.cursor_pos = (0, 19)
    lcd.write_string(‘\x02’)
    sleep(.4)
    lcd.cursor_pos = (0, 19)
    lcd.write_string(‘\x03’)
    sleep(.4)
    lcd.cursor_pos = (0, 19)
    lcd.write_string(‘\x04’)
    sleep(.6)

در کد بالا مشاهده میکنید که مکان یکسان است اما کاراکتر سفارشی تغییر میکند.

کد نمایش انیمیشن شارژ باتری

کد برای ایجاد کاراکتر سفارشی بزرگ

ابتدا کاراکترهای صورت را در چهار قطعه ایجاد می کنیم، یعنی Bottom Left LB، Left Top LT، Right Top RT، Right Bottom RB. در اینجا من از یک ابزار آنلاین برای ایجاد این کاراکتر استفاده کرده ام. شما می توانید از هر کدام از ابزار های آنلاین استفاده کنید.

face_LB=(
  0b10000,
  0b10100,
  0b10011,
  0b10000,
  0b11100,
  0b11111,
  0b01111,
  0b00111
)
face_LT=(
  0b10111,
  0b10111,
  0b01000,
  0b01000,
  0b10000,
  0b10001,
  0b10001,
  0b10000
)
face_RT=(
  0b10101,
  0b11101,
  0b00010,
  0b00010,
  0b00001,
  0b10001,
  0b10001,
  0b00001
)
face_RB=(
  0b00001,
  0b00101,
  0b11001,
  0b00001,
  0b01111,
  0b11111,
  0b11110,
  0b11100
)
lcd.create_char(4, face_LT)
lcd.create_char(5, face_RT)
lcd.create_char(6, face_LB)
lcd.create_char(7, face_RB)
lcd.cursor_pos = (0, 0)
lcd.write_string('Our Custom Character')
lcd.cursor_pos = (2, 4)
lcd.write_string('\x04')
lcd.cursor_pos = (2, 5)
lcd.write_string('\x05')
lcd.cursor_pos = (3, 4)
lcd.write_string('\x06')
lcd.cursor_pos = (3, 5)
lcd.write_string('\x07')

ما با استفاده از 4 کاراکتر یک کاراکتر بزرگ ساخته ایم که می توان از آن برای چاپ یک کاراکتر متحرک استفاده کرد.

کد برای ایجاد کاراکتر سفارشی بزرگ

ما تنظیمات اولیه ارتباط 20×4 LCD در ارتباط i2C را با Raspberry Pi انجام دادیم، همچنین با ایجاد کاراکتر در LCD آشنا شدیم.

موارد موجود در فایل : سورس

دانلود فایل های پروژه

5/5 - (1 امتیاز)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام آیرنکس را دنبال کنید.
تصویر از محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.