آموزش آردوینو

آموزش پروتکل I2C با آردوینو

نوشته شده توسط اروند طباطبایی

پروتکل I2C یک ارتباط سریال از طریق دو سیم می باشد که یک ارتباط سنکرون است و از یک کلاک خارجی تبعیت می‌کند. منظور از دو سیم این است که خط انتقال دیتا دوطرفه است ولی در پروتکل SPI یک خط فرستنده ویک خط گیرنده است. در ادامه با وب سایت مرجع آردوینو، دیجی اسپارک همراه باشید.

 


ارتباط I2C چیست؟


I2C (Inter-Integrated Circuit) یک رابط سریال برای ارتباط بین دستگاه‌های الکترونیکی است که از طریق خطوط داده و کنترل که در طولی مشترک به اشتراک گذاشته می‌شوند، عمل می‌کند. I2C یک استاندارد متعارف است که توسط شرکت فیلیپس در دهه ۱۹۸۰ توسعه یافته است و اکنون توسط کمپانی‌های دیگر نیز پشتیبانی می‌شود.I2C برای ارتباط میان میکروکنترلرها، سنسورها، IC ها و دیگر قطعات الکترونیکی کاربرد دارد. از آن برای انتقال داده‌های دیجیتالی بین دستگاه‌ها استفاده می‌شود. I2C شامل دو خط اصلی است:

  •  خط ساعت (Clock line): این خط توسط دستگاه فرستنده کنترل می‌شود و سیگنال‌ها را هماهنگ می‌کند.
  • خط داده (Data line): این خط برای انتقال داده بین دستگاه فرستنده و گیرنده استفاده می‌شود.

I2C از معماری مستر-اسلیو (Master-Slave) استفاده می‌کند، به این معنی که یک دستگاه میزبان (مستر ) ارتباط را کنترل می‌کند و دستگاه‌های دیگر (اسلیو) پاسخ می‌دهند. هر دستگاه I2C یک آدرس منحصر به فرد دارد که توسط دستگاه مستر برای ارتباط با آن استفاده می‌شود.I2C قابلیت ارتباط با بیش از یک دستگاه را فراهم می‌کند، با استفاده از تکنیک مولتی‌مسترینگ (Multi-Mastering)، که به چندین دستگاه مستر اجازه می‌دهد اطلاعات را به طور همزمان ارسال کنند.با I2C، ارتباط بین دستگاه‌ها به صورت سریال انجام می‌شود. داده‌ها به صورت بیت به بیت ارسال می‌شوند. هر دستگاه متصل به خطوط I2C دارای یک آدرس منحصر به فرد است که با استفاده از آن، دستگاه مستر می‌تواند به هر دستگاه ارتباطی برقرار کند.عملکرد I2C در حالت استاندارد به این صورت است که دستگاه مستر بر روی خط ساعت (Clock line) سیگنال‌های ساعت را تولید می‌کند و در هنگام انتقال داده، وضعیت خط داده (Data line) را مشاهده می‌کند. هنگامی که دستگاه مستر می‌خواهد داده ارسال کند، آن را روی خط داده قرار می‌دهد و در هنگام خواندن داده، مشاهده می‌کند که دستگاه اسلیو پاسخی دریافت کرده است یا خیر.I2C دارای دو حالت عملکرد است: حالت خواندن (Read) و حالت نوشتن (Write). در حالت خواندن، دستگاه مستر ابتدا آدرس دستگاه اسلیو را ارسال می‌کند و سپس دستگاه اسلیو داده مورد نظر را به آن می‌فرستد. در حالت نوشتن، دستگاه مستر آدرس دستگاه اسلیو و سپس داده‌هایی که باید به آن ارسال شود را ارسال می‌کند.از مزیت‌های I2C می‌توان به سادگی استفاده، امکان ارتباط با بیش از یک دستگاه، پشتیبانی از مولتی‌مسترینگ و امکان توسعه سیستم با استفاده از گستره وسیعی از قطعات الکترونیکی I2C اشاره کرد.

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

