【发布时间】:2023-01-17 04:59:56
【问题描述】:
tl;博士有人可以告诉我是否可以为 I2C 设置自定义引脚奴隶(客户端、外围设备)在 Arduino 环境中?
语境 在 ESP32(来自 Freenove 的 ESP32-WROVER)上,我正在尝试与 2 个 I2C 主设备(Adafruit Monster M4sk)进行通信
在这个特定的 ESP32-WROVER 板上,相机使用默认的 SDA 和 SCL 引脚。 所以我必须在不同的引脚上设置 I2c。我将引脚 2 用作 SDA,将引脚 15 用作 SDL。
我可以轻松地将 I2C 设置为这些引脚上的 MASTER,使用 Wire.begin(2,15) 工作得很好。我找到了很多关于设置自定义引脚、使用 Wire 或 TwoWire 的多总线的文档。
我真正想做的是这样的:
#include <Wire.h>
#define SDA1 2
#define SCL1 15
#define SDA2 21
#define SCL2 22
#define SLAVE_ADDRESS_ON_BUS_1 0x52
#define SLAVE_ADDRESS_ON_BUS_2 0x33
setup()
{
Wire.begin(SDA1,SCL1,SLAVE_ADDRESS_ON_BUS_1); // Join I2C bus 1 using pins 2 and 15
Wire1.begin(SDA2,SCL2,SLAVE_ADDRESS_ON_BUS_2);// Join I2C bus 2 using pins 21 and 22
Wire.onReceive(receiveI2CBus1Event); // register event for when master on i2c bus 1 writes
Wire.onRequest(WriteToI2CBus1Event); // register event for when master1 wants on i2c bus 2 wants to read
Wire1.onReceive(receiveI2CBus2Event); // register event for when master on i2c bus 2 writes
Wire1.onRequest(WriteToI2CBus2Event); // register event for when master on i2c bus 2 wants to read
}
据我所知,无法使用 Wire 或 TwoWire 在一组自定义引脚上创建外围设备......
Wire.begin(MY_ADDRESS);
我试过重新定义 SDA 和 SCL,但这似乎不起作用 注意我正在运行 Expressif 的 ESP32 库 v2.0.2(ESP32 库 1.0.6 和之前的版本不支持 ESP32 作为从属) 我已经使用 Arduino IDE 1.8.19 和 Arduino IDE 2.0.0.rc5 尝试过这个(这是重新定义 SDA 和 SCL)
我不能成为第一个尝试使用默认引脚以外的东西让 ESP32 充当 i2c 从设备的人......
我是否必须求助于某种 I2C 桥接器/开关/多路复用器?如果是这样,有什么建议吗? (最好是带有 arduino 示例代码的建议,显示主控如何将地址分配给另一个主控)
谢谢你。
【问题讨论】:
标签: arduino esp32 i2c slave pins