تحلیل و بررسی کتابخانه Wire.h

منبع :  دیجی اسپارک دسته بندی : اینترنت اشیا IOT کد خبر : 16594 3 سال قبل 583

این کتابخانه به شما امکان برقراری ارتباط با دستگاه های I2C / TWI را می دهد. در برد های آردوینو، SDA (data line) و SCL (clock line) در هدرهای پین نزدیک به پین AREF قرار دارند. Arduino Due دارای دو رابط I2C / TWI SDA1 و SCL1 نزدیک پین AREF است و دیگری رابط مربوط به پایه های ۲۰ و ۲۱ است. همانطور که ذکر شد هر برد آردوینو دارای پین های مربوط به i2c است که با استفاده از این کتابخانه قادر خواهیم بود، دیوایس هایی با رابط i2c را آدرس دهی و راه‌اندازی کنیم. I2C یک رابط دو سیمه با استفاده از پین های SDA و SCL  برای برقراری ارتباط از طریق رابط سریال است. I2C از یک مدل چند Master، چند Slave استفاده می کند. I2C یک رابط مشترک بین میکروکنترلر و تجهیزات جانبی مانند سنسورها و نمایشگرها است. I2C در LCD های سگمنتی و انواع مختلف سنسورها رایج است. سرعت I2C نسبت به پروتکل های دیگر کمتر است اما هنوز در برقراری ارتباط با چندین ماژول در یک رابط بسیار موثر است. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

نصب کتابخانه Wire.h

کتابخانه Wire.h از کتابخانه های پیشفرض و بیسیک آردوینو است و با نصب نرم‌افزار Arduino IDE در دسترس و قابل فراخوانی در کد شما خواهد بود. در ادامه برای دانلود نرم‌افزار Arduino IDE از لینک استفاده کنید و نسخه متناسب با OS خود را از سایت رسمی دانلود کنید. همچنین در صورت نیاز می‌توانید با استفاده از این لینک به repository آنلاین این کتابخانه در Github دسترسی داشته باشید.

 

اتصالات در برد های مختلف

یک گذرگاه I2C به دو پین برای برقراری ارتباط نیاز دارد، SCL برای سیگنال ساعت و SDA برای داده ها. از آنجا که آردوینوهای قدیمی اتصالات جداگانه ای برای این دو خط ندارند، از خط A4 و A5 در این برد ها استفاده می شود، در جدول زیر تعدادی از این نمونه را مشاهده می‌کنید.

Uno, Ethernet

A4 (SDA), A5 (SCL)

Mega2560

۲۰ (SDA), 21 (SCL)

Leonardo

۲ (SDA), 3 (SCL)
Due

۲۰ (SDA), 21 (SCL), SDA1, SCL1

 

فراخوانی کتابخانه

کتابخانه Wire از یک بافر ۳۲ بایت استفاده می کند، بنابراین هر گونه ارتباط باید در این محدوده باشد. برای استفاده از قبلیت های این کتابخانه ابتدا باید کتابخانه را در کد خود قبل بخش Setup مانند دیگر کتابخانه ها فراخوانی کنید. این کتابخانه در ادیتور ها و همچنین Arduino IDE با نمام Wire.h شناسایی می‌شود. با استفاده در include قادر به فراخوانی کتابخانه خواهیم بود.

#include <Wire.h>  

معرفی ساختمان کتابخانه

این کتابخانه دارای تعداد توابع محدودی است اما همین تعداد محدود برای برقراری ارتباط I2c با دستگاه ها و ماژول های هدف کافی است و در سریع ترین زمان ممکن ارتباط I2c را برای ما برقرار می‌کند. این کتابخانه دارای توابع زیر است.

• begin()
• requestFrom()
• beginTransmission()
• endTransmission()
• write()
• available()
• read()
• onReceive()
• onRequest()

شما نه تنها می توانید ماژول های دارای I2C، بلکه چندین آردوینو را به گذرگاه I2C متصل کنید. هر دستگاهی که به bus متصل است آدرس خاص خود را دارد. از آنجا که هر آدرس ۷ بیتی است، حداکثر ۱۱۲ دستگاه می توانند به یک گذرگاه I2C متصل شوند  البته ۱۶ آدرس از ۱۲۸ آدرس ممکن توسط سخت افزار رزرو شده باشند.

 