کاربردهای I2C

  •  ارتباط با سنسورها: بسیاری از سنسورها و ماژول‌های اندازه‌گیری مانند سنسورهای دما، رطوبت، فشار و شتاب‌سنج‌ها از رابط I2C برای ارتباط با میکروکنترلرها استفاده می‌کنند.
  • ارتباط با حافظه‌های خارجی: برخی از حافظه‌های خارجی مانند EEPROM و FRAM نیز از I2C برای ارتباط با میکروکنترلرها استفاده می‌کنند.
  •  کنترل قطعات الکترونیکی: قطعات الکترونیکی مانند آی‌سی‌ها و ماژول‌های مختلف نیز می‌توانند از رابط I2C برای کنترل و مدیریت تنظیمات خود استفاده کنند.
  • ارتباط بین میکروکنترلرها: I2C می‌تواند برای ارتباط بین دو یا چند میکروکنترلر استفاده کند و امکان انتقال داده‌ها و دستورات بین آنها را فراهم کند. این امر برای سیستم‌هایی که نیاز به ارتباط و هماهنگی بین چندین میکروکنترلر دارند، بسیار مفید است. با استفاده از I2C، میکروکنترلرها می‌توانند اطلاعات را با هم به اشتراک بگذارند و وظایف خاصی را انجام دهند.
  •  کنترل صفحه نمایش: برخی از صفحه‌های نمایش مانند LCD و OLED نیز می‌توانند از I2C برای ارتباط و کنترل توسط میکروکنترلر استفاده کنند.

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

 


پروتکل ارتباطی I2C چگونه کار می‎‌کند؟


I2C براساس تبادل بیت به بیت داده‌ها بین دستگاه مستر و دستگاه‌های اسلیوکار می‌کند. فرآیند ارتباط I2C شامل چندین مرحله است:

  • شروع ارتباط (Start): دستگاه مستر با ارسال سیگنال شروع (Start signal) ارتباط را آغاز می‌کند. این سیگنال شامل کاهش خط داده در حالت فعال (HIGH) در حالی است که خط ساعت در حالت فعال باقی می‌ماند. این سیگنال نشان‌دهنده شروع عملکرد I2C است.
  • ارسال آدرس (Address): دستگاه مستر آدرس دستگاه اسلیو را ارسال می‌کند. آدرس اسلیو شامل ۷ بیت است و یک بیت سمت چپ در آدرس مشخص می‌کند که دستگاه مستر در حالت خواندن یا نوشتن است.
  • تأیید آدرس (Address Acknowledgment): دستگاه اسلیو که آدرس مورد نظر برای آن است، به آدرس رسیده و در صورت صحیح بودن آدرس، یک سیگنال تأیید (Acknowledge signal) به دستگاه مستر ارسال می‌کند. در صورت عدم تطابق آدرس یا عدم حضور دستگاه اسلیو، سیگنال عدم تأیید (Nacknowledge signal) ارسال می‌شود.
  • انتقال داده‌ها (Data Transfer): پس از تأیید آدرس، دستگاه مستر و دستگاه اسلیو می‌توانند داده‌ها را ارسال و دریافت کنند. در هر مرحله، دستگاه مستر یک بیت داده را روی خط داده قرار می‌دهد و سپس دستگاه اسلیو با خواندن وضعیت خط داده به دستگاه مستر پاسخ می‌دهد. پس از انتقال هر بیت داده، دستگاه مستر با صحت پاسخ اسلیوتأیید می‌کند.
  • خاتمه ارتباط (Stop): پس از انتقال تمام داده‌ها، دستگاه مستر با ارسال سیگنال پایان (Stop signal) ارتباط را به پایان می‌رساند. این سیگنال شامل افزایش خط داده در حالت فعال به همراه خط ساعت در حالت فعال است. سیگنال پایان نشان‌دهنده اتمام عملکرد I2C است.

