在本教程中,我們將學(xué)習(xí)如何在Raspberry Pi Pico中使用I2C引腳并遍歷I2C掃描器代碼。
硬件部件:
Raspberry Pi Pico板× 1個(gè)
目錄
1.概述
2.什么是I2C通信協(xié)議
3. Raspberry Pi Pico中的I2C引腳
4.如何將Raspberry Pi Pico的I2C引腳與I2C傳感器或模塊一起使用?
5. Raspberry Pi Pico I2C掃描器代碼
概述
在本教程中,我們將學(xué)習(xí)如何在Raspberry Pi Pico中使用I2C引腳并遍歷I2C掃描器代碼。Raspberry Pi Pico使用RP2040微控制器構(gòu)建。該開發(fā)板共有36個(gè)GPIO引腳中的26個(gè)多功能GPIO引腳。在10 GPIO引腳不暴露的,因此它們不能被使用。在26個(gè)可用的GPIO引腳中,有2對(duì)I2C引腳將在本文中討論。
我們將看到什么是I2C通信協(xié)議以及它如何工作。我們還將詳細(xì)了解Raspberry Pi Pico的I2C引腳。我們將采取I2C掃描代碼作為例子,并檢查了幾個(gè)I2C的I2C地址如何啟用的傳感器和模塊。在此之前,您可以查看我們的Raspberry Pi Pico入門教程,以了解有關(guān)該模塊的更多信息。
什么是I2C通信協(xié)議
I2C(集成電路間)是一種同步,多主機(jī),多從機(jī),分組交換,單端,串行通信總線。它廣泛用于在板內(nèi)短距離通信中將低速外圍IC連接到處理器和微控制器。
像UART通信一樣,I2C僅使用兩條線在設(shè)備之間傳輸數(shù)據(jù)。
這兩根線分別稱為串行時(shí)鐘線(SCL)和串行數(shù)據(jù)線(SDA)。要傳輸?shù)臄?shù)據(jù)通過(guò)SDA線發(fā)送,并與SCL的時(shí)鐘信號(hào)同步。I2C網(wǎng)絡(luò)上的所有設(shè)備/ IC均連接到相同的SCL和SDA線,如上所示。
連接到I2C總線的設(shè)備是主機(jī)或從機(jī)。在任何時(shí)刻,只有一個(gè)主機(jī)在I2C總線上保持活動(dòng)狀態(tài)。它控制SCL時(shí)鐘線并決定要在SDA數(shù)據(jù)線上執(zhí)行的操作。
響應(yīng)此主設(shè)備指令的所有設(shè)備都是從設(shè)備。為了區(qū)分連接到同一I2C總線的多個(gè)從設(shè)備,每個(gè)從設(shè)備在物理上都分配有一個(gè)永久的7位地址。
當(dāng)主設(shè)備要與從設(shè)備進(jìn)行數(shù)據(jù)傳輸時(shí),它會(huì)在SDA線上指定此特定從設(shè)備地址,然后繼續(xù)進(jìn)行傳輸。因此,有效的通信發(fā)生在主設(shè)備和特定從設(shè)備之間。除非所有其他從屬設(shè)備的地址都由SDA線上的主設(shè)備指定,否則它們不會(huì)響應(yīng)。
Raspberry Pi Pico中的I2C引腳
微控制器RP2040芯片具有兩個(gè)I2C控制器。您可以通過(guò)Raspberry Pi Pico的GPIO引腳訪問(wèn)兩個(gè)I2C控制器。下表顯示了GPIO引腳與兩個(gè)I2C控制器的連接。
控制器的每個(gè)連接都可以通過(guò)多個(gè)GPIO引腳進(jìn)行配置,如圖所示。但是在使用I2C控制器之前,您應(yīng)該在軟件中配置要與特定I2C控制器一起使用的GPIO引腳。
Raspberry Pi Pico I2C引腳的功能
Raspberry Pi Pico具有RP2040芯片,該芯片支持以下功能:1.設(shè)備可以在主模式或從模式下工作,默認(rèn)從地址為0x055
2. I2C引腳具有3種速度模式:標(biāo)準(zhǔn)(0至100 Kb / s ),快速(《= 400 Kb / s )和快速增強(qiáng)模式(《= 1000 Kb / s )
3.它既可以發(fā)送也可以接收緩沖區(qū)
4.也可用于中斷和DMA模式
如何將Raspberry Pi Pico的I2C引腳與I2C傳感器或模塊一起使用?
現(xiàn)在讓我們學(xué)習(xí)如何將Raspberry Pi Pico的I2C引腳與任何其他基于I2C的傳感器或模塊一起使用。在這種情況下,我們可以將Raspberry Pi Pico用作Mater Device ,將其他外部傳感器或模塊用作Slave Device 。
這是我們將3種不同的I2C器件連接到Pico板上的電路。這3種器件是BME680傳感器,MPU6050傳感器和0.96英寸OLED顯示器。
在此示例中,我們將MPU6050 ,BME680和OLED Display的SDA和SCL引腳連接到Raspberry Pi Pico的公共I2C線。由于有多個(gè)I2C引腳,我們將僅使用Raspberry Pi Pico的一對(duì)I2C引腳。我們將使用GPIO8作為SDA0和GPIO9作為SCL0 。
Raspberry Pi Pico I2C掃描器代碼
現(xiàn)在,讓我們看看Raspberry Pi Pico I2C掃描器代碼。該代碼是用MicroPython編寫的。您可以使用Thonny IDE或uPyCraft IDE將Raspberry Pi Pico連接到計(jì)算機(jī)。
以下代碼將掃描連接到Raspberry Pi Pico的I2C引腳的所有傳感器的I2C地址。復(fù)制代碼,然后下載并運(yùn)行。
import machine
sda=machine.Pin(8)
scl=machine.Pin(9)
i2c=machine.I2C(0,sda=sda, scl=scl, freq=400000)
print(‘Scan i2c bus.。.’)
devices = i2c.scan()
if len(devices) == 0:
print(“No i2c device !”)
else:
print(‘i2c devices found:’,len(devices))
for device in devices:
print(“Decimal address: ”,device,“ | Hexa address: ”,hex(device))
運(yùn)行代碼后,Micropython將嘗試掃描連接到Pico Board的I2C設(shè)備。您最多可以連接127個(gè)I2C從設(shè)備。設(shè)備將掃描該地址并將其顯示在Shell窗口中。
? 所述I2C地址的OLED顯示器是60 ,其以十六進(jìn)制為0x3C 2。
? 所述I2C地址的MPU6050是104 ,其以十六進(jìn)制0x68 3。
? 該I2C地址的BME680是119 ,其十六進(jìn)制是0x77。
責(zé)任編輯:pj
-
微控制器
+關(guān)注
關(guān)注
48文章
7844瀏覽量
153348 -
傳感器
+關(guān)注
關(guān)注
2561文章
52198瀏覽量
761708 -
通信協(xié)議
+關(guān)注
關(guān)注
28文章
975瀏覽量
40854
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
SPI、UART、I2C通信協(xié)議的區(qū)別
SPI、UART、I2C通信協(xié)議的區(qū)別

如何使用Dave 3.1.10在XMC4400微控制器上實(shí)現(xiàn)I2c通信協(xié)議 軟件?
I2C通信協(xié)議手冊(cè)找不到廣為流傳的內(nèi)容
i2c通信協(xié)議
I2C通信協(xié)議簡(jiǎn)介
我想知道我們可以在STM32F407中使用4x I2C通信協(xié)議嗎?
I2C通信協(xié)議應(yīng)該如何學(xué)習(xí)

評(píng)論