I2C ஐப் பயன்படுத்தி இரண்டு Arduino போர்டுகளை எவ்வாறு இணைப்பது

I2C ஐப் பயன்படுத்தி இரண்டு Arduino போர்டுகளை எவ்வாறு இணைப்பது
உங்களைப் போன்ற வாசகர்கள் MUO ஐ ஆதரிக்க உதவுகிறார்கள். எங்கள் தளத்தில் உள்ள இணைப்புகளைப் பயன்படுத்தி நீங்கள் வாங்கும் போது, ​​நாங்கள் ஒரு இணை கமிஷனைப் பெறலாம். மேலும் படிக்க.

ஒரு Arduino பல பணிகளைச் செய்ய முடியும் என்றாலும், சில திட்டங்கள் வெவ்வேறு செயல்பாடுகளைக் கையாள ஒன்றுக்கு மேற்பட்ட பலகைகளைப் பயன்படுத்த வேண்டும். எனவே, இரண்டு மைக்ரோகண்ட்ரோலர்களுக்கு இடையே தரவு பரிமாற்றத்தை செயல்படுத்த, CAN, SPI, I2C அல்லது UART போன்ற ஒரு தகவல் தொடர்பு நெறிமுறை அமைக்கப்பட வேண்டும்.





இந்த வழிகாட்டியில், I2C எவ்வாறு செயல்படுகிறது, வன்பொருள் இணைப்புகள் மற்றும் I2C மாஸ்டர் மற்றும் ஸ்லேவ் சாதனங்களாக இரண்டு Arduino போர்டுகளை அமைக்க தேவையான மென்பொருள் செயல்படுத்தல் ஆகியவற்றின் அடிப்படைகளை நாங்கள் உள்ளடக்குவோம்.





அன்றைய வீடியோவை உருவாக்கவும் உள்ளடக்கத்துடன் தொடர உருட்டவும்

I2C என்றால் என்ன?

இன்டர்-இன்டெகிரேட்டட் சர்க்யூட் (I2C) என்பது மின்னணு சாதனங்களுக்கு இடையே தரவு பரிமாற்றத்தை செயல்படுத்த உட்பொதிக்கப்பட்ட அமைப்புகள் மற்றும் மைக்ரோகண்ட்ரோலர்களில் பரவலாகப் பயன்படுத்தப்படும் தகவல் தொடர்பு நெறிமுறை ஆகும். SPI (சீரியல் பெரிஃபெரல் இன்டர்ஃபேஸ்) போலல்லாமல், ஒற்றை அல்லது பல அடிமை சாதனங்களைக் கொண்ட பேருந்தில் ஒன்றுக்கு மேற்பட்ட முதன்மை சாதனங்களை இணைக்க I2C உங்களை அனுமதிக்கிறது. இது முதலில் பிலிப்ஸால் பயன்படுத்தப்பட்டது மற்றும் இரண்டு கம்பி இடைமுகம் (TWI) தொடர்பு நெறிமுறை என்றும் அழைக்கப்படுகிறது.





இந்த துணையை எவ்வாறு சரிசெய்வது ஆதரிக்கப்படாமல் போகலாம்

I2C தொடர்பு எவ்வாறு செயல்படுகிறது?

I2C இரண்டு இருதரப்புக் கோடுகளைப் பயன்படுத்துகிறது: தொடர் தரவு (எஸ்டிஏ) மற்றும் தொடர் கடிகாரம் (எஸ்சிஎல்) தரவு பரிமாற்றம் மற்றும் சாதனங்களுக்கு இடையே தகவல்தொடர்புகளை ஒத்திசைக்க. I2C பஸ்ஸுடன் இணைக்கப்பட்ட ஒவ்வொரு சாதனமும் தகவல்தொடர்புகளின் போது அதை அடையாளம் காணும் தனித்துவமான முகவரியைக் கொண்டுள்ளது. I2C நெறிமுறையானது ஒரே பேருந்தை பல சாதனங்களைப் பகிர அனுமதிக்கிறது, மேலும் ஒவ்வொரு சாதனமும் முதன்மையாகவோ அல்லது அடிமையாகவோ செயல்பட முடியும்.

  I2C தொடர்பு விளக்கம்

தகவல்தொடர்பு முதன்மை சாதனத்தால் தொடங்கப்படுகிறது, மேலும் அடிமை சாதனங்களின் தவறான முகவரி பரிமாற்றத்தில் பிழைகளை ஏற்படுத்தும். எங்கள் ஆழமான வழிகாட்டியைப் பாருங்கள் UART, SPI மற்றும் I2C தொடர் தொடர்புகள் எவ்வாறு செயல்படுகின்றன உங்களுக்கு சில சூழலைக் கொடுக்க.



