مكتبة وكود أردوينو لشاشة LCD2004 عبر واجهة I2C
في هذا الدرس، سنستعرض كيفية استخدام شاشة LCD2004 مع بروتوكول الاتصال I2C. يتيح هذا الإعداد عرض النص عبر أربعة أسطر، مما يجعله مثالياً لتطبيقات متعددة. سنغطي التوصيلات اللازمة، ومقتطفات الشيفرة، وكيفية تنفيذ الوظائف بفعالية.

سنستخدم مكتبة LiquidCrystal_I2C لإدارة شاشة LCD. تُبسط هذه المكتبة التفاعل مع الشاشة عبر التعامل مع اتصال I2C نيابةً عنك. للحصول على فهم شامل، تأكد من مشاهدة الفيديو للإرشاد البصري (في الفيديو عند 00:00).
شرح الأجهزة
المكوّن الأساسي لهذا المشروع هو شاشة LCD2004، التي تتميز بـ20 عمودًا و4 صفوف لإخراج النصوص. تتواصل عبر I2C، مما يتيح عددًا أقل من الاتصالات مقارنةً بالوصلات المتوازية التقليدية. هذا يجعلها مناسبة للمشاريع ذات توفر محدود للأطراف على الأردوينو.
تستخدم واجهة I2C خطين، SDA (خط البيانات) وSCL (خط الساعة)، واللذان يتصلان بالدبابيس المقابلة على لوحة Arduino. كما أن شاشة LCD تحتاج أيضاً إلى توصيلات للطاقة والأرضي. في هذا الإعداد سنقوم بتوصيل الشاشة بمصدر طاقة 5 فولت، والذي يمكن توفيره مباشرةً من لوحة Arduino.
تفاصيل ورقة البيانات
| المصنّع | عام |
|---|---|
| رقم القطعة | شاشة LCD2004 |
| جهد المنطق/الإدخال والإخراج | 5 فولت |
| جهد التغذية | 5 فولت |
| تيار الإخراج (لكل قناة) | عادةً 20 mA |
| التيار الأقصى (لكل قناة) | عادةً 40 mA |
| إرشادات تردد PWM | غير متاح |
| عتبات منطق الإدخال | 0.3 Vcc (منخفض)، 0.7 Vcc (مرتفع) |
| هبوط الجهد / Rالمصرف-المصدر أثناء التشغيل/ التشبع | عادةً 0.2 فولت |
| الحدود الحرارية | 0°C إلى 50°C |
| حزمة | شاشة LCD قياسية 4x20 |
| ملاحظات / متغيرات | متوفر بخيارات إضاءة خلفية مختلفة |
- تأكد من وجود مصدر طاقة مناسب لتجنب التلف.
- استخدم مقاومات سحب على خطوط SDA وSCL إذا لزم الأمر.
- تحقق من عنوان I2C؛ عادةً ما يكون 0x27 لهذه الشاشة.
- اجعل الوصلات قصيرة لتقليل التداخل.
- تأكد من تثبيت المكتبة بشكل صحيح قبل رفع الكود.
تعليمات التوصيل
لتوصيل شاشة LCD2004 عبر I2C بالأردوينو، اتبع التوصيلات التالية:
- قم بتوصيل الـ
VCCدبوس شاشة الـLCD إلى الـ5Vدبوس على الأردوينو. - قم بتوصيل الـ
GNDدبوس شاشة LCD إلى aGNDدبوس على الأردوينو. - قم بتوصيل الـ
SDAدبوس شاشة LCD إلى الـA4دبوس على الأردوينو. - قم بتوصيل الـ
SCLدبوس شاشة LCD إلى الـA5دبوس على لوحة الأردوينو.
إذا كانت لوحة Arduino لديك تحتوي على دبابيس I2C مختلفة، فتأكد من تعديل التوصيلات وفقاً لذلك. كما يوضح الفيديو أيضاً تكوين توصيل بديل (في الفيديو عند 01:30).

