پروتکل ارتباطی I2C یک پروتکل دو سیمه با دو پایه SDA, SCL است و چندین دستگاه به صورت همزمان میتوانند به پایه های I2C برد رزبری پای متصل شوند. در بخش هشتم از سری آموزش های رزبری پای با پایتون به معرفی پروتکل ارتباطی I2C و روش راه اندازی آن در رزبری پای و استفاده از GPIO هایی با هویت I2C خواهیم پرداخت. در ادامه با مرجع تخصصی رزبری پای با پایتون، دیجی اسپارک همراه باشید.
پروتکل I2C
پروتکل ارتباطی I2C در رزبری پای یک ارتباط دو سیمه برای اتصال سنسورهایی که از پروتکل I2C برای ارتباط با میکروکنترلرها استفاده میکنند، طراحی شده است. سرعت تبادل دیتا در پروتکل ارتباطی I2C بین ۱۰۰Kbits/s، ۴۰۰Kbits/s, 1M است. پروتکل I2C در دو مد کاری Master , Slave عمل میکند.Master , Slave میتوانند دیتا را ارسال کرده و همچنین دریافت کنند. این ارسال و دریافت دیتا وابسته به Master است و تا زمانی که درخواست توسط Master ارسال نشود، Slave دیتا به Master ارسال نمیکند. برای برقراری ارتباط در پروتکل I2C وجود دارد.
- I2C = Serial Data که جهت انتقال دیتا استفاده میشود.
- SCL = Serial Clock که سیگنال کلاک را انتقال میدهد.
هر دو سیگنال SDA , SCL دو طرفه هستند که توسط یک مقاومت پول آپ به تغذیه متصل شده اند. به این معنی که زمانی که باس آزاد است، هر دو سیگنال HIGH هستند.تمامی دیوایس هایی که بر روی باس قرار میگیرند بایستی پایه های اوپن کلکتور و اوپن درین داشته باشند. فعال شدن لاین به این معنی است که پایه پول دان شده و به GND وصل شده اند. تعداد دیوایس های قرار گرفته شده بر روی یک باس نامحدود است و میتوانید دیوایس هایی با سطح ولتاژ متفاوت را بر روی یک باس وصل کرده و با یک مقاومت پول آپ به کمترین ولتاژ میکروکنترلر اتصال دهید. I2C از آدرس ۷ بیتی برای تعریف دیوایس ها استفاده میکند که هر کدام میتوانند هویت منحصر به فرد داشته باشند و درخواست به Slave صحیح ارسال کنند.
چندین دستگاه میتوانند به پایه I2C رزبری پای متصل شوند. دستگاهی که نقش MASTER را برعهده دارد، کلاک را تولید کرده و ارتباط را با SLAVE تشخیص میدهد. دستگاهی که نقش SLAVE را برعهده دارد، کلاک را دریافت کرده و زمانی که توسط مستر آدرس دهی میشوند پاسخ میدهند. هر دستگاه I2C دارای کد منحصر به فرد I2C برای شناسایی است.
فعال کردن I2C در رزبری پای
از منو رزبری پای بر روی گزینه PREFERENCES را انتخاب کنید. سپس Raspberry pi Configuration را انتخاب کنید.
بر روی Interface کلیک کنید. سپس i2c را فعال Enable کنید.
پایه های I2C در GPIO رزبری پای به صورت زیر است.
شناسایی دستگاه با پروتکل I2C
برای شناسایی دستگاه I2C بر روی رزیری پای از کامندهای زیر استفاده کنید. برای نصب ابزار I2C کامند زیر را نصب کنید.
sudo apt-get install -y i2c-tools
جهت شناسایی آدرس I2C دستگاه های متصل به GPIO از کامند زیر استفاده میشود. در این تصویر هیچ دستگاهی به پایه های GPIO I2C متصل نیست و به همین دلیل عددی نوشته نشده است.
برای خواندن و نوشتن رجیسترها از کامند زیر استفاده میکنیم.
i2cget, i2cset , i2cdump
مثال:
sudo i2cget -y 1 0x48
کتابخانه GPIO PYTHON
کتابخانه GPIO ZERO
یک رابط برای دیوایس های GPIO است. لینک دانلود کتابخانه GPIO ZERO
pip install gpiozero
کتابخانه RPI.GPIO
این پکیج یک ماژول پایتون برای کنترل پایه های GPIO است. لینک دانلود کتابخانه RPI.GPIO
pip install RPi.GPIO
کتابخانه SMBUS
از این کتابخانه برای پروتکل ارتباطی I2C میشود.
pip install smbus
توسط این کتابخانه میتوانید به آدرس I2C دستگاه ها توسط پایتون دسترسی پیدا کنید.
import smbus DEVICE_BUS = 1 DEVICE_ADDR = 0x15 bus = smbus.SMBus(DEVICE_BUS) command = 0x00 value = 0x01 bus.write_byte_data(DEVICE_ADDR, command, value) data = bus.read_byte_data(DEVICE_ADDR, command)
برای ارسال و خواندن بیت از این دستور استفاده میشود.
long write_quick(int addr)
از این دستور برای خواندن یک بایت تکی از دیوایس استفاده میشود.
long read_byte(int addr)
برای ارسال یک بایت تکی به دیوایس از این دستور استفاده میشود.
long write_byte(int addr,char val)
long read_byte_data(int addr,char cmd)
long write_byte_data(int addr,char cmd,char val)
long read_word_data(int addr,char cmd)
long write_word_data(int addr,char cmd,int val)
long process_call(int addr,char cmd,int val)
long[] read_block_data(int addr,char cmd)
write_block_data(int addr,char cmd,long vals[])
long[] block_process_call(int addr,char cmd,long vals[])
long[] read_i2c_block_data(int addr,char cmd)
write_i2c_block_data(int addr,char cmd,long vals[])
تست پروتکل I2C با پایتون
برای تست پروتکل I2C با پایتون یک دستگاه I2C از ماژول MLX90614 استفاده میکنیم. سنسور دماسنج غیرتماسی MLX90614 دارای پروتکل ارتباطی I2C است و قابلیت تشخیص دمای بدن انسان و دمای محیط را به صورت مجزا دارد.
ویژگی های سنسور MLX90614
- ولتاژ کاری سنسور ۳٫۶ تا ۵ ولت DC است.
- رزولوشن – کالیبره سنسور ۰٫۰۲ درجه سانتی گراد است.
- دمای اندازه گیری محیط بین – ۴۰ تا + ۱۲۵ درجه سانتی گراد است.
- دمای اندازه گیری شی و انسان بین – ۷۰ تا + ۳۸۲٫۲ درجه سانتی گراد است.
- از ADC هفده بیتی استفاده میکند.
- پروتکل ارتباطی سنسور I2C است.
برای فراخوانی این ارتباط نیاز به دو کتابخانه داریم. کتایخانه MLX90614 و کتابخانه SMBUS. روش راه اندازی و تست ماژول دماسنج MLX90614 قبلا در دیجی اسپارک کامل منتشر شده است. برای دسترسی به آموزش بر روی لینک زیر کلیک کنید.
راه اندازی سنسور دماسنج غیرتماسی MLX90614 با برد رزبری پای و پایتون
توسط آموزش های داده شده در ابتدا آدرس I2C را برداشت میکنیم.
سپس پکیج پایتون MLX90614 را نصب کنید. از کتابخانه SMBUS برای برقراری ارتباط I2C با دیوایس هایی که از I2C پشتیبانی میکنند، استفاده میکنیم. در نهایت کد اصلی برای تست سنسور و دریافت دما به صورت زیر است.
from smbus2 import SMBus from mlx90614 import MLX90614 bus = SMBus(1) sensor = MLX90614(bus, address=0x5A) print "Ambient Temperature :", sensor.get_ambient() print "Object Temperature :", sensor.get_object_1() bus.close()
جمع بندی لیدی پای
راه اندازی هر سنسوری که از پروتکل ارتباطی I2C پشتیبانی میکند با رزبری پای بسیار ساده است! تمامی کلاس ها و توابع مورد نیاز برای استفاده از دیوایس های I2C و فراخوانی آن ها در متن آموزش نوشته شده است. نکته ی مهمی که بایستی به آن توجه داشته باشید استفاده از کتابخانه های پایتون است. به عنوان مثال در این پروژه از سنسور دماسنج MLX90614 استفاده شده است که برای تست سنسور کتابخانه پایتون سنسور نصب شده است. قدم بعدی فراخوانی کتابخانه SMBUS است که برقراری ارتباط را فراهم میسازد. قبل از هرکاری از فعال بودن رابط I2C دستگاه خود مطمئن شوید.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
این آموزش با برد رزبری پای ۳ مدل بی پلاس قابل اجراست؟
با سلام
بله تمامی بردها دارای یک os یکسان هستند و تفاوتی وجود ندارد.