مستندات عملکرد اعضا

  • ;()begin

این تابع باعث شروع کار کتابخانه Wire است و ماژول مدنظر را به عنوان Master یا Slave به باس I2C اضافه می‌کند. به طور معمول فقط یک بار باید این تابع فراخوانی شود.

Wire.begin();  
  • ;()requestFrom

توسط Master برای درخواست Bytes از دستگاه Slave استفاده می شود. سپس می توان بایت ها را با توابع ;()available و ;()read دریافت کرد. اگر مقدار false باشد، ()requestFrom پس از درخواست، پیام راه اندازی مجدد را ارسال می کند.  این امر از درخواست دیوایس اصلی دیگر بین پیام ها جلوگیری می کند. این امکان را برای یک دستگاه اصلی فراهم می کند تا هنگام کنترل، چندین درخواست ارسال کند.

Wire.requestFrom(2, 6);  
  • ;()beginTransmission

این تابع انتقال داده را به دستگاه Slave I2C شروع می‌کند. همچنین در انتها باید این تابع را پایان دادن فراخوانی کنیم. ;()endTransmission.

;()Wire.beginTransmission

 

  • ;()endTransmission

پس از فراخوانی تابع ;()Wire.beginTransmission برای پایان دادن به روند کار این تابع، از تابع معرفی شده استفاده می‌کنیم.

Wire.endTransmission(); ;Wire.endTransmission(stop)

 

  • ;()write

با استفاده از این تابع داده ها را از دستگاه Slave در پاسخ به درخواست Master ذخیره می‌کند، یا bytes را برای انتقال از Msater به Slave در صف قرار می دهد، این موارد در میان call های ()Transmission و ()endTransmission، کد پایین یک نمونه از عملکرد این تابع است.

#include <Wire.h> byte val = 0; void setup() {   Wire.begin();  } void loop() {   Wire.beginTransmission(44);                                  Wire.write(val);                  Wire.endTransmission();        val++;          if(val == 64)    {     val = 0;       }   delay(500); }  
  • ;()available

تعداد بایت های موجود برای بازیابی را با ;()read برمی گرداند. این تابع را باید بعد از فراخوانی یک Master برای درخواست ()From یا در Slave با هندلر ()onReceive فراخوانی کنید.

;()Wire.available  
  • ;()read

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

#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); } void loop() { Wire.requestFrom(2, 6); while(Wire.available()) { char c = Wire.read(); Serial.print(c); } delay(500); }  
  • ;()setClock

این عملکرد فرکانس ساعت را برای ارتباطات I2C تنظیم می کند. دستگاه های Salve I2C حداقل فرکانس ساعت کاری ندارند، با این وجود ۱۰۰KHz معمولا خط پایه این موارد است.

;Wire.setClock(100000y)  

قطعات سازگار با کتابخانه

با استفاده از این کتاخانه قادر خواهید بود در تمام برد های پشتیبانی شده توسط Arduino IDE رابط I2c را راه‌اندازی کنید، و با تمام ماژول هایی که از این رابط برای برقراری ارتباط با MCU استفاده می‌کنند پروژه خود راه‌اندازی کنید.

 

جمع بندی

ارتباطات از طریق I2C پیچیده تر از رابط های UART یا SPI است. ارسال سیگنال باید از پروتکل خاصی برای دستگاه های موجود در bus تبعیت کند تا آن را به عنوان ارتباطات معتبر I2C تشخیص دهد. خوشبختانه، اکثر دستگاه ها از تمام جزئیات دقیق شما مراقبت می کنند و به شما این امکان را می دهند تا بر داده هایی که می خواهید مبادله کنید تمرکز کنید. و این کتابخانه به ما این امکان را داد تا بتوانیم در سریع ترین زمان ممکن این ارتباط را برقرار کنیم، همچنین با استفاده از توابع کاربردی این ارتباط را در جزئیات کنترل کنیم.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

نوشته تحلیل و بررسی کتابخانه Wire.h اولین بار در دیجی اسپارک پدیدار شد.

مشاهده این خبر در سایت مرجع