أمثلة على الشيفرة ودليل إرشادي خطوة بخطوة
دعنا نلقي نظرة على مثال بسيط لتهيئة شاشة LCD وعرض رسالة. المقتطف التالي يقوم بإعداد شاشة LCD ويطبع "Hello, world!" على الشاشة.
lcd.begin(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight
lcd.print("Hello, world!"); // Display message
يقوم هذا الكود بتهيئة شاشة LCD وتفعيل الإضاءة الخلفية. ثم يعرض الرسالة على السطر الأول من شاشة LCD. الإضاءة الخلفية ضرورية للرؤية في ظروف الإضاءة المنخفضة.
بعد ذلك، سنفحص مثالًا أكثر تعقيدًا يعرض بيانات ديناميكية، مثل قراءات الجهد.
lcd.setCursor(0,0); // Set cursor to the first line
lcd.print("Voltage: "); // Display voltage label
float v = 8.254; // Example voltage value
lcd.print(v); // Print voltage value
في هذا المقتطف، نضبط موضع المؤشر على السطر الأول ونطبع تسمية الجهد متبوعة بالقيمة الفعلية له. يتيح لك ذلك عرض القياسات في الوقت الحقيقي بطريقة سهلة الاستخدام.

للحصول على وظائف إضافية، يمكنك تنفيذ إدخال تسلسلي يتيح للمستخدمين إدخال أحرف عبر المراقب التسلسلي وعرضها على شاشة LCD.
if (Serial.available()) { // Check for serial input
lastChar = Serial.read(); // Read the last character
lcd.write(lastChar); // Display character on LCD
}
يتحقق هذا الكود مما إذا كانت هناك بيانات متاحة على المنفذ التسلسلي. إذا كان الأمر كذلك فإنه يقرأ الحرف الأخير المدخل ويعرضه على شاشة LCD. يعزز هذا التفاعل تجربة المستخدم من خلال السماح بعروض ديناميكية بناءً على مدخلات المستخدم.
للاطلاع على الشيفرة الكاملة، يرجى الرجوع إلى البرنامج الكامل المحمّل أسفل المقالة.
عرض توضيحي / ما الذي تتوقعه
عند تشغيل الكود، يجب أن ترى الرسالة الأولية معروضة على شاشة LCD، تليها قراءات الجهد وأي أحرف تم إدخالها عبر المراقب التسلسلي. تأكد من أن التوصيلات محكمة لتجنب أي مشاكل في العرض. إذا لم تُظهر شاشة LCD أي شيء، فراجع الأسلاك وعنوان I2C مرة أخرى (في الفيديو عند 02:15).
/*
* Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
*
* Updated by Ahmad Shamshiri on July 8, 2018 at 19:14 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
*
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup()
{
// initialize the LCD
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
lcd.print("Hello, world!");
}
void loop()
{
// Do nothing here...
}
/*
*
* * Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
* This code is basic usage of an LCD2004 display with I2C.
* It will display text in 4 lines, each with 20 characters.
* It displays multiple float values and text on the same line.
*
*
*
* Updated by Ahmad Shamshiri on July 08, 2018 at 09:20 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
*
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
// initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("Robojax LCD2004 Test");
lcd.setCursor (0,1); //
lcd.print("Please Wait - 3");
lcd.setCursor (0,1); //
delay(1000);
lcd.print("Please Wait - 2");
delay(1000);
lcd.setCursor (0,1); //
lcd.print("Please Wait - 1");
delay(1000);
}
void loop() {
// Robojax.com LCD2004 with I2C custom code
lcd.clear();// clear previous values from screen
lcd.setCursor (0,0); //character zero, line 1
lcd.print("LCD2004 I2C Example"); // print text
lcd.setCursor (4,1); //character 4, line 2
lcd.print("Robojax.com"); // print text
lcd.setCursor (0,2); //character 0, line 3
lcd.print("Voltage: "); // print text
float v = 8.254;// define or get voltage
char VoltageStr[5];
dtostrf(v, 5, 3, VoltageStr );
lcd.setCursor (9,2); //character 9, line 3
lcd.print(VoltageStr); // print voltage
lcd.setCursor (14,2); //character 14, line 3
lcd.print("V"); // print V at the end of voltage
lcd.setCursor (0,3); //character 0, line 4
lcd.print("X: "); // print x
float xdeg = -123.87;// define or get x degree (just example)
lcd.setCursor (3,3); //character 8, line 3
lcd.print(xdeg); // print xdeg value
lcd.setCursor (12,3); //character 12, line 4
lcd.print("Y: "); // print Y
float ydeg = 32.8;// define or get y degree (just example)
lcd.setCursor (15,3); //character 15, line 4
lcd.print(ydeg); // print ydeg value
delay(100);
}// loop end
/*
*
* Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
* This code is basic usage of an LCD2004 display with I2C
* It will display a blinking cursor on the screen
*
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
*
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup()
{
// initialize the LCD
lcd.begin();
}
void loop()
{
bool blinking = true;
lcd.cursor();
while (1) {
if (blinking) {
lcd.clear();
lcd.print("No cursor blink");
lcd.noBlink();
blinking = false;
} else {
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Your name: ");
lcd.blink();
blinking = true;
}
delay(4000);
}
}
/*
*
* Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
* This code is basic usage of an LCD2004 display with I2C.
* This code will allow you to enter a character on the serial monitor and display it on the screen.
*
* Updated by Ahmad Shamshiri on July 08, 2018 at 09:20 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
*
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
char lastChar ='_';
void setup()
{
lcd.begin();
lcd.backlight();
lcd.print("Robojax.com Test");
// Initialize the serial port at a speed of 9600 baud
Serial.begin(9600);
}
void loop()
{
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Enter Letter: ");
lcd.setCursor(13,1);
// If characters arrived over the serial port...
if (Serial.available()) {
// Wait a bit for the entire message to arrive
delay(100);
// Write all characters received via the serial port to the LCD.
while (Serial.available() > 0) {
lastChar =Serial.read();
Serial.print("Entered: ");
Serial.println(lastChar);
}//while end
}// if end
lcd.write(lastChar);// display last entered character
delay(1000);
}// loop end
الموارد والمراجع
-
خارجياحصل على المكتبة من جيت هابgithub.com
-
خارجيمولد الشخصيات (GitHub)maxpromer.github.io
-
خارجيمولد الشخصيات (المصدر الثاني)omerk.github.io
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
مكتبة LCD1602 لـ Arduino من Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB