شما به اینترنت متصل نیستید.
ارتباط I2C بین بردهای آردوینو
نویسنده:
امتیاز دهید

ارتباط I2C بین بردهای آردوینو

شاید گاهی اوقات ما بخواهیم حجم کاری برد آردوینو را با بردهای دیگر به اشتراک بگذاریم. یا شاید ما می‌خواهیم پین‌های دیجیتال یا آنالوگ بیشتری داشته باشیم. در این حالت بهترین راه‌حل استفاده از ارتباط I2C است. در این پروژه از برد آردوینو استفاده شده است. در صورتی که به آردوینو علاقه‌مند هستید، می‌توانید آموزش کامل آردوینو (مبتدی و پیشرفته) را مطالعه کنید.

ارتباط I2C یک پروتکل جالب است که معمولاً برای ارتباط بین قطعات در مادربردها، دوربین‌ها و یا هر سیستم الکترونیکی استفاده می‌شود. در این آموزش ما قصد داریم تا از این پروتکل ارتباطی برای ارتباط میان دو برد آردوینو استفاده کنیم.

در این آموزش یک برد آردوینو که برد راهبر یا مستر (Master) است را برنامه‌نویسی می‌نماییم تا به برد آردوینو دیگر که برد رهرو یا اسلیو (Slave) خوانده می‌شود فرمان بدهد که LED داخلی استفاده‌شده در برد را بسته به فرمان و مقدار دریافتی از برد آردوینو مستر با چه سرعتی روشن و خاموش کند.

برای این منظور به قطعات زیر نیاز است.

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

برد آردوینو Arduino UNO R3
برد آردوینو UNO R3 + کابل USB
2 عدد
سیم اتصال به برد بورد 65 تایی
1 عدد

شماتیک مداری

طبق شکل نشان داده‌شده و شماتیک مداری، پین‌های A4 و A5 هر برد آردوینو را به همان پین از برد آردوینو دیگر متصل کنید و پین GND هر دو برد باید مشترک باشد. پس آن پین را هم برای هر دو برد به یکدیگر متصل کنید.

فقط توجه داشته باشید که پین‌های 3.3 و 5 ولت بردها را هیچ‌وقت به یکدیگر متصل نکنید چراکه باعث آسیب رساندن به پورت 3.3 ولتی بردها می‌شود.

برنامه‌نویسی

برای این آموزش، همان‌طور که پیش‌تر گفتیم دو برد آردوینو مستر و اسلیو به کار گرفته‌شده است؛ بنابراین، برای هر یک برنامه متناسب با خود آن باید نوشته شود. برنامه نوشته‌شده برای برد آردوینو مستر به‌صورت زیر است:

// Include the required Wire library for I2C<br>#include <Wire.h>

int x = 0;

void setup() {

  // Start the I2C Bus as Master

  Wire.begin();

}

