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