در بین این مراحل، دستگاه مستر و دستگاه‌های اسلیو باید به توافقی مشترک در مورد سرعت ارتباط (بیت در ثانیه)، نوع پروتکل انتقال داده و طول داده موافقت کنند.به عنوان یک رابط سریال، I2C دارای توانایی اتصال چندین دستگاه است که هر کدام دارای یک آدرس منحصر به فرد هستند. با استفاده از آدرس، دستگاه مستر می‌تواند با دستگاه‌های اسلیو در ارتباط باشد و داده‌ها را تبادل کند.از آنجایی که I2C یک رابط سریال است، تعداد پین‌های مورد نیاز برای اتصال دستگاه‌ها کم است و این اجازه را می‌دهد که در سیستم‌هایی که فضای محدودی دارند، به راحتی استفاده شود. علاوه بر این، I2C از قابلیت تشخیص و رفع تداخل داده‌ها نیز برخوردار است.به طور کلی، I2C یک روش موثر و متداول برای ارتباط بین دستگاه‌های الکترونیکی است. این رابط معمولاً در صنعت الکترونیک، رباتیک، سیستم‌های جانبی کامپیوتر و بسیاری از سیستم‌های مبتنی بر میکروکنترلر استفاده می‌شود.

 


انتقال داده در I2C به چه صورت است؟


در I2C، انتقال داده به صورت بیت به بیت انجام می‌شود. هر بیت داده با استفاده از خطوط داده (SDA) و ساعت (SCL) ارسال و دریافت می‌شود. دستگاه مستر کنترل کننده ارتباط است و بیت‌های داده را ارسال می‌کند، در حالی که دستگاه‌های اسلیو (مانند سنسورها یا دستگاه‌های خارجی) پاسخ می‌دهند.

فرآیند ارسال یک بیت داده در I2C به شرح زیر است:

  • دستگاه مستر کاهش خط داده (SDA) را در حالت فعال (HIGH) نگه داشته و برای ارسال بیت داده، ساعت (SCL) را به حالت فعال (HIGH) می‌برد.
  • دستگاه مستر بیت داده را بر روی خط داده (SDA) قرار می‌دهد. اگر بیت داده ۰ باشد، خط داده کاهش و در صورت بیت داده ۱، خط داده در حالت فعال باقی می‌ماند.
  • پس از قرار دادن بیت داده بر روی خط داده، دستگاه مستر ساعت را به حالت غیرفعال (LOW) می‌برد. این تغییر در حالت ساعت نشان‌دهنده اتمام ارسال بیت داده است.
  • دستگاه اسلیو بعد از دریافت بیت داده، خط داده را خوانده و وضعیت آن را به دستگاه مستر می‌فرستد. در صورتی که بیت داده به درستی دریافت شده باشد، دستگاه اسلیو با ارسال سیگنال تأیید (Acknowledge signal) به دستگاه مستر پاسخ می‌دهد. در غیر این صورت، سیگنال عدم تأیید (Nacknowledge signal) ارسال می‌شود.

این فرآیند برای ارسال هر بیت داده تکرار می‌شود و در نهایت، بایت‌های داده ترکیب شده و پیام کاملی تشکیل می‌دهند.در مورد در I2C، انتقال داده‌ها به صورت بسته‌بندی شده انجام می‌شود. یک بسته داده I2C شامل ۸ بیت اطلاعات است که به عنوان یک بایت شناخته می‌شود. انتقال داده در I2C شامل چندین بایت می‌شود.

فرآیند ارسال یک بسته داده در I2C به صورت زیر است:

  • شروع ارتباط (Start): دستگاه مستر با ارسال سیگنال شروع (Start signal) ارتباط را آغاز می‌کند. این سیگنال شامل کاهش خط داده (SDA) در حالت فعال (HIGH) در حالی که خط ساعت (SCL) در حالت فعال باقی می‌ماند است. این سیگنال نشان‌دهنده شروع عملکرد I2C است.
  • ارسال آدرس و بیت رایت (Address and Write bit): دستگاه مستر آدرس دستگاه اسلیو مورد نظر را به همراه بیت رایت (Write bit) ارسال می‌کند. آدرس اسلیو شامل ۷ بیت است و بیت رایت، نشان‌دهنده این است که دستگاه مستر در حالت نوشتن است.
  • تأیید آدرس (Address Acknowledgment): دستگاه اسلیو که آدرس مورد نظر برای آن است، به آدرس رسیده و در صورت صحیح بودن آدرس، یک سیگنال تأیید (Acknowledge signal) به دستگاه مستر داده: پس از تأیید آدرس، دستگاه مستر بایت‌های داده را به دستگاه اسلیو ارسال می‌کند. هر بایت داده شامل ۸ بیت است. بعد از ارسال هر بیت داده، دستگاه اسلیو با خواندن وضعیت خط داده (SDA) پاسخ می‌دهد.
  • تأیید دریافت (Data Acknowledgment): بعد از دریافت هر بایت داده، دستگاه اسلیو با ارسال سیگنال تأیید (Acknowledge signal) به دستگاه مستر پاسخ می‌دهد. این سیگنال تأیید نشان‌دهنده دریافت صحیح بایت داده است. در صورتی که دستگاه اسلیو بایت داده را به درستی دریافت کرده باشد، سیگنال تأیید را ارسال می‌کند. در غیر این صورت، سیگنال عدم تأیید (Nacknowledge signal) را ارسال می‌کند.
  • ادامه انتقال بایت‌های داده: فرآیند انتقال بایت‌های داده به همین ترتیب تکرار می‌شود تا تمام بایت‌های داده ارسال شوند.
  • خاتمه ارتباط (Stop): پس از انتقال تمام بایت‌های داده، دستگاه مستر با ارسال سیگنال پایان (Stop signal) ارتباط را به پایان می‌رساند. این سیگنال شامل افزایش خط داده (SDA) به حالت فعال (HIGH) به همراه خط ساعت (SCL) در حالت فعال است. سیگنال پایان نشان‌دهنده اتمام عملکرد I2C است.

مهم است بدانید که در هر بسته داده I2C، بیتی به نام بیت ACK از سمت دستگاه اسلیو به دستگاه رارسال می‌شود تا نشان دهد که بایت داده به درستی دریافت شده است. اگر دستگاه اسلیو بایت را به درستی دریافت کند، بیت ACK را ارسال می‌کند. در غیر این صورت، بیت ACK ارسال نمی‌شود و دستگاه مستر می‌تواند دریافت ناکامل یا خطا را تشخیص دهد.ین فرآیند برای انتقال داده‌های بیشتر در I2C تکرار می‌شود و تمام بسته‌های داده به این صورت ارسال و دریافت می‌شوند.

 


بیت داده در پروتکل I2C چیست؟


بیت داده در پروتکل I2C نشان‌دهنده یک بیت اطلاعات است که بین دستگاه مستر و دستگاه‌های اسلیو تبادل می‌شود. این بیت می‌تواند مقدار ۰ یا ۱ داشته باشد و نشان‌دهنده حالت خط داده (SDA) است.وقتی دستگاه مستر می‌خواهد بیت داده را ارسال کند، با تغییر حالت خط داده به مقدار مطلوب (۰ یا ۱)، بیت داده را ارسال می‌کند. از طرفی، دستگاه اسلیو با خواندن وضعیت خط داده، بیت داده را دریافت می‌کند.برای نمونه، وقتی دستگاه مستر می‌خواهد بیت داده را ۱ ارسال کند، خط داده را در حالت فعال (HIGH) نگه داشته و خط ساعت را به حالت فعال (HIGH) می‌برد. این تغییر در حالت خط داده نشان‌دهنده بیت داده ۱ است. به همین ترتیب، ارسال بیت داده ۰ توسط دستگاه مستر به معنی کاهش حالت خط داده به فعال (LOW) است.در مقابل، دستگاه اسلیو با خواندن وضعیت خط داده (SDA) می‌تواند بیت داده را دریافت کند. وقتی خط داده در حالت فعال (HIGH) باشد، این نشان‌دهنده بیت داده ۱ است و وقتی خط داده در حالت غیرفعال (LOW) باشد، این نشان‌دهنده بیت داده ۰ است.بیت داده در پروتکل I2C بین دستگاه‌های رو اسلیو جهت انتقال اطلاعات استفاده می‌شود و در فرآیندهای ارسال و دریافت داده در این رابط استفاده می‌شود.بیت داده در پروتکل I2C نقش مهمی در انتقال اطلاعات بین دستگاه مستر و دستگاه‌های اسلیو دارد. در هر بایت داده I2C، هشت بیت اطلاعات قرار دارد که به ترتیب از مقدار بیت سنگین‌تر (MSB) تا بیت سبک‌تر (LSB) خوانده می‌شوند.دستگاه مستر بیت داده را با تغییر حالت خط داده (SDA) ارسال می‌کند. اگر بیت داده ۰ باشد، خط داده به حالت غیرفعال (LOW) کاهش پیدا می‌کند و اگر بیت داده ۱ باشد، خط داده در حالت فعال (HIGH) باقی می‌ماند.دستگاه اسلیو با خواندن وضعیت خط داده می‌تواند بیت داده را دریافت کند. اگر خط داده در حالت غیرفعال (LOW) باشد، دستگاه اسلیو آن را به معنی بیت داده ۰ تشخیص می‌دهد و اگر خط داده در حالت فعال (HIGH) باشد، بیت داده ۱ تشخیص داده می‌شود.بعد از ارسال یا دریافت هر بیت داده، بایت ACK (تأیید دریافت) ارسال می‌شود. اگر دستگاه اسلیو بیت داده را به درستی دریافت کند، سیگنال ACK ارسال می‌شود. در غیر این صورت، سیگنال NACK (عدم تأیید) ارسال می‌شود.بیت داده در پروتکل I2C به همراه ساعت (SCL) و سیگنال‌های شروع (Start) و پایان (Stop) مورد استفاده قرار می‌گیرد تا ارتباط بین دستگاه‌های مستر و اسلیو برقرار شود و اطلاعات به صورت بیت به بیت منتقل شوند.

 


بایت آدرس در پروتکل I2C چیست؟


در پروتکل I2C، بایت آدرس نقش مهمی در تعیین دستگاه مورد نظر برای ارتباط با دستگاه مستر دارد. این بایت حاوی آدرس دستگاه اسلیو است که می‌خواهیم با آن ارتباط برقرار کنیم.بایت آدرس در I2C شامل ۷ بیت است و هر بیت به ترتیب از مقدار بیت سنگین‌تر (MSB) تا بیت سبک‌تر (LSB) خوانده می‌شود. این ۷ بیت آدرس تعیین کننده دستگاه اسلیو است که مستر می‌خواهد به آن ارتباط برقرار کند.مقدار بیت آدرس برای هر دستگاه اسلیو منحصر به فرد است. در نتیجه، با تغییر مقدار بیت‌های آدرس، مستر می‌تواند به دستگاه‌های مختلف اسلیو دسترسی پیدا کند.دستگاه مستر در فرآیند ارتباط با دستگاه اسلیو از بیت رایت (Write bit) استفاده می‌کند. این بیت مشخص می‌کند که دستگاه مستر در حالت نوشتن (Write mode) است و می‌خواهد داده‌ای را به دستگاه اسلیو ارسال کند.بایت آدرس همراه با بیت رایت توسط دستگاه مستر ارسال می‌شود و دستگاه اسلیو با خواندن این بیت‌ها، آدرس مورد نظر را تشخیص می‌دهد. پس از تشخیص آدرس صحیح، دستگاه اسلیو با ارسال سیگنال تأیید (ACK) به مستر می‌فهماند که آماده دریافت داده است و ارتباط برقرار می‌شود.در پروتکل I2C، بیت آخر بایت آدرس، مشخص کننده عملیاتی است که می‌خواهیم با دستگاه اسلیو انجام دهیم. این بیت، بیت رایت/خواندن (R/W bit) نامیده می‌شود.

  • اگر بیت R/W برابر با ۰ باشد، این به معنی درخواست نوشتن (Write request) به دستگاه اسلیو است. در این صورت، دستگاه مستر می‌خواهد داده‌ای را به دستگاه اسلیو ارسال کند.
  • اگر بیت R/W برابر با ۱ باشد، این به معنی درخواست خواندن (Read request) از دستگاه اسلیو است. در این صورت، دستگاه مستر می‌خواهد از دستگاه اسلیو داده‌ای را دریافت کند.

بنابراین، با ترکیب بیت‌های آدرس و بیت R/W، دستگاه مستر می‌تواند دستگاه اسلیو مورد نظر را انتخاب کرده و عملیات نوشتن یا خواندن را انجام دهد.

  • برای ارسال داده به دستگاه اسلیو با آدرس ۰۱۰۱۰۰۱ و درخواست نوشتن، دستگاه مستر بایت آدرس را به صورت ۰۱۰۱۰۰۱۰ (بیت رایت/خواندن برابر با ۰) ارسال می‌کند.
  • برای درخواست خواندن اطلاعات از دستگاه اسلیو با آدرس ۱۰۱۰۰۱۱، دستگاه مستر بایت آدرس را به صورت ۱۰۱۰۰۱۱۱ (بیت رایت/خواندن برابر با ۱) ارسال می‌کند.

بنابراین، بایت آدرس در پروتکل I2C شامل آدرس دستگاه اسلیو و بیت رایت/خواندن است که تعیین کننده انتخاب دستگاه و نوع عملیات (نوشتن یا خواندن) است.

 


بررسی کلاس I2C در آردوینو


در این ارتباط هم یک دستگاه فرستنده و دستگاه دیگر گیرنده است. ابتدا یک درخواست از فرستنده برای گیرنده ارسال می شود گیرنده درخواست فرستده را با کد صفر پاسخ می دهد. اگر گیرنده با فرستنده دیگری در ارتباط باشد کد ( یک ) ارسال می کند. پایه ارسال و دریافت دیتا SDA و پایه ارسال کلاک SCL نامیده می شوند ود در ماژول های مختلف آردوینو به شرح زیر است :

Board I2C / TWI pins
Uno, Ethernet A4 (SDA), A5 (SCL)
Mega2560 ۲۰ (SDA), 21 (SCL)
Leonardo ۲ (SDA), 3 (SCL)
Due ۲۰ (SDA), 21 (SCL), SDA1, SCL1

 

 

برنامه :

#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  Wire.requestFrom(2, 6);

  while(Wire.available())
  {
    char c = Wire.read();
    Serial.print(c);
  }

  delay(500);
}

 

 

شرح توابع کتابخانه Wire.h :

Wire.begin()
Wire.begin(address)

این تابع ارتباط را شروع می کند و گذرگاه به عنوان فرستنده یا گیرنده متصل می شود. فقط یکبار و درتابع setup() نوشته می شود.

 

 

پارامترها:

address: آدرس ۷بیتی گیرنده (اختیاری)؛ اگر مشخص نشود دستگاه به عنوان فرستنده متصل می شود.

Wire.requestFrom()

این تابع برای کد دستگاه فرستنده است و درخواست ارسال دیتا را به گیرنده بیان می کند.

Syntax

Wire.requestFrom(address, quantity)
Wire.requestFrom(address, quantity, stop)

پارامترها:

address : آدرس ۷ بیتی از دستگاه گیرنده

:number تعداد بایت های ارسالی

stop : بیت توقف . بعد از ارسال پیام (بایت) درخواستی ؛ گذرگاه را آزاد میکند.

Wire.read()

بایت ارسالی را از گیرنده به فرستنده بعداز فراخوانی تابع requestFrom() یا ارسال شده از فرستنده به گیرنده، می خواند.

تابع read() از کلاس Stream است.

Wire.available()

تعداد بیت های قابل دسترس را برای بازیابی با تابع read() برمیگرداند.

