چگونه آدرس‌های I²C را تنظیم کنیم و از یک اسکنر I²C برای LCD1602 و LCD2004 استفاده کنیم

چگونه آدرس‌های I²C را تنظیم کنیم و از یک اسکنر I²C برای LCD1602 و LCD2004 استفاده کنیم

در این آموزش، نحوهٔ تنظیم آدرس‌های I²C و استفاده از اسکنر I²C برای نمایشگرهای LCD1602 و LCD2004 را بررسی خواهیم کرد. درک ارتباط I²C برای یکپارچه‌سازی این ماجیول‌های LCD با پروژه‌های آردوینو شما حیاتی است و امکان انتقال داده و کنترل مؤثر را فراهم می‌کند. در پایان این راهنما، شما قادر خواهید بود آدرس‌های I²C نمایشگرهای LCD خود را به‌طور مؤثر شناسایی کرده و از عملکرد صحیح آن‌ها اطمینان حاصل کنید.

LCD1602-I2C display module with 4 wires

در این پروژه از حساس(حس کننده) BMP-180 استفاده خواهیم کرد که از طریق ارتباط I²C کار می‌کند. این حساس(حس کننده) مقادیر دما و فشار را فراهم می‌کند که می‌توان آن‌ها را روی LCD1602 یا LCD2004 نمایش داد. این آموزش شامل دستورالعمل‌های سیم‌کشی، نمونه‌های شِفر (کود) و نمایش نتایج مورد انتظار خواهد بود. برای درک بصری‌تر، حتماً ویدیوی مرتبط را مشاهده کنید (در ویدیو در 00:00).

سخت‌افزار به زبان ساده

اجزای اصلی این پروژه شامل حساس(حس کننده) BMP-180، نمایشگر LCD1602 یا LCD2004 و یک برد آردوینو هستند. BMP-180 یک حساس(حس کننده) فشار دیجیتال است که از طریق پروتکل I²C ارتباط برقرار می‌کند و تنها به دو خط داده نیاز دارد: SDA (خط داده) و SCL (خط ساعت). نمایشگرهای LCD نیز با I²C سازگارند و می‌توان آن‌ها را به‌راحتی با استفاده از همان پروتکل کنترل کرد، که امکان راه‌اندازی مرتب و کارآمد را فراهم می‌کند.

حساس(حس کننده) BMP-180 با ولتاژ تغذیه بین 1.8V و 3.6V کار می‌کند، یعنی اگر از منبع ولتاژ بالاتری استفاده می‌کنید می‌توان آن را از طریق رگولاتور ولتاژ تغذیه کرد. نمایشگرهای LCD از طرف دیگر معمولاً با 5V کار می‌کنند، که اتصال آن‌ها به برد آردوینو را بدون نیاز به قطعات اضافی آسان می‌کند.

جزئیات دیتاشیت

تولیدکننده بوش
شماره قطعه BMP-180
ولتاژ منطق/ورودی‌خروجی 1.8 - 3.6 V
ولتاژ تغذیه 1.8 تا 3.6 V
جریان خروجی (به ازای هر کانال) 3.6 میکروآمپر
جریان پیک (برای هر کانال) 1 میلی‌آمپر
راهنمای فرکانس PWM قابل اعمال نیست
آستانه‌های منطقی ورودی مربوط نیست
افت ولتاژ / Rدرین-سورس (روشن)/ اشباع قابل اعمال نیست
محدودیت‌های حرارتی -40 تا +85 °C
بسته 3.6 × 3.8 میلی‌متر
یادداشت‌ها / واریانت‌ها حساس(حس کننده) دما و فشار

  • از تأمین ولتاژ مناسب اطمینان حاصل کنید: 1.8V تا 3.6V برای BMP-180.
  • برای ارتباط I²C پایدار، از مقاومت‌های پول‌آپ روی خطوط SDA و SCL استفاده کنید.
  • برای جلوگیری از تضعیف سیگنال، سیم‌ها را کوتاه نگه دارید.
  • در هنگام اسکن، از صحیح بودن آدرس I²C اطمینان حاصل کنید.
  • محدوده دمایی قابل‌پایش: -40 تا +85 °C برای BMP-180.

