在本教程中,我們將學習如何在Raspberry Pi Pico中使用I2C引腳并遍歷I2C掃描器代碼。
硬件部件:
Raspberry Pi Pico板× 1個
目錄
1.概述
2.什么是I2C通信協議
3. Raspberry Pi Pico中的I2C引腳
4.如何將Raspberry Pi Pico的I2C引腳與I2C傳感器或模塊一起使用?
5. Raspberry Pi Pico I2C掃描器代碼
概述
在本教程中,我們將學習如何在Raspberry Pi Pico中使用I2C引腳并遍歷I2C掃描器代碼。Raspberry Pi Pico使用RP2040微控制器構建。該開發板共有36個GPIO引腳中的26個多功能GPIO引腳。在10 GPIO引腳不暴露的,因此它們不能被使用。在26個可用的GPIO引腳中,有2對I2C引腳將在本文中討論。
我們將看到什么是I2C通信協議以及它如何工作。我們還將詳細了解Raspberry Pi Pico的I2C引腳。我們將采取I2C掃描代碼作為例子,并檢查了幾個I2C的I2C地址如何啟用的傳感器和模塊。在此之前,您可以查看我們的Raspberry Pi Pico入門教程,以了解有關該模塊的更多信息。
什么是I2C通信協議
I2C(集成電路間)是一種同步,多主機,多從機,分組交換,單端,串行通信總線。它廣泛用于在板內短距離通信中將低速外圍IC連接到處理器和微控制器。
像UART通信一樣,I2C僅使用兩條線在設備之間傳輸數據。
這兩根線分別稱為串行時鐘線(SCL)和串行數據線(SDA)。要傳輸的數據通過SDA線發送,并與SCL的時鐘信號同步。I2C網絡上的所有設備/ IC均連接到相同的SCL和SDA線,如上所示。
連接到I2C總線的設備是主機或從機。在任何時刻,只有一個主機在I2C總線上保持活動狀態。它控制SCL時鐘線并決定要在SDA數據線上執行的操作。
響應此主設備指令的所有設備都是從設備。為了區分連接到同一I2C總線的多個從設備,每個從設備在物理上都分配有一個永久的7位地址。
當主設備要與從設備進行數據傳輸時,它會在SDA線上指定此特定從設備地址,然后繼續進行傳輸。因此,有效的通信發生在主設備和特定從設備之間。除非所有其他從屬設備的地址都由SDA線上的主設備指定,否則它們不會響應。
Raspberry Pi Pico中的I2C引腳
微控制器RP2040芯片具有兩個I2C控制器。您可以通過Raspberry Pi Pico的GPIO引腳訪問兩個I2C控制器。下表顯示了GPIO引腳與兩個I2C控制器的連接。
控制器的每個連接都可以通過多個GPIO引腳進行配置,如圖所示。但是在使用I2C控制器之前,您應該在軟件中配置要與特定I2C控制器一起使用的GPIO引腳。
Raspberry Pi Pico I2C引腳的功能
Raspberry Pi Pico具有RP2040芯片,該芯片支持以下功能:1.設備可以在主模式或從模式下工作,默認從地址為0x055
2. I2C引腳具有3種速度模式:標準(0至100 Kb / s ),快速(《= 400 Kb / s )和快速增強模式(《= 1000 Kb / s )
3.它既可以發送也可以接收緩沖區
4.也可用于中斷和DMA模式
如何將Raspberry Pi Pico的I2C引腳與I2C傳感器或模塊一起使用?
現在讓我們學習如何將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線。由于有多個I2C引腳,我們將僅使用Raspberry Pi Pico的一對I2C引腳。我們將使用GPIO8作為SDA0和GPIO9作為SCL0 。
Raspberry Pi Pico I2C掃描器代碼
現在,讓我們看看Raspberry Pi Pico I2C掃描器代碼。該代碼是用MicroPython編寫的。您可以使用Thonny IDE或uPyCraft IDE將Raspberry Pi Pico連接到計算機。
以下代碼將掃描連接到Raspberry Pi Pico的I2C引腳的所有傳感器的I2C地址。復制代碼,然后下載并運行。
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))
運行代碼后,Micropython將嘗試掃描連接到Pico Board的I2C設備。您最多可以連接127個I2C從設備。設備將掃描該地址并將其顯示在Shell窗口中。
? 所述I2C地址的OLED顯示器是60 ,其以十六進制為0x3C 2。
? 所述I2C地址的MPU6050是104 ,其以十六進制0x68 3。
? 該I2C地址的BME680是119 ,其十六進制是0x77。
責任編輯:pj
-
微控制器
+關注
關注
48文章
7542瀏覽量
151316 -
傳感器
+關注
關注
2550文章
51035瀏覽量
753074 -
通信協議
+關注
關注
28文章
879瀏覽量
40297
發布評論請先 登錄
相關推薦
評論