void loop() {

  Wire.beginTransmission(9); // transmit to device #9

  Wire.write(x);              // sends x

  Wire.endTransmission();    // stop transmitting

  x++; // Increment x

  if (x > 5) x = 0; // `reset x once it gets 6

  delay(500);

{

در این برنامه به این صورت عمل شده است که ابتدا کتابخانه را با دستور زیر فراخوانی می‌کنیم:

#include <Wire.h>

سپس، در قسمت Setup function ارتباط I2C را با دستور Wire.begin() شروع می‌کنیم. این دستور به این صورت است که اگر در داخل پرانتز این تابع آرگومانی قرار نگیرد، برد به‌عنوان برد مستر تلقی می‌شود. درنهایت یک کاراکتر x که بین 0 و 5 است را ارسال می‌کنیم. ما از توابع زیر برای شروع انتقال به برد آردوینو دیگر با آدرس 9، نوشتن کاراکتر و سپس توقف انتقال استفاده کردیم:

Wire.beginTransmission(9); // transmit to device #9

Wire.write(x);             // sends x

Wire.endTransmission();    // stop transmitting

حال برنامه برد آردوینو اسلیو را در ادامه می‌نویسیم که فرامین ارسالی از برد مستر را تفسیر می‌کند:

// Include the required Wire library for I2C<br>#include <Wire.h>

int LED = 13;

int x = 0;

void setup() {

  // Define the LED pin as Output

  pinMode (LED, OUTPUT);

  // Start the I2C Bus as Slave on address 9

  Wire.begin(9);

  // Attach a function to trigger when something is received.

  Wire.onReceive(receiveEvent);

}

void receiveEvent(int bytes) {

  x = Wire.read();    // read one character from the I2C

}

void loop() {

  //If value received is 0 blink LED for 200 ms

  if (x == '0') {

    digitalWrite(LED, HIGH);

    delay(200);

    digitalWrite(LED, LOW);

    delay(200);

  }

  //If value received is 3 blink LED for 400 ms

  if (x == '3') {

    digitalWrite(LED, HIGH);

    delay(400);

    digitalWrite(LED, LOW);

    delay(400);

  }

}

در این برنامه هم ابتدا کتابخانه I2C را فراخوانی می‌کنیم ولی برای شروع ارتباط این بار دستور Wire.begin(9) را وارد می‌کنیم. شماره 9 به‌کاررفته در این دستور آدرسی است که ما به این برد آردوینو اسلیو داده‌ایم تا با آن شناخته شود. تمامی دستگاه‌های با آدرس 9 می‌توانند فرامین ارسالی از برد مستر را بگیرند.

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

Wire.onReceive(receiveEvent);

و تابع مدنظر به‌صورت زیر است که در اینجا ما می‌خواهیم فقط مقدار کاراکتر دریافتی را ذخیره کند:

void receiveEvent(int bytes) {

   x = Wire.read();

}

در قسمت loop() برنامه هم ما فقط گفته‌ایم که بسته با مقدار کاراکتر دریافتی LED قرارگرفته روی برد آردوینو اسلیو به چه سرعتی خاموش و روشن شود.

اطلاعات بیشتر درباره ارتباط I2C

برای دریافت اطلاعات بیشتر در رابطه با ارتباط I2C می‌توانید به آموزش "آشنایی با پروتکل های ارتباطی: درس سوم(I2C)" مراجعه کنید. ولی به‌طور خلاصه باید گفت که ارتباط I2C به دو خط دیجیتال نیاز دارد که یک خط آن Serial Data line (SDA) برای انتقال اطلاعات و خط دیگر Serial Clock Line (SCL) برای کلاک یا زمان است. در هر ارتباط I2C می‌توان یک برد مستر و چندین برد اسلیو داشته باشیم. برد مستر می‌تواند فرامین را به بردهای اسلیو بفرستد و یا از آن‌ها درخواست اطلاعات کند. ولی هیچ برد اسلیوی نمی‌تواند به‌طور مستقیم به برد مستر یا بردهای اسلیو دیگر فرمانی را صادر کند. هر برد اسلیو هم آدرس مخصوص به خود را دارد که برد آردوینو مستر برای ارتباط با آن‌ها نیاز به داشتن آن آدرس دارد.

هر ارتباط I2C تا 112 دستگاه را می‌تواند به یکدیگر ارتباط دهد که همگی با زمین یا پورت GND مشترکی داشته باشند و با سرعت 100 kb/s می‌توانند با یکدیگر در ارتباط باشند که سرعت زیادی نیست ولی قابل‌قبول و بسیار قابل‌استفاده است. امکان وجود و استفاده از چند مستر هم وجود دارد که خیلی پیچیده است.

بیشتر سنسورهای موجود از ارتباط I2C می‌توانند استفاده کنند ولی توجه شود که این ارتباط برای استفاده از سیم‌های بلند و ارتباطات طویل ساخته نشده است که با توجه به نوع کابل ارتباط کمتر از 2 متر مناسب است.

تمامی بردهای آردوینو دارای پروتکل ارتباط I2C هستند که فقط شماره پین‌های آن‌ها با یکدیگر متفاوت است که به شرح زیر می‌باشد:

Uno, Pro Mini A4 (SDA), A5 (SCL)

Mega, Due 20 (SDA), 21 (SCL)

Leonardo, Yun 2 (SDA), 3 (SCL)

اگر نیاز به ارتباط تعداد بردهای بیشتری داشتید هم فقط کافی است تا خط‌های SDA و SCL آن‌ها را به یکدیگر وصل کنید و آدرس هر یک را به برد مستر بدهید.

نظرات شما باعث بهبود محتوای آموزشی ما می‌شود. اگر این آموزش را دوست داشتید، همین‌طور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.

ترجمه شده توسط تيم اتومی | منبع: سايت instructables

مطالب مرتبط

معرفی و راه‌اندازی انواع IMU با آردوینو آردوینو

معرفی و راه‌اندازی انواع IMU با آردوینو

در این آموزش یک ابزار مهم برای موقعیت یابی به نام IMU را معرفی و نحوه راه اندازی آن با آردوینو را بررسی می‌کنیم.
2 سال قبل
آموزش جامع راه‌اندازی GPIO رزبری‌پای رزبری پای

آموزش جامع راه‌اندازی GPIO رزبری‌پای

شاید در نگاه اول، عنوان این آموزش ساده و پیش پا افتاده به نظر بیاد. اما بهترین کار برای یادگیری و انجام پروژه در زمینه‌های مختلف، شروع کردن از پایه و...
2 سال قبل
ساخت دنبال کننده خورشید با آردوینو و با کمترین هزینه پایگاه دانش

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

آموزش ساخت پنل خورشیدی متحرک با آردوینو و کمترین هزینه! با استفاده از دو سروو موتور و سنسورهای فتوسل، پنل خورشیدی را بر اساس موقعیت خورشید تنظیم کنید و بازدهی انرژی را افزایش دهید.
2 ماه قبل
چطور یک آردوینو بسازیم! پایگاه دانش

چطور یک آردوینو بسازیم!

آیا می‌خواهید برد آردوینو خودتان را بسازید؟ در این راهنما یاد می‌گیرید چگونه با هزینه کم یک برد آردوینو سفارشی بسازید و آن را در پروژه‌های الکترونیکی خود استفاده کنید.
2 ماه قبل
ربات هوشمند آردوبات پایگاه دانش

ربات هوشمند آردوبات

با ساخت ربات هوشمند آردوبات، لذت خلاقیت را تجربه کنید! این ربات با قابلیت تشخیص موانع و تغییر مسیر، یک پروژه جذاب برای علاقه‌مندان به رباتیک و آردوینو است. همین حالا شروع کنید!
2 ماه قبل
آموزش آردوینو: درس پانزدهم (موتور DC - بخش دوم) آردوینو

آموزش آردوینو: درس پانزدهم (موتور DC - بخش دوم)

سری آموزش آردوینو: درس پانزدهم در این درس شما یاد خواهید گرفت که چگونه جهت چرخش و سرعت یک موتور DC کوچک را از طریق برد آردوینو و تراشه درایور موتور L2...
2 سال قبل
آموزش آردوینو: درس چهاردهم (سروو موتور) آردوینو

آموزش آردوینو: درس چهاردهم (سروو موتور)

سری آموزش آردوینو: درس چهاردهم در این درس یادخواهید گرفت که چگونه یک سروو موتور را توسط آردوینو کنترل کنید. آموزش آردوینو: درس سیزدهم(موتورDC-یخش اول)...
2 سال قبل
ساخت اهم متر توسط آردوینو آردوینو

ساخت اهم متر توسط آردوینو

مقاله ای که می خوانید، یک پروژه بسیار مفید و در عین حال ساده و قابل انجام توسط آردوینو می باشد. اگر برای تشخیص مقدار مقاومت از روی خواندن رنگ های روی...
2 سال قبل
اندازه گیری ظرفیت خازن توسط آردوینو آردوینو

اندازه گیری ظرفیت خازن توسط آردوینو

در این پروژه ظرفیت خازن را از سه طریق اندازه گیری خواهید کرد. خازن ها در اندازه ها و فرم های مختلف با نوشته های متفاوتی بر روی آنها در دسترس هستند، که...
2 سال قبل
فهرستی از محبوب‌ترین شیلدهای آردوینو آردوینو

فهرستی از محبوب‌ترین شیلدهای آردوینو

صدها شیلد مختلف برای بردهای آردوینو وجود دارد که همه آن‌ها برد آردوینو شما را بیش از یک برد توسعه‌یافته با LED چشمک‌زن تبدیل می‌کنند. در این پروژه از...
2 سال قبل
تاکنون هیچ نظری ثبت نشده است.
برای ثبت نظر وارد حساب کاربری خود شوید.