使用Arduino Uno R4來了解每個傳感器如何使用單獨的I2C總線連接到Arduino
您有兩個傳感器,具有相同的I2C地址,您希望通過為每個傳感器使用單獨的I2C總線連接到Arduino。
您有一個微控制器和兩個相同的傳感器,這意味著它們具有相同的I2C地址。如果沒有多路復用器或配置傳感器的I2C地址的可能性,則無法將它們連接到相同的I2C總線。然而,Arduino Uno R4 Wifi在板上提供多個I2C總線。一個I2C總線在引腳上可用,另一個在Qwiic連接器上可用。
在這個例子中,我們使用Arduino Uno R4 Wifi。作為傳感器板,我們有一個senrion SCD41二氧化碳傳感器評估板連接到引腳頭,一個Adafruit SCD41板連接到Qwiic電纜。您可以使用任意兩個傳感器,無論它們是相同的產(chǎn)品還是具有相同I2C地址的不同傳感器。
一般工作原理
我們要連接的兩個SCD41傳感器的I2C地址為0x62,無法更改。因此,為了與來自微控制器的兩個傳感器通信,我們將為每個傳感器使用單獨的I2C總線。連接到Qwiic連接器的I2C總線和可以通過引腳連接的I2C總線是兩個獨立的I2C總線。因此,我們可以在每個傳感器上都有一個相同地址的傳感器。在軟件方面,我們使用標準的Wire庫。您可以使用預先配置的“Wire”(Pin連接器)和“Wire1”(Qwiic連接器)實例。作為最后一步,我們將創(chuàng)建傳感器驅(qū)動程序類的兩個實例,并使用標準I2C總線初始化一個實例,使用自定義I2C總線初始化另一個實例。
布線
拉起
在I2C數(shù)據(jù)(SDA)和時鐘(SCL)線上安裝上拉電阻對于良好的信號質(zhì)量和穩(wěn)健的通信非常重要。您可以在I2C上拉電阻介紹中了解更多信息。
Arduino Uno R4 WIFI在電路板上為引腳連接器上的I2C總線提供無上拉。我們要連接到這個I2C總線的SEK SCD41板也沒有內(nèi)置上拉。因此,我們需要在SDA和VDD以及SCL和VDD之間連接一個上拉電阻。在這個例子中使用了兩個8.26歐姆電阻,并且使用面包板進行布線,因此不需要焊接。
第二個I2C總線在Qwiic上。我們在這里使用Adafruit的分斷板。該板在SDA和SCL線上包括10K上拉,因此不需要為該傳感器連接額外的上拉電阻。
接線圖
下面的列表描述了布線,其中R.1和R.2是值為8.26kOhm的電阻。
?SEK-SCD41引腳1至R.1 (SCL,黃色)
?r1到Arduino引腳SCL(黃色)
?r1到Arduino 3V3
?SEK-SCD41引腳2到Arduino GND
?SEK-SCD41引腳3連接Arduino 3V3
?SEK-SCD41引腳4到R.2 (SDA,綠色)
?r2到Arduino Pin 14(綠色)
?R.2到Arduino 3V3
?Adafruit SCD41到Arduino Qwiic
軟件設置
首先,您需要包含Wire庫:
對于Arduino Uno R4,該庫定義了兩個I2C總線。首先,“Wire”是為引腳頭上的SDA/SCL引腳配置的,其中“Wire1”是為Qwiic連接器配置的。我們可以使用這兩個實例,而無需進一步配置。你只需要初始化它們:
然后,通過I2C總線向傳感器發(fā)送命令的代碼需要知道哪個傳感器使用哪個總線。因此,您需要相應地配置傳感器實例。首先,為每個傳感器創(chuàng)建一個驅(qū)動程序?qū)嵗?。它們的作用域應該是全局的,這樣就可以從‘ setup() ’和‘ loop() ’中引用它們。
接下來,在setup()函數(shù)中,將I2C總線分配給傳感器:
注意,你真的有‘ Wire1 ’分配給‘ sensorOnQwiic ’。
現(xiàn)在可以向傳感器發(fā)送任何I2C命令,例如啟動測量和檢索值。
例子草圖
您可以在GitHub上找到Arudino Uno R4 Wifi的完整示例草圖arduino-i2c-different-bus -example。查找特定于Aruduino UnoR4的名為exampleArduinoUnoR4的草圖。
其他Arduino板
Arduino板的文檔可以在Arduino Wire Library中找到。
請注意,并非所有板都支持多個I2C總線,并且建議使用自定義上拉電阻配置,因為內(nèi)置電阻可能不夠強大(電阻值太大)。
本文編譯自hackster.io