在本教程中,我们将学习如何在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
全部0条评论
快来发表一下你的评论吧 !