دستورالعمل‌های سیم‌کشی

Arduino wirng for LCD1602 with I2C
Arduino wirng for LCD1602 with I2C

برای سیم‌کشی حساس(حس کننده) BMP-180 و نمایشگر LCD به آردوینو خود، مراحل زیر را دنبال کنید:

ابتدا، اتصالات BMP-180 را برقرار کنیدVnپایه را به خروجی 5V روی آردوینو متصل کنید. سپس،GNDپایهِ BMP-180 به زمینِ آردوینو. اینSDAپایه BMP-180 باید به پایه آردوینو متصل شود.A4پایه، در حالی کهSCLپایه متصل بهA5.

برای LCD1602 یا LCD2004، وصل کنیدVCCپایه را به 5V روی آردوینو وGNDپایه را نیز به زمین متصل کنید. اینSDAپایهِ نمایشگر LCD همچنین باید بهA4(که با BMP-180 مشترک است)، وSCLپایه باید به ... متصل شودA5.

این پیکربندی به هر دو دستگاه امکان می‌دهد روی همان باس I²C با یکدیگر ارتباط برقرار کنند و یک راه‌اندازی تمیز و کارآمد را تضمین می‌کند.

نمونه‌های شِفر (کود) و راهنمای گام‌به‌گام

برای اسکن آدرس‌های I²C، از یک قطعه شِفر (کود) ساده استفاده خواهیم کرد. بخش زیر ارتباط I²C را مقداردهی اولیه می‌کند و نمایشگر مسلسل را آماده می‌کند:


#include 

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial); // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}

این شِفر (کود) کتابخانه Wire را برای ارتباط I²C مقداردهی اولیه می‌کند و نمایشگر مسلسل را برای خروجی تنظیم می‌کند. این برای اشکال‌زدایی و اطمینان از شناسایی دستگاه‌های I²C ضروری است.

تابع loop دستگاه‌ها را روی گذرگاه I²C اسکن می‌کند و آدرس‌های آن‌ها را چاپ می‌کند:


void loop() {
  byte error, address;
  int nDevices = 0;
  Serial.println("Scanning...");

  for(address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      Serial.println(address, HEX);
      nDevices++;
    }
  }
  if (nDevices == 0) Serial.println("No I2C devices found\n");
  delay(5000); // wait 5 seconds for next scan
}

این حلقه هر آدرس را از 1 تا 127 بررسی می‌کند و سعی می‌کند با هر دستگاه موجود ارتباط برقرار کند. اگر دستگاهی ارتباط را تأیید کند، آدرس آن در نمایشگر مسلسل چاپ می‌شود. این یک مرحلهٔ حیاتی برای شناسایی آدرس I²C ال‌سی‌دی یا سایر دستگاه‌های متصل است.

نمایش / آنچه باید انتظار داشته باشید

هنگامی که اسکنر I²C اجرا می‌شود، باید پیام‌هایی را در نمایشگر مسلسل ببینید که نشان می‌دهد آیا دستگاه‌های I²C پیدا شده‌اند یا خیر. در صورت موفقیت، خروجی آدرس دستگاه‌های متصل را به‌صورت مقادیر هگزادسیمال نمایش می‌دهد (مثلاً دستگاه I²C در آدرس 0x27 پیدا شد). اگر هیچ دستگاهی پیدا نشود، پیامی متناظر نمایش داده خواهد شد.

مهم است اطمینان حاصل شود که همهٔ اتصالات محکم باشند و سطوح ولتاژ صحیح تأمین شود تا از بروز مشکلات در شناسایی دستگاه جلوگیری شود (در ویدیو در 05:30).

تصاویر

Arduino wirng for LCD1602 with I2C
Arduino wirng for LCD1602 with I2C
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD2004_display-1
LCD2004_display-1
LCD2004_display-2
LCD2004_display-2
I2C_module
I2C_module
125-Arduino code for finding an I2C address
زبان: C++
کپی شد!

مواردی که ممکن است به آن‌ها نیاز داشته باشید

منابع و مراجع

هنوز هیچ منبعی موجود نیست.

فایل‌ها📁

کتابخانه‌های آردوینو (zip)

فایل فریزینگ