Arduino IDEని ఉపయోగించి ESP32లో I2C చిరునామాను ఎలా స్కాన్ చేయాలి

Arduino Ideni Upayoginci Esp32lo I2c Cirunamanu Ela Skan Ceyali



ESP32 అనేది మైక్రోకంట్రోలర్-ఆధారిత ప్లాట్‌ఫారమ్, ఇది ఇన్‌పుట్ ప్రకారం వివిధ అవుట్‌పుట్‌లను నియంత్రించడానికి అనేక పరికరాలతో ఇంటర్‌ఫేస్ చేయగలదు. ESP32 కమ్యూనికేషన్‌లో UART, SPI మరియు I2C వంటి అన్ని కమ్యూనికేషన్ ప్రోటోకాల్‌లు ముఖ్యమైన పాత్ర పోషిస్తాయి. మేము ఈ గైడ్‌లో ఇంటర్ ఇంటిగ్రేటెడ్ సర్క్యూట్ లేదా I2C కమ్యూనికేషన్ ప్రోటోకాల్ గురించి చర్చిస్తాము మరియు పరికరం యొక్క చిరునామాను ఎలా స్కాన్ చేయాలి.

I2C కమ్యూనికేషన్‌కు పరిచయం

I2Cని ప్రత్యామ్నాయంగా I2C లేదా IIC అని పిలుస్తారు, ఇది సింక్రోనస్ మాస్టర్-స్లేవ్ కమ్యూనికేషన్ ప్రోటోకాల్, ఇక్కడ సిగ్నల్ మాస్టర్ పరికరం ఒకే వైర్ (SDA లైన్) ద్వారా బహుళ సంఖ్యలో స్లేవ్ పరికరాలను నియంత్రించగలదు.

I2C UART మరియు SPI ప్రోటోకాల్‌ల పనిని మిళితం చేస్తుంది ఉదాహరణకు SPI ఒకే మాస్టర్‌పై బహుళ స్లేవ్ పరికరాల నియంత్రణకు మద్దతు ఇస్తుంది, I2C కూడా దీనికి మద్దతు ఇస్తుంది, మరోవైపు UART కమ్యూనికేషన్ కోసం రెండు-లైన్ TX మరియు Rxని ఉపయోగిస్తుంది I2C కూడా రెండు-లైన్ SDA మరియు SCLలను ఉపయోగిస్తుంది. కమ్యూనికేషన్.









ఇక్కడ మనం SDA, SCL పంక్తులతో పుల్ అప్ రెసిస్టర్‌లను ఉపయోగించినట్లు చూడవచ్చు. ఎందుకంటే డిఫాల్ట్‌గా I2C తక్కువ లేదా ఓపెన్ సర్క్యూట్‌లో రెండు స్థాయిలను మాత్రమే అవుట్‌పుట్ చేస్తుంది. డిఫాల్ట్‌గా, అన్ని చిప్‌లపై I2C ఓపెన్ సర్క్యూట్ మోడ్‌లో ఉంది కాబట్టి వాటిని పైకి లాగడానికి మేము పుల్-అప్ రెసిస్టర్‌ని ఉపయోగించాము.



I2C ఉపయోగించే రెండు లైన్లు క్రిందివి:





  • SDA (సీరియల్ డేటా) : మాస్టర్ నుండి స్లేవ్ మరియు వైస్ వెర్సా వరకు డేటాను ప్రసారం చేయడానికి మరియు స్వీకరించడానికి లైన్
  • SCL (సీరియల్ క్లాక్) : నిర్దిష్ట స్లేవ్ పరికరాన్ని ఎంచుకోవడానికి క్లాక్ సిగ్నల్ లైన్

ESP32 I2C బస్ ఇంటర్‌ఫేస్‌లు

