Arduino IDE کا استعمال کرتے ہوئے ESP32 میں I2C ایڈریس کو کیسے اسکین کریں۔

Arduino Ide Ka Ast Mal Krt Wy Esp32 My I2c Ay Rys Kw Kys Askyn Kry



ESP32 ایک مائیکرو کنٹرولر پر مبنی پلیٹ فارم ہے جو ان پٹ کے مطابق مختلف آؤٹ پٹ کو کنٹرول کرنے کے لیے کئی ڈیوائسز کے ساتھ انٹرفیس کر سکتا ہے۔ تمام مواصلاتی پروٹوکول جیسے UART، SPI اور I2C ESP32 مواصلات میں اہم کردار ادا کرتے ہیں۔ ہم اس گائیڈ میں انٹر انٹیگریٹڈ سرکٹ یا I2C کمیونیکیشن پروٹوکول اور ڈیوائس کے ایڈریس کو اسکین کرنے کے طریقہ پر بات کریں گے۔

I2C کمیونیکیشن کا تعارف

I2C متبادل طور پر I2C یا IIC کے نام سے جانا جاتا ہے ایک مطابقت پذیر ماسٹر غلام مواصلاتی پروٹوکول ہے جہاں ایک سگنل ماسٹر ڈیوائس ایک ہی تار (SDA لائن) پر متعدد غلام آلات کو کنٹرول کرسکتا ہے۔

I2C UART اور SPI پروٹوکول کے کام کو یکجا کرتا ہے مثال کے طور پر SPI ایک ہی ماسٹر پر ایک سے زیادہ غلام آلات کے کنٹرول کی حمایت کرتا ہے، دوسری طرف I2C بھی اس کی حمایت کرتا ہے UART مواصلات کے لیے دو لائن TX اور Rx کا استعمال کرتا ہے I2C بھی دو لائن SDA اور SCL استعمال کرتا ہے۔ مواصلات.









یہاں ہم دیکھ سکتے ہیں کہ ہم نے SDA، SCL دونوں لائنوں کے ساتھ پل اپ ریزسٹرس کا استعمال کیا ہے۔ اس کی وجہ یہ ہے کہ بطور ڈیفالٹ I2C صرف LOW یا اوپن سرکٹ کی دو سطحوں کو آؤٹ پٹ کرتا ہے۔ پہلے سے طے شدہ طور پر، تمام چپس پر I2C اوپن سرکٹ موڈ میں ہے لہذا ان کو اونچی کھینچنے کے لیے ہم نے پل اپ ریزسٹر کا استعمال کیا۔



درج ذیل دو لائنیں ہیں جو I2C استعمال کرتی ہیں:





  • SDA (سیریل ڈیٹا) : آقا سے غلام تک ڈیٹا منتقل کرنے اور وصول کرنے کی لائن اور اس کے برعکس
  • SCL (سیریل کلاک) : ایک مخصوص غلام آلہ کو منتخب کرنے کے لیے کلاک سگنل لائن

ESP32 I2C بس انٹرفیس

ESP32 میں دو I2C بس انٹرفیس شامل ہیں جن کا استعمال کرتے ہوئے I2C مواصلات یا تو ماسٹر یا غلام کے طور پر انجام دیا جاتا ہے اس ڈیوائس پر منحصر ہے جو ESP32 کے ساتھ انٹرفیس ہے۔ ESP32 ڈیٹا شیٹ کے مطابق ESP32 بورڈ I2C انٹرفیس مندرجہ ذیل ترتیب کو سپورٹ کرتا ہے:

  • معیاری موڈ I2C کمیونیکیشن 100 Kbit/s کی شرح سے
  • 400 Kbit/s کی رفتار سے تیز یا ایڈوانس موڈ I2C کمیونیکیشن
  • ڈوئل ایڈریسنگ موڈ 7 بٹ اور 10 بٹ
  • صارف کمانڈ رجسٹر کو پروگرام کرکے I2C انٹرفیس کو کنٹرول کرسکتے ہیں۔
  • ESP32 I2C بس انٹرفیس کنٹرول کرنے میں زیادہ لچکدار ہے۔

I2C آلات کو ESP32 کے ساتھ جوڑنا

I2C پروٹوکول کا استعمال کرتے ہوئے ESP32 کے ساتھ آلات کا انٹرفیس کرنا بہت آسان ہے بالکل UART کی طرح ہمیں SDA اور SCL کلاک لائن کو جوڑنے کے لیے صرف دو لائنوں کی ضرورت ہے۔



