Arduino Uno 中的 I2C/Wire


I2C 代表積體電路間通訊。它是一種流行的通訊協議,被許多外設使用,例如加速度計和陀螺儀、OLED 顯示屏等。Arduino 將 I2C 稱為 Wire,這是 Atmel 使用的術語(雙線介面或 TWI)的簡寫形式。以下是 I2C 的一些主要特性:

  • 它僅使用兩條線:一條用於資料 (SDA),一條用於時鐘 (SCL)。I2C 是同步的,因為它使用時鐘。

  • 從機不是透過從機選擇線來選擇的,而是透過地址位來選擇的。

  • 主裝置傳送的第一個位元組包含一個 7 位地址和一個讀/寫位,指示後續位元組將來自主裝置還是來自從機。因此,最多 127 個具有唯一地址的從機可以連線到單個主裝置。

  • 在每個位元組之後,接收機必須傳送一個 0 來確認位元組的接收。

  • 如果主裝置想要接收資料,它只需生成時鐘脈衝。從機必須確保在時鐘脈衝到達時準備好下一個位。

  • 資料和時鐘線被上拉,即兩個電阻將匯流排拉至高電平,裝置僅傳送低電平。如果他們想要傳送高電平,他們只需釋放匯流排。

  • 需要開始/停止序列來表示通訊的開始和結束。

Arduino Uno 支援 I2C。以下引腳通常用於 SPI:

  • SDA - A4

  • SCL - A5

Arduino 具有內建的 Wire 庫。該庫的重要函式如下所示:

  • Wire.begin() - 初始化 Wire

  • Wire.beginTransmission(address) - 與由 address 標識的從機啟動傳輸

  • Wire.endTransmission() - 結束由 beginTransmission() 啟動的傳輸

  • Wire.SetClock(frequency) - 將時鐘速度設定為 frequency(以 Hz 為單位)

  • Wire.write(byte) - 將位元組排隊以從主裝置傳輸到從機,或在響應主裝置的請求時寫入從機的資料

  • Wire.read() - 如果主裝置向從機發送 requestFrom(),則它將使用此函式讀取返回的位元組。或者,如果主裝置向從機傳輸了位元組,則從機上的此函式將用於讀取這些位元組

要了解有關這些函式的不同引數的更多資訊,以及瞭解與 Wire 相關的其他重要函式,您可以檢視 Arduino 關於 Wire 的參考文件

建議您瀏覽與 Wire 相關的內建示例,可以從 檔案 → 示例 → Wire 訪問這些示例。

更新於: 2021-07-30

964 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告