پایتون Python

آموزش پایتون Python با بردهای رزبری پای بخش هشتم: پروتکل ارتباطی I2C

getting-started-with-python-on-raspberry-pi-boards-part-eight-i2c-digispark
نوشته شده توسط پریسا پوربلورچیان

پروتکل ارتباطی I2C یک پروتکل دو سیمه با دو پایه SDA, SCL است و چندین دستگاه به صورت همزمان میتوانند به پایه های I2C برد رزبری پای متصل شوند. در بخش هشتم از سری آموزش های رزبری پای با پایتون به معرفی پروتکل ارتباطی I2C و روش راه اندازی آن در رزبری پای و استفاده از GPIO هایی با هویت I2C خواهیم پرداخت. در ادامه با مرجع تخصصی رزبری پای با پایتون، دیجی اسپارک همراه باشید.

پروتکل I2C پایتون در بردهای رزبری پای raspberry pi - دیجی اسپارک

 


پروتکل 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 در تمامی بردهای رزبری پای - دیجی اسپارک

 

چندین دستگاه میتوانند به پایه I2C رزبری پای متصل شوند. دستگاهی که نقش MASTER را برعهده دارد، کلاک را تولید کرده و ارتباط را با SLAVE تشخیص میدهد. دستگاهی که نقش SLAVE را برعهده دارد، کلاک را دریافت کرده و زمانی که توسط مستر آدرس دهی می‌شوند پاسخ میدهند. هر دستگاه I2C دارای کد منحصر به فرد I2C برای شناسایی است.

 


فعال کردن I2C در رزبری پای


از منو رزبری پای بر روی گزینه PREFERENCES را انتخاب کنید. سپس Raspberry pi Configuration را انتخاب کنید.

فعال کردن I2C در رزبری پای - دیجی اسپارک

 

بر روی Interface کلیک کنید. سپس i2c را فعال Enable کنید.

فعال کردن I2C در رزبری پای از طریق تنظیمات - دیجی اسپارک

 

پایه های I2C در GPIO رزبری پای به صورت زیر است.

پورت پروتکل I2C در رزبری پای - دیجی اسپارک

 


شناسایی دستگاه با پروتکل I2C


برای شناسایی دستگاه I2C بر روی رزیری پای از کامندهای زیر استفاده کنید. برای نصب ابزار I2C کامند زیر را نصب کنید.

sudo apt-get install -y i2c-tools

 

شناسایی دستگاه با پروتکل I2C در پایتون - دیجی اسپارک

 

جهت شناسایی آدرس 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 است.

تست پروتکل I2C با پایتون python - دیجی اسپارک

 

برای فراخوانی این ارتباط نیاز به دو کتابخانه داریم. کتایخانه MLX90614 و کتابخانه SMBUS. روش راه اندازی و تست ماژول دماسنج MLX90614 قبلا در دیجی اسپارک کامل منتشر شده است. برای دسترسی به آموزش بر روی لینک زیر کلیک کنید.

راه اندازی سنسور دماسنج غیرتماسی MLX90614 با برد رزبری پای و پایتون

 

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

دریافت آدرس 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 با پایتون python در رزبری پای - دیجی اسپارک

 

تست پروتکل I2C با پایتون و دریافت آدرس - دیجی اسپارک

 


جمع بندی لیدی پای


راه اندازی هر سنسوری که از پروتکل ارتباطی I2C پشتیبانی می‌کند با رزبری پای بسیار ساده است! تمامی کلاس ها و توابع مورد نیاز برای استفاده از دیوایس های I2C و فراخوانی آن ها در متن آموزش نوشته شده است. نکته ی مهمی که بایستی به آن توجه داشته باشید استفاده از کتابخانه های پایتون است. به عنوان مثال در این پروژه از سنسور دماسنج MLX90614 استفاده شده است که برای تست سنسور کتابخانه پایتون سنسور نصب شده است. قدم بعدی فراخوانی کتابخانه SMBUS است که برقراری ارتباط را فراهم می‌سازد. قبل از هرکاری از فعال بودن رابط I2C دستگاه خود مطمئن شوید.

 


وسایل مورد نیاز


رزبری پای Raspberry Pi 400

رزبری پای Raspberry Pi 4

سنسور دماسنج MLX90614

 

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

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه