MPR121 Breakout 更改 I2C 地址

MPR121 Breakout 是一个 接近 电容式 触摸传感器,连接到arduino、esp32等单片机,可以用来做一些 触摸 感应的小玩意。

他有12个触摸点,使用 i2c 协议来操控,非常方便。

      

默认情况下,Add 引脚 接地了,板子的i2c地址是 0x5A,如果你要同时连接多个 板子,那么 i2c 地址就冲突了。你只能使用i2c复用板来解决了。

但是,但是。。。。。板子的设计师考虑的很周到,可以短接引脚获取不同的地址,点赞!

1 The MPR121 ADDR pin is pulled to ground and has a default I2C address of 0x5A
2 You can adjust the I2C address by connecting ADDR to other pins:
3 
4 ADDR not connected: 0x5A
5 ADDR tied to 3V: 0x5B
6 ADDR tied to SDA: 0x5C
7 ADDR tied to SCL: 0x5D

简单说,add连到3v3后地址是0x5b,add连到sda后地址是0x5c,add连到scl后地址是0x5d

具体怎么操作呢,看下图,箭头处就是add引脚跳线的地方。

将下图箭头所指横线切断,可以用小刀、美工刀,动作慢点,切割后用万用表测试一下,两端不通电即可。

 然后将add的右侧,焊接一个飞线连接到3v3、sda、scl 三个中的一个即可。 

 不焊接也行,直接在add引脚插一个杜邦线,另外一端插到3v3、sda、scl 三个中的一个即可。

下面是arduino获取2个板子i2c地址的测试代码:

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\nI2C Scanner");


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


}

void loop() {
  int nDevices;
  nDevices = 0;
  byte error, address;
  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("Unknown error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  }
  else {
    Serial.println("done\n");
  }

  Serial.print("i2c devices found:");
  Serial.println(nDevices);

  delay(5000);
} 

运行结果:

 

 

完美!最多可接4个板子,够了够了!

 

posted @ 2024-03-05 14:21  longware  阅读(51)  评论(0编辑  收藏  举报