I2C தகவல்தொடர்புகளின் முக்கிய நன்மை, மின் மேலாண்மைக்கு வரும்போது அது வழங்கும் நெகிழ்வுத்தன்மையாகும். வெவ்வேறு மின்னழுத்த நிலைகளில் செயல்படும் சாதனங்கள் மின்னழுத்த ஷிஃப்டர்களின் உதவியுடன் இன்னும் திறம்பட தொடர்பு கொள்ள முடியும். அதாவது 3.3V இல் இயங்கும் சாதனங்களுக்கு 5V I2C பஸ்ஸுடன் இணைக்க வோல்டேஜ் ஷிஃப்டர்கள் தேவை.

கம்பி நூலகம்

வயர் லைப்ரரி என்பது உள்ளமைக்கப்பட்ட Arduino நூலகமாகும், இது I2C மூலம் தொடர்புகொள்வதற்கான செயல்பாடுகளை வழங்குகிறது. இது I2C தகவல்தொடர்புக்காக Arduino போர்டில் SDA மற்றும் SCL ஆகிய இரண்டு ஊசிகளைப் பயன்படுத்துகிறது.





Arduino Uno இல் I2C பின்கள்:

  Arduino I2C Uno ஊசிகள்

Arduino Nano I2C பின்கள்:





  Arduino நானோ I2C பின்அவுட்

நூலகத்தைப் பயன்படுத்த, நீங்கள் சேர்க்க வேண்டும் வயர்.எச் உங்கள் Arduino ஓவியத்தின் தொடக்கத்தில் தலைப்பு கோப்பு.

மார்ஷ்மெல்லோ பயன்பாடுகளை எஸ்டி கார்டுக்கு நகர்த்தவும்
 #include <Wire.h>

வயர் நூலகம் I2C சாதனத்துடன் தொடர்பைத் தொடங்க, தரவை அனுப்ப மற்றும் தரவைப் பெறுவதற்கான செயல்பாடுகளை வழங்குகிறது. நீங்கள் தெரிந்து கொள்ள வேண்டிய சில முக்கியமான செயல்பாடுகள்:

  • Wire.begin() : I2C பேருந்தில் சேரவும், தொடர்பைத் தொடங்கவும் பயன்படுகிறது.
  • Wire.beginTransmission() : அடிமை முகவரியைக் குறிப்பிடவும், பரிமாற்றத்தைத் தொடங்கவும் பயன்படுகிறது.
  • Wire.write() : I2C சாதனத்திற்கு தரவை அனுப்ப பயன்படுகிறது.
  • Wire.endTransmission() : பரிமாற்றத்தை முடிக்கவும் பிழைகளைச் சரிபார்க்கவும் பயன்படுகிறது.
  • Wire.requestFrom() : I2C சாதனத்திலிருந்து தரவைக் கோரப் பயன்படுகிறது.
  • Wire.available() : I2C சாதனத்திலிருந்து படிக்க தரவு உள்ளதா என்பதைச் சரிபார்க்கப் பயன்படுகிறது.
  • கம்பி.ரீட்() : I2C சாதனத்திலிருந்து தரவைப் படிக்கப் பயன்படுகிறது.

பயன்படுத்த Wire.beginTransmission() சென்சாரின் முகவரியை அமைப்பதற்கான செயல்பாடு, இது ஒரு வாதமாக செருகப்படுகிறது. எடுத்துக்காட்டாக, சென்சாரின் முகவரி என்றால் 0x68 , நீங்கள் பயன்படுத்துவீர்கள்:

 Wire.beginTransmission(0x68);

Arduino I2C வன்பொருள் அமைப்பு

I2C ஐப் பயன்படுத்தி இரண்டு Arduino போர்டுகளை இணைக்க, உங்களுக்கு பின்வரும் வன்பொருள் கூறுகள் தேவைப்படும்:

  • இரண்டு Arduino பலகைகள் (மாஸ்டர் மற்றும் அடிமை)
  • ப்ரெட்போர்டு
  • ஜம்பர் கம்பிகள்
  • இரண்டு 4.7kΩ புல்-அப் மின்தடையங்கள்