ESP32 రెండు I2C బస్ ఇంటర్‌ఫేస్‌లను కలిగి ఉంది, వీటిని ఉపయోగించి I2C కమ్యూనికేషన్ ESP32తో ఇంటర్‌ఫేస్ చేయబడిన పరికరాన్ని బట్టి మాస్టర్ లేదా స్లేవ్‌గా నిర్వహించబడుతుంది. ESP32 డేటాషీట్ ప్రకారం ESP32 బోర్డు I2C ఇంటర్‌ఫేస్ కింది కాన్ఫిగరేషన్‌కు మద్దతు ఇస్తుంది:

  • 100 Kbit/s చొప్పున ప్రామాణిక మోడ్ I2C కమ్యూనికేషన్
  • 400 Kbit/s వేగంతో వేగవంతమైన లేదా అధునాతన మోడ్ I2C కమ్యూనికేషన్
  • ద్వంద్వ చిరునామా మోడ్ 7-బిట్ మరియు 10-బిట్
  • కమాండ్ రిజిస్టర్‌లను ప్రోగ్రామింగ్ చేయడం ద్వారా వినియోగదారులు I2C ఇంటర్‌ఫేస్‌ను నియంత్రించవచ్చు
  • ESP32 I2C బస్ ఇంటర్‌ఫేస్ నియంత్రించడంలో మరింత అనువైనది

I2C పరికరాలను ESP32తో కనెక్ట్ చేస్తోంది

I2C ప్రోటోకాల్‌ని ఉపయోగించి ESP32తో పరికరాలను ఇంటర్‌ఫేసింగ్ చేయడం UART లాగానే చాలా సులభం SDA మరియు SCL క్లాక్ లైన్‌ని కనెక్ట్ చేయడానికి మనకు రెండు లైన్లు మాత్రమే అవసరం.



ESP32ని మాస్టర్ మరియు స్లేవ్ మోడ్‌లో కాన్ఫిగర్ చేయవచ్చు.

ESP32 I2C మాస్టర్ మోడ్

ఈ మోడ్‌లో ESP32 కనెక్ట్ చేయబడిన స్లేవ్ పరికరాలతో కమ్యూనికేషన్‌ను ప్రారంభించే క్లాక్ సిగ్నల్ ఉపయోగించబడుతుంది.

I2C కమ్యూనికేషన్ కోసం ముందే నిర్వచించబడిన ESP32లోని రెండు GPIO పిన్‌లు:

  • SDA : GPIO పిన్ 21
  • SCL : GPIO పిన్ 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 లైన్‌లో రెండింటినీ ఉపయోగించలేము.

IC చిరునామాను కనుగొనడానికి ఒక ఉదాహరణ తీసుకుందాం.

స్కీమాటిక్

I2C కమ్యూనికేషన్ ప్రోటోకాల్‌ని ఉపయోగించి ESP32 బోర్డ్‌తో OLED డిస్‌ప్లే ఇంటర్‌ఫేసింగ్ యొక్క స్కీమాటిక్ రేఖాచిత్రాన్ని క్రింద ఉన్న చిత్రం చూపుతుంది.

OLEDతో ESP32 యొక్క కనెక్షన్ వీటిని కలిగి ఉంటుంది:

OLED డిస్ప్లే ESP32 పిన్
VCC 3V3/VIN
GND GND
SCL GPIO 22
SDA GPIO 21

కోడ్
Arduino ఎడిటర్‌ని తెరిచి, ఇచ్చిన I2C స్కానింగ్ కోడ్‌ను ESP32 బోర్డులో అప్‌లోడ్ చేయండి. ESP32 కనెక్ట్ చేయబడిందని మరియు COM పోర్ట్ ఎంచుకోబడిందని నిర్ధారించుకోండి.

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

#include  /*వైర్ లైబ్రరీ చేర్చబడింది*/