ESP32 کو ماسٹر اور سلیو موڈ دونوں میں کنفیگر کیا جا سکتا ہے۔

ESP32 I2C ماسٹر موڈ

اس موڈ میں ESP32 ایک گھڑی سگنل تیار کرتا ہے جو منسلک غلام آلات کے ساتھ مواصلت کا آغاز کرتا ہے۔

ESP32 میں دو GPIO پن جو I2C کمیونیکیشن کے لیے پہلے سے طے شدہ ہیں:

  • ایس ڈی اے : جی پی آئی او پن 21
  • ایس سی ایل : جی پی آئی او پن 22

ESP32 I2C غلام موڈ

غلام موڈ میں گھڑی ماسٹر ڈیوائس کے ذریعہ تیار کی جاتی ہے۔ ماسٹر واحد آلہ ہے جو I2C مواصلات میں SCL لائن کو چلاتا ہے۔ غلام وہ آلات ہیں جو ماسٹر کو جواب دیتے ہیں لیکن ڈیٹا کی منتقلی شروع نہیں کر سکتے۔ ESP32 I2C بس میں صرف ماسٹر ہی آلات کے درمیان ڈیٹا کی منتقلی شروع کر سکتا ہے۔

تصویر ماسٹر غلام کی ترتیب میں دو ESP32 بورڈ دکھاتی ہے۔

ابھی تک ہم ESP32 میں I2C موڈ کے کام کو سمجھ چکے ہیں اب ہم دیئے گئے کوڈ کو اپ لوڈ کر کے کسی بھی ڈیوائس کا I2C ایڈریس آسانی سے تلاش کر سکتے ہیں۔

Arduino IDE کا استعمال کرتے ہوئے ESP32 میں I2C ایڈریس کو کیسے اسکین کریں۔

ESP32 کے ساتھ منسلک آلات کا I2C پتہ تلاش کرنا ضروری ہے کیونکہ اگر ہم ایک ہی I2C ایڈریس والے آلات استعمال کر رہے ہیں تو ہم ان کے ساتھ ایک بس لائن پر بات چیت نہیں کر سکتے۔

ہر I2C ڈیوائس میں HEX میں ایک منفرد پتہ اور پتہ کی حد 0 سے 127 یا (0 سے 0X7F) ہونی چاہیے۔ مثال کے طور پر، اگر ہم ایک ہی ماڈل نمبر یا پروڈکٹ کے دو OLED ڈسپلے استعمال کر رہے ہیں تو دونوں کا ایک ہی I2C پتہ ہوگا لہذا ہم ESP32 میں دونوں کو ایک ہی I2C لائن پر استعمال نہیں کر سکتے۔

آئی سی ایڈریس تلاش کرنے کے لیے آئیے ایک مثال لیتے ہیں۔

منصوبہ بندی

ذیل کی تصویر میں I2C کمیونیکیشن پروٹوکول کا استعمال کرتے ہوئے ESP32 بورڈ کے ساتھ OLED ڈسپلے انٹرفیسنگ کا اسکیمیٹک خاکہ دکھاتا ہے۔

OLED کے ساتھ ESP32 کے کنکشن میں شامل ہیں:

OLED ڈسپلے ESP32 پن
وی سی سی 3V3/VIN
جی این ڈی جی این ڈی
ایس سی ایل GPIO 22
ایس ڈی اے GPIO 21

کوڈ
Arduino ایڈیٹر کھولیں اور دیا گیا I2C سکیننگ کوڈ ESP32 بورڈ میں اپ لوڈ کریں۔ یقینی بنائیں کہ ESP32 منسلک ہے، اور COM پورٹ منتخب ہے۔

/****************
****************
linuxhint.com
****************
******************

#include  /*وائر لائبریری شامل*/

باطل سیٹ اپ ( ) {
تار۔ شروع ( ) ; /* I2C مواصلات شروع ہوتا ہے۔ */
سیریل شروع کریں۔ ( 115200 ) ; /* بوڈ ریٹ کی وضاحت کی گئی ہے۔ کے لیے سیریل مواصلات */
Serial.println ( ' \n I2C سکینر' ) ; /* سیریل مانیٹر پر پرنٹ سکینر */
}