இணைக்கவும் SDA மற்றும் எஸ்சிஎல் இரண்டு Arduino பலகைகளின் ஊசிகளும் ஒரு ப்ரெட்போர்டுக்கு. இடையே இழுக்கும் மின்தடையங்களை இணைக்கவும் SDA மற்றும் எஸ்சிஎல் ஊசிகள் மற்றும் 5V ப்ரெட்போர்டில் பவர் ரெயில். இறுதியாக, ஜம்பர் கம்பிகளைப் பயன்படுத்தி இரண்டு பிரட்போர்டுகளையும் ஒன்றாக இணைக்கவும்.

Arduino Uno சுற்று

  ப்ரெட்போர்டில் Arduino_I2C இணைப்பு

Arduino நானோ சர்க்யூட்

  I2C தொடர்பு நெறிமுறைக்கான nano33BS_06_illustration
பட உதவி: Arduino I2C ஆவணங்கள்

Arduino பலகைகளை I2C மாஸ்டர் மற்றும் ஸ்லேவ் சாதனங்களாக அமைத்தல்

பயன்படுத்த Wire.requestFrom() நாம் தொடர்பு கொள்ள விரும்பும் அடிமை சாதனத்தின் முகவரியைக் குறிப்பிடுவதற்கான செயல்பாடு. பின்னர் பயன்படுத்தவும் கம்பி.ரீட்() அடிமை சாதனத்திலிருந்து தரவைப் பெறுவதற்கான செயல்பாடு.

முதன்மை சாதனக் குறியீடு:

 #include <Wire.h> 
void setup() {
Wire.begin(); // join i2c bus
Serial.begin(9600); // start serial for output
}
void receiveData() {
int address = 8;
int bytesToRead = 6;
Wire.requestFrom(address, bytesToRead);
while (Wire.available()) {
char data = Wire.read();
Serial.print(data);
}
delay(500);
}
void loop() {
receiveData();
}

தி Wire.onReceive() முதன்மை சாதனத்திலிருந்து அடிமை தரவைப் பெறும்போது என்ன செய்ய வேண்டும் என்பதைக் குறிப்பிட செயல்பாடு பயன்படுத்தப்படுகிறது. மேலே உள்ள குறியீட்டில், தி Wire.available() செயல்பாடு தரவு உள்ளதா என சரிபார்க்கிறது, மற்றும் கம்பி.ரீட்() செயல்பாடு முதன்மை சாதனம் அனுப்பிய தரவைப் படிக்கிறது.

ஸ்லேவ் சாதனக் குறியீடு:

 #include <Wire.h> 
void setup() {
Wire.begin(8); // join the I2C bus with address 8
Wire.onReceive(receiveEvent); // call receiveEvent when data is received
}
void loop() {
delay(100);
}
void receiveEvent(int bytes) {
Wire.write("hello "); // respond with message of 6 bytes as expected by master
}

I2C ஐப் பயன்படுத்தி தரவை அனுப்புதல் மற்றும் பெறுதல்

இந்த எடுத்துக்காட்டில், அடிமை Arduino உடன் இடைமுகப்படுத்தப்பட்ட DHT11 வெப்பநிலை சென்சாரிலிருந்து வெப்பநிலையைப் படித்து, மாஸ்டர் Arduino இன் தொடர் மானிட்டரில் அச்சிடுவோம்.

  2 Arduino பலகைகளுடன் DHT11 I2C உதாரணம்

வெப்பநிலை அளவீட்டைச் சேர்க்க நாம் முன்பு எழுதிய குறியீட்டை மாற்றியமைப்போம், அதை நாங்கள் I2C பேருந்தின் மாஸ்டர் போர்டுக்கு அனுப்புவோம். மாஸ்டர் போர்டு நாம் அனுப்பிய மதிப்பைப் படித்து, சீரியல் மானிட்டரில் காண்பிக்க முடியும்.

முதன்மை சாதனக் குறியீடு:

 #include <Wire.h> 
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Master Initialized!");
}
void loop() {
Wire.requestFrom(8, 1); // Request temperature data from slave
if (Wire.available()) {
byte temperature = Wire.read(); // Read temperature data from slave
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" &deg;C");
}
delay(2000); // Wait for 2 seconds before requesting temperature again
}

ஸ்லேவ் சாதனக் குறியீடு:

 #include <Wire.h> 
#include <DHT.h>

#define DHTPIN 4 // Pin connected to DHT sensor
#define DHTTYPE DHT11 // DHT sensor type
DHT dht(DHTPIN, DHTTYPE);
byte temperature;

