🧩 معرفی پروتکل I2C — ارتباط سریال دو سیمه در دنیای الکترونیک
✅ I2C چیست؟
پروتکل I2C (مخفف Inter-Integrated Circuit) یکی از معروفترین روشهای ارتباطی در الکترونیک دیجیتال است که برای تبادل داده بین میکروکنترلرها و قطعات جانبی (مثل سنسورها، نمایشگرها، RTC، حافظهها و …) استفاده میشود.
🔌 ویژگیهای کلیدی I2C
ویژگی | توضیح |
---|---|
نوع ارتباط | سریال (Serial) |
تعداد سیمها | فقط ۲ سیم (SDA برای داده، SCL برای کلاک) |
حالت ارتباط | Master-Slave |
سرعت انتقال | تا ۳.۴ Mbps (در حالت High-Speed) |
تعداد دستگاهها | تا ۱۲۷ دستگاه (با آدرسدهی منحصر به فرد) |
🧠 نحوه عملکرد I2C
I2C از یک مستر (مثلاً آردوینو) برای کنترل انتقال دادهها استفاده میکند. دستگاههای دیگر به عنوان Slave منتظر دستور مستر میمانند.
- SDA: خط داده (Data)
- SCL: خط کلاک (Clock)
هر دستگاه Slave دارای یک آدرس یونیک است (معمولاً ۷ بیتی یا ۱۰ بیتی). زمانی که مستر میخواهد با یک دستگاه خاص ارتباط برقرار کند، آدرس آن را روی باس قرار میدهد.
🔗 مزایای I2C
✅ تنها دو سیم برای ارتباط با چند دستگاه
✅ سرعت مناسب برای بیشتر پروژههای DIY
✅ پشتیبانی وسیع توسط کتابخانههای آردوینو، STM32، ESP32 و …
✅ محبوب در پروژههای رباتیک و سنسورها
🔌 کاربردهای I2C در پروژهها
ماژول یا سنسور | توضیح |
---|---|
MPU6050 | ژیروسکوپ و شتابسنج ۳ محوره |
OLED Display | نمایشگرهای کوچک با رزولوشن بالا |
RTC (DS3231) | ساعت دقیق واقعی |
EEPROM | حافظههای خارجی غیر فرّار |
📐 نمونه کد ساده برای خواندن اطلاعات از یک دستگاه I2C (مثلاً MPU6050)
#include <Wire.h>
void setup() {
Wire.begin(); // شروع ارتباط I2C
Serial.begin(9600);
}
void loop() {
Wire.beginTransmission(0x68); // آدرس I2C دستگاه
Wire.write(0x3B); // رجیستر شروع داده
Wire.endTransmission(false);
Wire.requestFrom(0x68, 6); // درخواست خواندن ۶ بایت
while (Wire.available()) {
int data = Wire.read();
Serial.print(data); Serial.print(" ");
}
Serial.println();
delay(500);
}