این تابع در برنامه فرستنده بعد از فراخوانی requestFrom() و در برنامه گیرنده در تابع کنترلی onReceive() استفاده می شود.

این تابع از کلاس Stream است.

Wire.beginTransmission(address)
Wire.write()
Wire.endTransmission()

با تابعbeginTransmission() ارسال به گیرنده با آدرس داده شده شروع میشود. سپس تابع write() سری بایت های ارسالی را می نویسد. ( در برنامه گیرنده این تابع برای پاسخ به درخواست فرستنده استفاده می شود.)

Syntax

Wire.write(value)
Wire.write(string)
Wire.write(data, length)

value : برای ارسال یک بایت

string : برای ارسال یک سری از بایت

data : یک آرایه از بایت

length : تعداد بایت ارسالی

 

 

در ادامه به سایر توابع توضیح داده می شود.

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

اروند طباطبایی

بنیانگذار دیجی اسپارک: اولین مرجع تخصصی امبدد سیستم به زبان فارسی / کارشناس سئو و تولید محتوا

هرچه می آموزم میبینم که خیلی کم آموختم. علاقه به رباتیک و تکنولوژی دارم. امیدوارم بتونم دانشی را که آموخته‌ام، به روش‌های مختلفی به کاربران علاقمند منتقل کنم.

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

۱۱ دیدگاه

  • سلام
    چگونه می توان از ۴ سنسور سنجش شدت نور مثل BH1750 اطلاعات را دریافت کرد؟ آیا با مالتی پلکسر cd4051 این کارامکان پذیر است؟ اگر بلی خروجی SCL و SDA سنسور سنجش شدت نور به کدام پایه های مالتی پلکسر cd4051 وصل می شود؟

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

  • سلام،
    من یک سنسور MPU6050 رو از طریق پروتکل I2C با برد آردوینو UNO و Mega پروگرام کردم و بدون مشکل داده های سنسور را دریافت کردم. اما همون کد در آردوینو DUE به درستی اجرا نمیشه و پس از چند دقیقه کارکرد صحیح، گیر کرده و ارتباط I2C قطع میگردد.
    حال میخواستم یدونم این مشکل مربوط به کتابخونه DUE هست؟ و آیا راه کاری برای اون وجود دارد یا خیر؟

    • با سلام
      عملکرد برد DUE با آردوینو uno و mega کاملا متفاوت است و نیاز به تغییرات خواهد داشت.

    • با سلام
      کتابخانه ای برای ارتباط با I2C توسعه داده شده است و با فراخوانی آن دستورات اجرا می‌شود.

      • سلام
        ممنونمیشم اگر امکانش هست بیشتر در این باره توضیح بدین،
        این اگر بخواهیم به اردوینو uno دو ماژول که هر دو با پروتکل i2c کار می کنند(مثلا همین max30102و max30205) متصل کنیم، با توجه به این که فقط دو پایه برای اتصال i2c رو برد اردوینو داریم، چگونه باید اتصالات سخت افزاری را انجام دهیم و در نوشتن برنامه(در حالی که میخوایم از کتابخونه های موجود برای این ماژول ها مثل همین کتابخونه ای که در این اموزش استفاده شده،استفاده کنیم) باید چه نکاتی را اعمال کنیم؟

        • با سلام
          تنها کافیست از پایه ها اشتراک بگیرید. هر سنسور I2c کد منحصر به فردی دارد که بایستی در کدهای برنامه کد I2C هر سنسور را دریافت و جداگانه تعریف کنید.

  • سلام خسته نباشید مهندس
    یه سوال داشتم اینکه میشه به یک اردوینو دو پروتکل i2c متصل کرد؟
    یا اصلا میشه پلیه های دیگر اردوینو را به عنوان i2c در نظر گرفت؟

    • با سلام
      بله امکان پذیر است. البته هر مدل از بردهای آردوینو قابلیتهای خاص خودشان را دارند. ولی شما میتوانید از شیلدهای توسعه دهنده برای این منظور استفاده کنید مانند شیلدهای پرومیک که مخصوص این موضوع طراحی شده اند.