void setup() {
Wire.begin(8); // Slave address is 8
Wire.onRequest(requestEvent);
dht.begin();
}

void loop() {
delay(2000); // Wait for 2 seconds for DHT to stabilize
temperature = dht.readTemperature(); // Read temperature from DHT sensor
}

void requestEvent() {
Wire.write(temperature); // Send temperature data to master
}

உங்கள் திட்டத்தில் நீங்கள் வைத்திருக்கும் சென்சார்களுக்கு ஏற்றவாறு இந்தக் குறியீட்டைத் தனிப்பயனாக்கலாம் அல்லது காட்சித் தொகுதியில் சென்சார் மதிப்புகளைக் காட்டலாம் உங்கள் சொந்த அறை வெப்பமானி மற்றும் ஈரப்பதம் மீட்டர் .

ஒரு பக்க இடைவெளியில் இருந்து விடுபடுவது எப்படி

Arduino இல் I2C உடன் ஸ்லேவ் முகவரி

அத்தகைய திட்டத்தில் I2C பஸ்ஸில் சேர்க்கப்பட்ட கூறுகளின் மதிப்புகளைப் படிக்க, குறியீட்டு முறையின் போது சரியான அடிமை முகவரியைச் சேர்ப்பது முக்கியம். அதிர்ஷ்டவசமாக, Arduino ஒரு ஸ்கேனர் நூலகத்தை வழங்குகிறது, இது அடிமை முகவரிகளை அடையாளம் காணும் செயல்முறையை எளிதாக்குகிறது, நீண்ட சென்சார் தரவுத் தாள்கள் மற்றும் குழப்பமான ஆன்லைன் ஆவணங்களைத் தேட வேண்டிய அவசியத்தை நீக்குகிறது.

I2C பேருந்தில் உள்ள அடிமை சாதனத்தின் முகவரியைக் கண்டறிய பின்வரும் குறியீட்டைப் பயன்படுத்தவும்.

 #include <Wire.h> // Include the Wire library for I2C communication 

void setup() {
Wire.begin(); // Initialize the I2C communication
Serial.begin(9600); // Initialize the serial communication with a baud rate of 9600
while (!Serial); // Wait for the serial connection to establish
Serial.println("\nI2C Scanner"); // Print a message indicating the start of I2C scanning
}

void loop() {
byte error, address; // Declare variables to store errors and device addresses
int nDevices; // Declare a variable to store the number of devices found

Serial.println("Scanning..."); // Print a message indicating the start of I2C scanning

nDevices = 0; // Set the number of devices found to 0
for (address = 1; address < 127; address++) { // Iterate over all possible I2C addresses
Wire.beginTransmission(address); // Start a transmission to the current address
error = Wire.endTransmission(); // End the transmission and store any errors

if (error == 0) { // If no errors were found
Serial.print("I2C device found at address 0x"); // Print a message indicating a device was found
if (address < 16) Serial.print("0"); // If the address is less than 16, add a leading 0 for formatting purposes
Serial.print(address, HEX); // Print the address in hexadecimal format
Serial.println(" !"); // Print a message indicating a device was found

nDevices++; // Increment the number of devices found
}
else if (error == 4) { // If an error was found
Serial.print("Unknown error at address 0x"); // Print a message indicating an error was found
if (address < 16) Serial.print("0"); // If the address is less than 16, add a leading 0 for formatting purposes
Serial.println(address, HEX); // Print the address in hexadecimal format
}
}
if (nDevices == 0) { // If no devices were found
Serial.println("No I2C devices found\n"); // Print a message indicating no devices were found
}
else { // If devices were found
Serial.println("done\n"); // Print a message indicating the end of I2C scanning
}
delay(5000); // Delay for 5 seconds before starting the next scan
}

இன்று உங்கள் திட்டத்தை விரிவாக்குங்கள்

I2C தொடர்பு நெறிமுறையைப் பயன்படுத்தி இரண்டு Arduino பலகைகளை இடைமுகப்படுத்துவது, ஒரு பலகையால் கையாள முடியாத சிக்கலான பணிகளை அடைவதற்கான நெகிழ்வான மற்றும் திறமையான வழியை வழங்குகிறது. வயர் நூலகத்தின் உதவியுடன், I2C ஐப் பயன்படுத்தி இரண்டு பலகைகளுக்கு இடையேயான தொடர்பு எளிதாக்கப்படுகிறது, இது உங்கள் திட்டத்தில் கூடுதல் கூறுகளைச் சேர்க்க அனுமதிக்கிறது.

வகை DIY