శూన్యమైన సెటప్ ( ) {
వైర్.ప్రారంభం ( ) ; /* I2C కమ్యూనికేషన్ ప్రారంభమవుతుంది */
సీరియల్.ప్రారంభం ( 115200 ) ; /* బాడ్ రేటు నిర్వచించబడింది కోసం సీరియల్ కమ్యూనికేషన్ */
Serial.println ( ' \n I2C స్కానర్' ) ; /* సీరియల్ మానిటర్‌లో ప్రింట్ స్కానర్ */
}

శూన్య లూప్ ( ) {
బైట్ లోపం, చిరునామా;
int nDevices;
Serial.println ( 'స్కానింగ్...' ) ; /* ESP32 అందుబాటులో ఉన్న I2C పరికరాలను స్కాన్ చేయడం ప్రారంభిస్తుంది */
n పరికరాలు = 0 ;
కోసం ( చిరునామా = 1 ; చిరునామా < 127 ; చిరునామా++ ) { /* కోసం పరికరాల సంఖ్యను తనిఖీ చేయడానికి లూప్ చేయండి 127 చిరునామా */
Wire.beginTransmission ( చిరునామా ) ;
error = Wire.endTransmission ( ) ;
ఉంటే ( లోపం == 0 ) { /* ఉంటే I2C పరికరం కనుగొనబడింది */
సీరియల్.ప్రింట్ ( 'I2C పరికరం 0x చిరునామాలో కనుగొనబడింది' ) ; /* ఈ పంక్తిని ప్రింట్ చేయండి ఉంటే I2C పరికరం కనుగొనబడింది */
ఉంటే ( చిరునామా < 16 ) {
సీరియల్.ప్రింట్ ( '0' ) ;
}
Serial.println ( చిరునామా, హెక్స్ ) ; /* I2C చిరునామా యొక్క HEX విలువను ముద్రిస్తుంది */
nపరికరాలు++;
}
లేకపోతే ఉంటే ( లోపం == 4 ) {
సీరియల్.ప్రింట్ ( '0x చిరునామాలో తెలియని లోపం' ) ;
ఉంటే ( చిరునామా < 16 ) {
సీరియల్.ప్రింట్ ( '0' ) ;
}
Serial.println ( చిరునామా, హెక్స్ ) ;
}
}
ఉంటే ( n పరికరాలు == 0 ) {
Serial.println ( 'I2C పరికరాలు ఏవీ కనుగొనబడలేదు \n ' ) ; /* I2C పరికరం జోడించబడకపోతే, ఈ సందేశాన్ని ముద్రించండి */
}
లేకపోతే {
Serial.println ( 'పూర్తి \n ' ) ;
}
ఆలస్యం ( 5000 ) ; /* జాప్యం ఇచ్చారు కోసం ప్రతి I2C బస్సును తనిఖీ చేస్తోంది 5 సెకను */
}

పై కోడ్ అందుబాటులో ఉన్న I2C పరికరాల కోసం స్కాన్ చేస్తుంది. I2C కమ్యూనికేషన్ కోసం వైర్ లైబ్రరీకి కాల్ చేయడం ద్వారా కోడ్ ప్రారంభించబడింది. బాడ్ రేటును ఉపయోగించి తదుపరి సీరియల్ కమ్యూనికేషన్ ప్రారంభించబడింది.

I2C స్కానింగ్ కోడ్ యొక్క లూప్ భాగంలో రెండు వేరియబుల్ పేర్లు, లోపం మరియు చిరునామా నిర్వచించబడ్డాయి. ఈ రెండు వేరియబుల్స్ పరికరాల I2C చిరునామాను నిల్వ చేస్తాయి. తర్వాత 0 నుండి 127 పరికరాల వరకు I2C చిరునామా కోసం స్కాన్ చేసే లూప్ కోసం a ప్రారంభించబడింది.

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 చిరునామాను గుర్తించవచ్చు మరియు ఏదైనా రెండు పరికరాల చిరునామా సరిపోలితే దాన్ని పరికర నిర్దేశాలను బట్టి మార్చవచ్చు.