二维码
看啥分类信息网LOGO

客服QQ二维码

ESP32I2C通讯详细说明以及应用程序讲解

   日期:2022-11-25 13:11:03     浏览:4    

想必现在大家对于ESP32I2C通讯详细说明以及应用程序讲解方面的知识都比较想要了解,此刻林女士也是在网络上整理了一些关于ESP32I2C通讯详细说明以及应用程序讲解相关的信息分享给大家,希望大家会喜欢。

*** 次数:9278347 已用完,请联系开发者***

ESP32具有两个I2C总线接口,可用作I2C主站或从站。在本教程中,我们将使用Arduino IDE查看与ESP32的I2C通信协议:如何选择I2C引脚,将多个I2C设备连接到同一总线以及如何使用两个I2C总线接口。

在本教程中,我们将介绍以下概念:

1. 相同的总线,不同的地址

2. 相同的地址·

I²C是一个同步,多主,多从通信协议。您可以连接:

我们在ESP32中多次使用此协议与外部设备(例如传感器和显示器)进行通信。在这种情况下,ESP32是主芯片,外部设备是从芯片。

ESP32通过其两个I2C总线接口支持I2C通信,这两个接口可以用作I2C主设备或从设备,具体取决于用户的配置。根据ESP32数据表,ESP32的I2C接口支持:

I2C通信协议使用两条线共享信息。一个用于时钟信号(SCL),另一个用于发送和接收数据(SDA)。

注意:在许多分支板上,SDA线也可能标记为SDI,SCL线也可能标记为SCK。

SDA和SCL线为低电平有效,因此应使用电阻将其上拉。对于5V器件,典型值为4.7k Ohm;对于3.3V器件,典型值为2.4k Ohm。

我们在项目中使用的大多数传感器都是已内置电阻的分线板。因此,通常,当您处理此类电子元件时,您无需为此担心。

将I2C器件连接到ESP32通常很简单,只需将GND连接到GND,将SDA连接到SDA,将SCL连接到SCL并将正电源连接到外围设备通常为3.3V(但这取决于您使用的模块)。

将ESP32与Arduino IDE结合使用时,默认的I2C引脚为GPIO 22(SCL)和GPIO 21(SDA),但您可以将代码配置为使用任何其他引脚。

通过I2C通信,总线上的每个从站都有其自己的地址,此十六进制数允许ESP32与每个设备通信。

I2C地址通常可以在组件的数据表中找到。但是,如果很难查明,则可能需要运行I2C查找程序以查明I2C地址。

您可以使用以下程序找到设备的I2C地址。

void setup() {

Wire.begin();

Serial.begin(115200);

Serial.println("nI2C Scanner");

}

void loop() {

byte error, address;

int nDevices;

Serial.println("Scanning...");

nDevices = 0;

for(address = 1; address < 127; address ) {

Wire.beginTransmission(address);

error = Wire.endTransmission();

if (error == 0) {

Serial.print("I2C device found at address 0x");

if (address<16) {

Serial.print("0");

}

Serial.println(address,HEX);

nDevices ;

}

else if (error==4) {

Serial.print("Unknow error at address 0x");

if (address<16) {

Serial.print("0");

}

Serial.println(address,HEX);

}

}

if (nDevices == 0) {

Serial.println("No I2C devices foundn");

}

else {

Serial.println("donen");

}

delay(5000);

}

您会在串口监视器中看到类似的内容。此特定示例适用于。

使用ESP32,您几乎可以将任何引脚设置为具有I2C功能,您只需要在代码中进行设置即可。

将ESP32与Arduino IDE配合使用时,请使用Wire.h库与使用I2C的设备进行通信。使用此库,您可以按以下方式初始化I2C:

Wire.begin(I2C_SDA, I2C_SCL);

因此,您只需要在I2C_SDA和I2C_SCL变量上设置所需的SDA和SCL GPIO 。

但是,如果您使用库与这些传感器进行通信,则这可能无法正常工作,选择其他引脚可能会有些棘手。发生这种情况是因为,如果在初始化库时不传递自己的Wire实例,这些库可能会覆盖您的引脚。

在这种情况下,您需要仔细查看.cpp库文件,并了解如何传递自己的TwoWire参数。

例如,如果您仔细看一下,您会发现可以将自己的TwoWire传递给begin()方法。

因此,使用其他引脚(例如,GPIO 33作


特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


反对 0举报 0 收藏 0 评论 0
0相关评论
相关行情
推荐行情
点击排行

版权©2008-2025©看啥分类信息网©SYSTEM All Rights Reserved

赣ICP备2021011510号-8