راه اندازی LCD کاراکتری توسط رزبری پای
LCD کاراکتری با رزبری پای پایتون
با توجه به محبوبیت گسترده زبان برنامه نویسی پایتون، در بسیاری از پروژه ها نیاز به راه اندازی LCD کاراکتری به زبان پایتون و روی رزبری پای خواهیم داشت. با دنبال کردن مراحل گفته شده در این مقاله به سادگی خواهید توانست این کار را انجام داده و در پروژه های مختلف استفاده کنید. پس با ما همراه باشید.
در این برنامه از کتابخانه RPLCD استفاده شده و نشان خواهیم داد که چگونه ال سی دی را در حالت ۴ بیتی راه اندازی کنیم یا ۸ بیتی. همچنین نحوه اتصال نمایشگر به رزبری پای و نحوه نصب کتابخانه مربوط به آن را توضیح خواهیم داد. سپس یاد خواهیم گرفت برای نمایش متن و یا جابجا کردن آن روی نمایشگر باید چه مراحلی را انجام دهیم. در ادامه همچنین آموزشهای جذابی خواهیم داشت از قبیل نحوه پیمایش متن روی LDC، ایجاد کاراکترهای خاص، نمایش اطلاعات خوانده شده توسط سنسور و نمایش تاریخ و ساعت و همچنین IP آدرس مربوط به برد رزبری پای!
در اینجا صفحه نمایش LCD 16X2 به کار گرفته شده است، اما توضیحات برای هر LCD که از درایور Hitachi HD44780 استفاده می کند، درست است.
اتصال LCD
دو راه برای اتصال LCD به رزبری پای وجود دارد: حالت 4 بیت یا حالت 8 بیت. حالت 4 بیتی از 6 پایه GPIO استفاده می کند، در حالی که حالت 8 بیتی از 10 پایه استفاده می کند. با توجه به اینکه حالت ۴ بیتی از پین های کمتری استفاده می کند، رایج ترین روش است، اما نحوه تنظیم و برنامه ریزی LCD را به هر دو صورت توضیح خواهیم داد.
هر کاراکتر و فرمان به عنوان یک بایت (8 بیت) داده به LCD ارسال می شود. در حالت 8 بیتی، بایت به یکباره از طریق 8 سیم داده، یعنی یک بیت روی هر سیم، ارسال می شود. در حالت 4 بیتی، بایت به دو مجموعه 4 بیتی تقسیم می شود: بیت های بالایی و بیت های پایینی، که یکی پس از دیگری از طریق 4 سیم داده ارسال می شوند.
از نظر تئوری، حالت 8 بیتی داده ها را تقریباً دو برابر سریعتر از حالت 4 بیتی انتقال می دهد، زیرا کل بایت به یکباره ارسال می شود. با این حال، درایور LCD برای پردازش داده ها زمان نسبتاً طولانی تری طول می کشد، بنابراین زیاد مهم نیست که از کدام حالت استفاده می شود، عملاً تفاوتی در سرعت انتقال داده بین حالت های 8 بیتی و 4 بیتی احساس نخواهیم کرد.
سیم بندی LCD کاراکتری در حالت ۸ بیتی:
LCD کاراکتری با رزبری پای پایتون
سیم بندی LCD کاراکتری در حالت ۴ بیتی:
LCD کاراکتری با رزبری پای پایتون
از پتانسیومترهای 10 کیلو اهمی برای تنظیم روشنایی پس زمینه، و کاراکترها استفاده شده است اما میتوان آنها را با مقاومتهای 1 تا 3 کیلو اهمی جایگزین کرد.
برنامه نویسی LCD توسط پایتون
همانطور که گفته شد از کتابخانه پایتون با نام RPLCD استفاده خواهیم کرد که توابع مفید زیادی را ارائه می دهد.
نصب کتابخانه RPLCD
کتابخانه RPLCD را می توان از طریق Python Package Index یا pip نصب کرد. اگر pip قبلا روی رزبری پای نصب نشده، برای نصب آن عبارت زیر را در خط فرمان وارد کنید:
sudo apt-get install python-pip
حالا با وارد کردن عبارت زیر میتوانید کتابخانه مربوط به LCD را نصب کنید:
sudo pip install RPLCD
مثالهایی که در ادامه خواهید دید از اعداد پین فیزیکی Raspberry Pi استفاده می کنند، نه از اعداد BCM یا GPIO. فرض بر اینست که LCD خود را همانطور که در شکلهای بالا معرفی کردیم وصل کردهاید، اما در صورت نیاز نشان خواهیم داد که چگونه اتصالات پینها را تغییر دهید.
نوشتن روی LCD در حالت ۸ بیتی
بیایید با یک برنامه ساده شروع کنیم که عبارت “Hello world!” را روی LCD چاپ کند. د راینجا ازLCD با سایز 16×2 استفاده شده است. اگر ال سی دی با اندازه متفاوتی (مانند 20×4) دارید، تعداد ستون ها و ردیف ها را در خط دوم کد تغییر دهید. cols تعداد ستون ها و rows تعداد سطرها را تعیین می کند. همچنین می توانید پین های استفاده شده برای پین های RS، E و داده ال سی دی را تغییر دهید. پین های داده به صورت pins_data=[D0, D1, D2, D3, D4, D5, D6, D7] تنظیم می شوند.
رشته های متنی با استفاده از تابع lcd.write_string() روی نمایشگر نوشته می شوند:
from RPLCD import CharLCD
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[40, 38, 36, 32, 33, 31, 29, 23])
lcd.write_string(u’Hello world!’)
نوشتن روی LCD در حالت ۸ بیتی
در حالت 4 بیتی، فقط از پین های D4، D5، D6 و D7 برای داده استفاده می شود که در pins_data=[D4, D5, D6, D7] به صورت زیر تنظیم میشوند:
from RPLCD import CharLCD
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
lcd.write_string(u’Hello world!’)
تنظیم مکان نمایش متن روی LCD
متن را می توان با استفاده از lcd.cursor_pos = (ROW, COLUMN) در هر نقطه از صفحه نمایش قرار داد. سطرها با شروع از صفر شماره گذاری می شوند، بنابراین ردیف بالا ردیف شماره صفر و ردیف پایین ردیف شماره ۱ است. به عنوان مثال، در کد زیر عبارت “Hello World!” از ردیف پایین، ستون چهارم شروع می شود:
from RPLCD import CharLCD
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
lcd.cursor_pos = (1, 3)
lcd.write_string(u’Hello world!’)
پاک کردن صفحه نمایش
تابع lcd.clear() صفحه را پاک می کند. درکد زیر عبارت “Hello World!” قبل از پاک کردن صفحه به مدت دو ثانیه نمایش داده خواهد شد:
import time from RPLCD
import CharLCD
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
lcd.write_string(u’Hello world!’)
time.sleep(2)
()lcd.clear
چشمک زدن متن
ترکیب lcd.clear و time.sleep در یک حلقه while یک افکت متنی چشمک زن ایجاد می کند:
import time from RPLCD
import CharLCD
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
:while True
lcd.write_string(u”Hello world!”)
time.sleep(1)
()lcd.clear
time.sleep(1)
برای خروج از برنامه Ctrl+C را فشار دهید.
روشن و خاموش کردن (چشمک زدن) مکان نما
کتابخانه RPLCD چندین عملکرد را برای کنترل مکان نما ارائه می دهد. میتوانید مکاننمای بلوک، مکاننمای زیرخط یا مکاننمای چشمکزن داشته باشید. برای تنظیم مکان نما از توابع زیر استفاده کنید:
چشمک زن بعد از بلوک: lcd.cursor_mode = CursorMode.blink
چشمک زن بعد از خط: lcd.cursor_mode = CursorMode.line
خاموش کردن چشمک زن: lcd.cursor_mode = CursorMode.hide
کد زیر مکان نما چشمک زن را بعد از آخرین کاراکتر متن قرار می دهد:
from RPLCD import CharLCD
from RPLCD import CursorMode
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
lcd.write_string(u’Hello world!’)
lcd.cursor_mode = CursorMode.blink
lcd.cursor_mode = CursorMode.line#
lcd.cursor_mode = CursorMode.hide#
رفتن به خط جدید
اگر طول متن از طول ستون LCD شما بیشتر باشد، متن به طور خودکار به خط بعدی میرود. همچنین میتوانید با درج \n\r جایی که میخواهید شکستن رخ دهد، کنترل کنید که ادامه رشته متن در خط بعدی نوشته شود. کد زیر “Hello” را در ردیف بالا و “world!” را در ردیف پایین چاپ می کند.
from RPLCD import CharLCD
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
lcd.write_string(u’Hello\n\rworld!’)
نمایش تاریخ و زمان
کد زیر تاریخ و زمان را بر روی LCD نمایش می دهد:
from RPLCD import CharLCD
import time
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
:while True
lcd.write_string(“Time: %s” %time.strftime(“%H:%M:%S”))
lcd.cursor_pos = (1, 0)
lcd.write_string(“Date: %s” %time.strftime(“%m/%d/%Y”))
چاپ آدرس IP روی نمایشگر
این برنامه آدرس IP اتصال اترنت شما را روی LCD چاپ می کند. برای چاپ IP اتصال WiFi خود، کافی است به صورت کد زیر eth0 را به wlan0 تغییر دهید:
from RPLCD import CharLCD
import socket
import fcntl
import struct
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
:def get_ip_address(ifname)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
(return socket.inet_ntoa(fcntl.ioctl
,()s.fileno
,0x8915
struct.pack(‘256s’, ifname[:15])
([20:24](
lcd.write_string(“IP Address:”)
lcd.cursor_pos = (1, 0)
lcd.write_string(get_ip_address(‘eth0’))
نمایش کاراکترهای سفارشی
هر کاراکتر روی LCD آرایه ای از 5×8 پیکسل است. شما می توانید هر الگو یا شخصیتی را که فکر می کنید ایجاد کنید و آن را به عنوان یک کاراکتر سفارشی روی صفحه نمایش دهید. آدرس این وبسایت را برای ابزار تعاملی که آرایه بیتی را برای تعریف کاراکترهای سفارشی ایجاد می کند، بررسی کنید.
ابتدا کاراکتر را در خطوط 4 تا 12 کد زیر تعریف می کنیم. سپس از تابع lcd.create_char(0-7, NAME)، برای ذخیره کاراکتر در حافظه CGRAM LCD استفاده می کنیم. حداکثر 8 کاراکتر (0-7) را می توان در یک زمان ذخیره کرد. برای چاپ کاراکتر سفارشی، از lcd.write_string(unichr(0)) استفاده می کنیم، که در آن عدد در unichr() محل حافظه (0-7) تعریف شده در lcd.create_char() است.
نمایش یک کاراکتر سفارشی
به این کد نگاهی بیندازید که یک کاراکتر صورتک را روی نمایشگر چاپ می کند:
from RPLCD import CharLCD
, cleared, cursor lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23]) smiley = ( 0b00000, 0b01010, 0b01010, 0b00000, 0b10001, 0b10001, 0b01110, 0b00000, )
lcd.create_char(0, smiley)
lcd.write_string(unichr(0))
چاپ اطلاعات خوانده شده توسط سنسور
برای نشان دادن نحوه چاپ داده ها از یک سنسور، در اینجا برنامه ای وجود دارد که دما خوانده شده توسط سنسور دمای دیجیتال DS18B20 را نمایش می دهد. قبل از اینکه بتوانید این کار را روی Raspberry Pi انجام دهید، کارهایی وجود دارد که باید انجام دهید، بنابراین مقاله مربوط به DS18B20 را بررسی کنید تا ببینید چگونه باید تنظیمات را انجام دهید.
به طور کلی، متغیر ورودی را از حسگر می گیریم و آن را برای انجام هر محاسباتی به عدد صحیح تبدیل می کنیم. سپس نتیجه را به یک رشته تبدیل کرده و با استفاده از lcd.write_string(sensor_data()) رشته را به نمایشگر درمی آوریم:
مطالبی که گفته شد تقریباً بیشتر مواردی را که برای شروع برنامه نویسی LCD با پایتون نیاز دارید پوشش می دهد. سعی کنید برنامه ها را با هم ترکیب کنید تا جلوه های جالبی به دست آورید. میتوانید با چاپ و پاک کردن صفحه یا قرار دادن متن، دادههای چند سنسور را نمایش دهید. همچنین می توانید با اسکرول کاراکترهای سفارشی انیمیشن های سرگرم کننده بسازید!
هر سه شنبه با مقالات رزبری پای همراه توسکانیک باشید
منبع: https://www.circuitbasics.com/