您有兩個傳感器,具有相同的I2C地址,您希望通過為每個傳感器使用單獨的I2C總線連接到ESP32。
您有一個微控制器和兩個相同的傳感器,這意味著它們具有相同的I2C地址。如果沒有多路復用器或配置傳感器的I2C地址的可能性,則無法將它們連接到相同的I2C總線。但是,在提供配置任何GPIO引腳對作為I2C總線的能力的板上,您可以將兩個傳感器連接到它們自己的I2C總線。
在本例中,我們使用ESP32,它支持多個I2C總線和兩個盛思銳SCD41 CO2傳感器評估板。您可以使用任意兩個傳感器,無論它們是相同的產(chǎn)品還是具有相同I2C地址的不同傳感器。評估板很方便,因為我們可以將它們與評估套件中的電纜連接起來。
一般工作原理
我們要連接的兩個SCD41傳感器的I2C地址為0x62,無法更改。因此,為了與來自微控制器的兩個傳感器通信,我們將為每個傳感器使用單獨的I2C總線。每個I2C總線需要一個引腳用于SDA線,一個引腳用于SCL線。第一個傳感器將連接到標準I2C引腳。對于第二個I2C總線,我們需要定義兩個要使用的GPIO引腳并將第二個傳感器連接到這些引腳。在軟件方面,我們使用標準的Wire庫。對于連接到默認引腳的第一個傳感器,您可以使用預配置的“Wire”實例。對于第二個傳感器,我們需要配置第二個實例“Wire1”,以使用所選引腳。作為最后一步,我們將創(chuàng)建傳感器驅(qū)動程序類的兩個實例,并使用標準I2C總線初始化一個實例,使用自定義I2C總線初始化另一個實例。
布線
首先,我們需要定義將用于兩個I2C總線的引腳。對于I2C總線A,我們可以使用板的默認I2C引腳。對于ESP32 DevKitC,這些是引腳21 (SCL)和引腳22 (SDA)。對于I2C總線B,我們可以選擇任意兩個GPIO(通用輸入輸出)引腳。如果您使用的是不同的電路板,檢查規(guī)格以確定是否有任何引腳具有阻止它們用作GPIO引腳的特殊配置是很重要的。在我們的例子中,我們?yōu)镮2C總線B選擇了引腳17和16。
上拉電阻
在I2C數(shù)據(jù)(SDA)和時鐘(SCL)線上安裝上拉電阻對于良好的信號質(zhì)量和穩(wěn)健的通信非常重要。您可以在I2C上拉電阻介紹中了解更多信息。
ESP32 DevKitC單板保證GPIO線自動拉到高電平。因此,不需要為您打算使用的引腳手動連接或配置上拉電阻。
接線圖
由于SCD41傳感器兼容3.3V和5V,我們可以將一個傳感器連接到3.3V引腳,另一個連接到5V引腳。如果兩個傳感器需要相同的電壓,它們可以通過面包板連接。
對于本例,應該按照下圖所示進行布線:
?SEK - SCD41A -引腳1至ESP32引腳22 (SCL,黃色電纜)
?SEK - SCD41A -引腳2到ESP32 GND(接地,黑色電纜)
?SEK - SCD41A -引腳3到ESP32 3V3(傳感器電源電壓,紅色電纜)
?SEK - SCD41A -引腳4至ESP32引腳21 (SDA,綠色電纜)
?SEK - SCD41B -引腳1至ESP32引腳17 (SCL,黃色電纜)
?SEK - SCD41B -引腳2到ESP32 GND(接地,黑色電纜)
?SEK - SCD41B -引腳3到ESP32 5V(傳感器電源電壓,紅色電纜)
?SEK-SCD41 B -引腳4至ESP32引腳16 (SDA,綠色電纜)
在稍后配置軟件時,重要的是要記住為第二個I2C總線分配的引腳。具體來說,我們使用引腳16用于I2C數(shù)據(jù)(SDA),引腳17用于I2C時鐘(SCL)和。
軟件設置
首先,您需要包含Wire庫:
我們正在使用Arduino ESP32平臺,其中包括Wire庫。
我們可以使用Wire實例,而不需要對連接到“I2C總線A”(默認的I2C總線)的傳感器進行任何修改。我們只需要初始化總線:
對于“I2C總線B”,我們需要配置一個自定義TwoWire實例。有一個名為Wire1的預定義實例,我們可以配置它來使用我們在setup()函數(shù)中使用以下代碼行定義的引腳:
然后,通過I2C總線向傳感器發(fā)送命令的代碼需要知道哪個傳感器使用哪個總線。因此,您需要相應地配置傳感器實例。首先,為每個傳感器創(chuàng)建一個驅(qū)動程序?qū)嵗?
它們的作用域應該是全局的,這樣就可以在setup()和loop()中引用它們。
然后,在setup()函數(shù)中,為傳感器分配I2C總線:
確保您確實為傳感器b分配了Wire1,以便它使用自定義設置I2C總線。
現(xiàn)在可以向傳感器發(fā)送任何I2C命令,例如啟動測量和檢索值。
您可以在ESP32 I2C教程中使用Arduino IDE找到如何在ESP32平臺上配置多個I2C總線的更多細節(jié)和選項。
本文編譯自hackster.io