كيفية استخدام برتكول I2C لربط شاشة الكرستال مع ESP32 على الاردوينو IDE اكتب تعليقُا

تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث الحرائق أو غيرها لا سمح الله.

ـ

يوضح هذا المشروع كيفية استخدام شاشة I2C LCD (شاشة الكريستال السائل) مع ESP32 باستخدام الاردوينو IDE . سنعرض لك كيفية توصيل الشاشة وتجربة نموذج التعليمات البرمجية لكتابة نص على شاشة LCD .

شاشة الكريستال السائل 16 × 2 I2C

في هذا المشروع ، سنستخدم شاشة LCD مقاس 16 × 2 I2C ، ولكن يجب أن تعمل شاشات LCD بأحجام أخرى أيضًا .

i2c_LCD

ميزة استخدام شاشة I2C LCD هي أن الأسلاك بسيطة للغاية . تحتاج فقط إلى سلك دبابيس SDA و SCL .

بالإضافة إلى ذلك ، يأتي مزودًا بمقياس بجهد مدمج يمكنك استخدامه لضبط التباين بين الخلفية على شاشة LCD . على شاشات الكريستال السائل “العادية” تحتاج إلى إضافة الجهد إلى الدائرة لضبط التباين .

lcd_adjust_pot

منتجات المشروع

لمتابعة هذا المشروع ، تحتاج إلى هذه الأجزاء :
  • لوحة ESP32 DOIT DEVKIT V1
  • لوحة تجارب صغيرة
  • عدد 10 اسلاك توصيل علي حسب الحاجة
  • شاشة عرض LCD مع برتوكول

يمكنك استخدام المنتجات الخاصة بالمشروع أدناه أو الذهاب مباشرة إلى متجر أنا الكتروني  للعثور على جميع الأجزاء لمشاريعك بأفضل سعر !

Untitled2

توصيل شاشات الكريستال السائل إلى ESP32

تستخدم هذه الشاشة اتصال I2C ، مما يجعل الأسلاك بسيطة للغاية .

I2C_LCD2

قم بتوصيل شاشة LCD الخاصة بك إلى ESP32 باتباع الرسم التخطيطي التالي . نحن نستخدم دبابيس I2C الافتراضية ESP32 (GPIO 21 و GPIO 22) .

esp32_LCD_bb

يمكنك أيضًا استخدام الجدول التالي كمرجع .

Untitled

الحصول على عنوان LCD

قبل عرض النص على شاشة LCD ، تحتاج إلى العثور على عنوان I2C LCD . باستخدام شاشة LCD السلكية بشكل صحيح إلى ESP32 ، قم بتحميل كود I2C Scanner التالي .

لتحميل الكود البرمجي اضغط هنا
#include <Wire.h>
 
void setup() {
  Wire.begin();
  Serial.begin(115200);
  Serial.println("\nI2C Scanner");
}
 
void loop() {
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address<16) {
        Serial.print("0");
      }
      Serial.println(address,HEX);
      nDevices++;
    }
    else if (error==4) {
      Serial.print("Unknow error at address 0x");
      if (address<16) {
        Serial.print("0");
      }
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  }
  else {
    Serial.println("done\n");
  }
  delay(5000);          
}

بعد تحميل الكود ، افتح جهاز التحكم التسلسلي بمعدل سرعة 115200 . اضغط على زر ESP32 EN . يجب عرض عنوان I2C في جهاز العرض التسلسلي .

scan_i2c

في هذه الحالة ، يكون العنوان 0x27 . إذا كنت تستخدم شاشة عرض 16 × 2 مماثلة ، فربما تحصل على نفس العنوان .

عرض نص ثابت على شاشات الكريستال السائل

عرض النص الثابت على شاشة LCD بسيط للغاية . كل ما عليك فعله هو تحديد المكان الذي تريد عرض الأحرف فيه على الشاشة ، ثم أرسل الرسالة إلى الشاشة .

إليك مثال كود بسيط للغاية يعرض “Hello، World!” .

لتحميل الكود البرمجي اضغط هنا
#include <LiquidCrystal_I2C.h>

// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;

// set LCD address, number of columns and rows
// if you don't know your display address, run an I2C scanner sketch
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);  

void setup(){
  // initialize LCD
  lcd.init();
  // turn on LCD backlight                      
  lcd.backlight();
}

void loop(){
  // set cursor to first column, first row
  lcd.setCursor(0, 0);
  // print message
  lcd.print("Hello, World!");
  delay(1000);
  // clears the display to print new message
  lcd.clear();
  // set cursor to first column, second row
  lcd.setCursor(0,1);
  lcd.print("Hello, World!");
  delay(1000);
  lcd.clear(); 
}

يعرض الرسالة في الصف الأول ، ثم في الصف الثاني .

static-text

عرض النص التمرير على شاشات الكريستال السائل

يكون تمرير النص على شاشة LCD مفيدًا بشكل خاص عندما تريد عرض رسائل أطول من 16 حرفًا . تأتي المكتبة مع وظائف مدمجة تسمح لك بتمرير النص . ومع ذلك ، يواجه العديد من الأشخاص مشاكل مع هذه الوظائف بسبب :

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

يعرض الكود التالي رسالة ثابتة في الصف الأول ورسالة تمرير أطول من 16 حرفًا في الصف الثاني .

تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.
لتحميل الكود البرمجي اضغط هنا
#include <LiquidCrystal_I2C.h>

// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;

// set LCD address, number of columns and rows
// if you don't know your display address, run an I2C scanner sketch
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);  

String messageStatic = "Static message";
String messageToScroll = "This is a scrolling message with more than 16 characters";

// Function to scroll text
// The function acepts the following arguments:
// row: row number where the text will be displayed
// message: message to scroll
// delayTime: delay between each character shifting
// lcdColumns: number of columns of your LCD
void scrollText(int row, String message, int delayTime, int lcdColumns) {
  for (int i=0; i < lcdColumns; i++) {
    message = " " + message;  
  } 
  message = message + " "; 
  for (int pos = 0; pos < message.length(); pos++) {
    lcd.setCursor(0, row);
    lcd.print(message.substring(pos, pos + lcdColumns));
    delay(delayTime);
  }
}

void setup(){
  // initialize LCD
  lcd.init();
  // turn on LCD backlight                      
  lcd.backlight();
}

void loop(){
  // set cursor to first column, first row
  lcd.setCursor(0, 0);
  // print static message
  lcd.print(messageStatic);
  // print scrolling message
  scrollText(1, messageToScroll, 250, lcdColumns);
}
scrolling-text

أنتهت !!!

اترك تعليقاً



لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *