www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 工業(yè)控制 > 電路設(shè)計(jì)項(xiàng)目集錦
[導(dǎo)讀]您有一個微控制器和兩個相同的傳感器,這意味著它們具有相同的I2C地址。如果沒有多路復(fù)用器或配置傳感器的I2C地址的可能性,則無法將它們連接到相同的I2C總線。但是,在提供配置任何GPIO引腳對作為I2C總線的能力的板上,您可以將兩個傳感器連接到它們自己的I2C總線。

您有兩個傳感器,具有相同的I2C地址,您希望通過為每個傳感器使用單獨(dú)的I2C總線連接到ESP32。

您有一個微控制器和兩個相同的傳感器,這意味著它們具有相同的I2C地址。如果沒有多路復(fù)用器或配置傳感器的I2C地址的可能性,則無法將它們連接到相同的I2C總線。但是,在提供配置任何GPIO引腳對作為I2C總線的能力的板上,您可以將兩個傳感器連接到它們自己的I2C總線。

在本例中,我們使用ESP32,它支持多個I2C總線和兩個盛思銳SCD41 CO2傳感器評估板。您可以使用任意兩個傳感器,無論它們是相同的產(chǎn)品還是具有相同I2C地址的不同傳感器。評估板很方便,因?yàn)槲覀兛梢詫⑺鼈兣c評估套件中的電纜連接起來。

一般工作原理

我們要連接的兩個SCD41傳感器的I2C地址為0x62,無法更改。因此,為了與來自微控制器的兩個傳感器通信,我們將為每個傳感器使用單獨(dú)的I2C總線。每個I2C總線需要一個引腳用于SDA線,一個引腳用于SCL線。第一個傳感器將連接到標(biāo)準(zhǔn)I2C引腳。對于第二個I2C總線,我們需要定義兩個要使用的GPIO引腳并將第二個傳感器連接到這些引腳。在軟件方面,我們使用標(biāo)準(zhǔn)的Wire庫。對于連接到默認(rèn)引腳的第一個傳感器,您可以使用預(yù)配置的“Wire”實(shí)例。對于第二個傳感器,我們需要配置第二個實(shí)例“Wire1”,以使用所選引腳。作為最后一步,我們將創(chuàng)建傳感器驅(qū)動程序類的兩個實(shí)例,并使用標(biāo)準(zhǔn)I2C總線初始化一個實(shí)例,使用自定義I2C總線初始化另一個實(shí)例。

布線

首先,我們需要定義將用于兩個I2C總線的引腳。對于I2C總線A,我們可以使用板的默認(rèn)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引腳。如果兩個傳感器需要相同的電壓,它們可以通過面包板連接。

對于本例,應(yīng)該按照下圖所示進(jìn)行布線:

?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)和。

軟件設(shè)置

首先,您需要包含Wire庫:

我們正在使用Arduino ESP32平臺,其中包括Wire庫。

我們可以使用Wire實(shí)例,而不需要對連接到“I2C總線A”(默認(rèn)的I2C總線)的傳感器進(jìn)行任何修改。我們只需要初始化總線:

對于“I2C總線B”,我們需要配置一個自定義TwoWire實(shí)例。有一個名為Wire1的預(yù)定義實(shí)例,我們可以配置它來使用我們在setup()函數(shù)中使用以下代碼行定義的引腳:

然后,通過I2C總線向傳感器發(fā)送命令的代碼需要知道哪個傳感器使用哪個總線。因此,您需要相應(yīng)地配置傳感器實(shí)例。首先,為每個傳感器創(chuàng)建一個驅(qū)動程序?qū)嵗?

它們的作用域應(yīng)該是全局的,這樣就可以在setup()和loop()中引用它們。

然后,在setup()函數(shù)中,為傳感器分配I2C總線:

確保您確實(shí)為傳感器b分配了Wire1,以便它使用自定義設(shè)置I2C總線。

現(xiàn)在可以向傳感器發(fā)送任何I2C命令,例如啟動測量和檢索值。

您可以在ESP32 I2C教程中使用Arduino IDE找到如何在ESP32平臺上配置多個I2C總線的更多細(xì)節(jié)和選項(xiàng)。

本文編譯自hackster.io

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀
關(guān)閉