باطل لوپ ( ) {
بائٹ کی غلطی، پتہ؛
int n ڈیوائسز؛
Serial.println ( 'سکین کر رہا ہے...' ) ; /* ESP32 دستیاب I2C آلات کو اسکین کرنا شروع کرتا ہے۔ */
n ڈیوائسز = 0 ;
کے لیے ( ایڈریس = 1 ; پتہ < 127 ; ایڈریس++ ) { /* کے لیے پر آلات کی تعداد چیک کرنے کے لیے لوپ 127 پتہ */
Wire.beginTransmission ( پتہ ) ;
error = Wire.endTransmission ( ) ;
اگر ( غلطی == 0 ) { /* اگر I2C آلہ ملا */
سیریل۔ پرنٹ ( 'I2C ڈیوائس ایڈریس 0x پر ملا' ) ; /* اس لائن کو پرنٹ کریں اگر I2C آلہ ملا */
اگر ( پتہ < 16 ) {
سیریل۔ پرنٹ ( '0' ) ;
}
Serial.println ( ایڈریس، HEX ) ; /* I2C ایڈریس کی HEX ویلیو پرنٹ کرتا ہے۔ */
nآلات++;
}
اور اگر ( غلطی == 4 ) {
سیریل۔ پرنٹ ( 'پتہ 0x پر نامعلوم غلطی' ) ;
اگر ( پتہ < 16 ) {
سیریل۔ پرنٹ ( '0' ) ;
}
Serial.println ( ایڈریس، HEX ) ;
}
}
اگر ( nآلات == 0 ) {
Serial.println ( 'کوئی I2C آلات نہیں ملے \n ' ) ; /* اگر کوئی I2C ڈیوائس منسلک نہیں ہے تو اس پیغام کو پرنٹ کریں۔ */
}
اور {
Serial.println ( 'ہو گیا \n ' ) ;
}
تاخیر ( 5000 ) ; /* تاخیر دی گئی۔ کے لیے ہر ایک I2C بس کی جانچ کر رہا ہے۔ 5 سیکنڈ */
}

مندرجہ بالا کوڈ دستیاب I2C آلات کے لیے اسکین کرے گا۔ I2C کمیونیکیشن کے لیے وائر لائبریری کو کال کرکے کوڈ شروع ہوا۔ اگلا سیریل مواصلات بوڈ ریٹ کا استعمال کرتے ہوئے شروع کیا جاتا ہے۔

I2C سکیننگ کوڈ کے لوپ حصے میں دو متغیر نام، غلطی اور پتہ کی تعریف کی گئی ہے. یہ دو متغیر آلات کے I2C ایڈریس کو محفوظ کرتے ہیں۔ اگلا ایک فار لوپ شروع کیا گیا ہے جو 0 سے 127 ڈیوائسز تک شروع ہونے والے I2C ایڈریس کو اسکین کرے گا۔

I2C ایڈریس کو پڑھنے کے بعد آؤٹ پٹ سیریل مانیٹر پر HEX فارمیٹ میں پرنٹ ہوتا ہے۔

ہارڈ ویئر

یہاں ہم دیکھ سکتے ہیں کہ OLED 0.96 انچ I2C ڈسپلے GPIO پن 21 اور 22 پر ESP32 بورڈ سے منسلک ہے۔ ڈسپلے کے Vcc اور GND ESP32 3V3 اور GND پن سے منسلک ہیں۔

آؤٹ پٹ
آؤٹ پٹ میں ہم ESP32 بورڈ سے منسلک OLED ڈسپلے کا I2C ایڈریس دیکھ سکتے ہیں۔ یہاں I2C ایڈریس 0X3C ہے لہذا ہم اسی ایڈریس کے ساتھ کوئی دوسرا I2C ڈیوائس استعمال نہیں کر سکتے اس کے لیے ہمیں پہلے اس ڈیوائس کا I2C ایڈریس تبدیل کرنا ہوگا۔

ہم نے کامیابی سے ESP32 بورڈ کے ساتھ منسلک OLED ڈسپلے کا I2C پتہ حاصل کر لیا ہے۔

نتیجہ

ESP32 کے ساتھ متعدد ڈیوائسز کو جوڑنے کے دوران I2C ایڈریس تلاش کرنا ضروری ہے کیونکہ وہ ڈیوائسز جو ایک ہی I2C ایڈریس کا اشتراک کرتے ہیں انہیں ایک I2C بس پر کنیکٹ نہیں کیا جا سکتا۔ اوپر دیے گئے کوڈ کو استعمال کرنے سے I2C ایڈریس کی شناخت کی جا سکتی ہے اور اگر کسی دو ڈیوائسز کا ایڈریس مماثل ہے تو اسے ڈیوائس کی تفصیلات کے مطابق تبدیل کیا جا سکتا ہے۔