Cambio de dirección I2C para sensor de color GY-33

Hola

Tengo dos sensores de color GY-33, quiero conectarlos al bus I2C de Arduino mega los dos a la vez pero viene con la misma dirección, la 0x5A, según el manual se puede cambiar la dirección I2C enviado los bit adecuados, os pongo un extracto del manual donde lo explica:

setIICAddress command: (this command saves the modifiedIICaddress) 0xAA+XX+sum---------XXexpress7bit IIC address,sumequal0xAA+XXsum of low8bit, such as the originalIIC 7bitaddress is0x5A,then send0xAA+0x5A+04to the module,7bitThe address is shifted one bit to the left, so that the 8bit IICaddress is0xB4
MCU_IICprotocol:whenGY-33module hardwarePinA(S0)=0time to use ① IICaddress, default7bitaddress is0x5A,but8bitaddress is0xB4 IICThe address can be modified through the serial port configuration, which can be modified128Different addresses, save when power off.

También adjunto el manual completo por si lo necesita alguien.
El caso es que estoy probando a cambiar la dirección y no hay forma de que funcione:
Codigo:

C++:
#include <Wire.h>

void setup() {
  Wire.begin();        // Inicializar la comunicación I2C
  Serial.begin(9600);  // Inicializar la comunicación serial
}

void loop() {
  byte address = 0x5A;  // Dirección I2C original del dispositivo
  byte newAddress = 0x2D;
  byte command[] = {0xAA, newAddress, 0x04};  // Comando para cambiar la dirección I2C
  byte sum = 0;
  for (int i = 0; i < 2; i++) {
    sum += command[i];  // Calcular la suma de verificación
  }
  command[2] = sum;  // Colocar la suma de verificación en el comando
 
  Wire.beginTransmission(address);  // Iniciar la comunicación con el dispositivo
  Wire.write(command[0]);  // Enviar el comando para cambiar la dirección I2C
  Wire.write(command[1]);  // Enviar el comando para cambiar la dirección I2C
  Wire.write(command[2]);  // Enviar el comando para cambiar la dirección I2C
  Wire.endTransmission();  // Finalizar la comunicación
 
  Serial.print("Nueva dirección I2C: 0x");
  Serial.println(newAddress, HEX);  // Mostrar la nueva dirección I2C por la consola
 
  delay(1000);  // Esperar un segundo antes de repetir el proceso
}

Alguna idea, Gracias de antemano.
 

Adjuntos

  • GY-33Manualv1.zh-CN.en.pdf
    978.8 KB · Visitas: 2
Atrás
Arriba