Daten vom Slave zum Master senden

Nein, wenn der Slave die Initiative ergreifen soll.

Ja, wenn der Master danach fragt. Ein Beispiel hängt vom Slave ab, da gibt es verschiedene "Protokolle".

Programm DS3231 EEPROM schreiben und lesen
#include <Wire.h>

void i2c_eeprom_writeByte(int deviceaddress, unsigned int eeaddress, byte data)
{
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8)); // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.write(data);
  Wire.endTransmission();
  delay(10);
}

byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress )
{
  byte rdata = 0xFF;
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8)); // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
  Wire.requestFrom(deviceaddress, 1);
  if (Wire.available()) rdata = Wire.read();
  return rdata;
};

void MemoryDump(byte I2C_EEPROM_ADDRESS, unsigned int NumberOfBytes)
{
  Serial.print(F("Dump of memory content ("));
  Serial.print(NumberOfBytes);
  Serial.print(F(" bytes) from I2C device at address "));
  Serial.println(I2C_EEPROM_ADDRESS, HEX);
  unsigned int addr = 0;
  byte b = i2c_eeprom_read_byte(I2C_EEPROM_ADDRESS, addr);
  char c;
  while (addr < NumberOfBytes)
  {
    Serial.print(addr, HEX);
    Serial.print("  ");
    c = (char)b;
    Serial.print(c); //print content to serial port
    // if ( (b < 0x20) or (b >= 0x7F) )
    // {
      Serial.print(" (0x");
      Serial.print(b, HEX);
      Serial.print(")");
    // };
    Serial.println();
    addr++; //increase address
    b = i2c_eeprom_read_byte(I2C_EEPROM_ADDRESS, addr);
  };
  Serial.println(F("\nEnd of Dump\n"));
};

void setup()
{
  Wire.begin();
  Serial.begin(115200);
  delay(500);
  Serial.println(F("\nAnfang EEPROM 24c32\n"));
  byte i2cadresse = 0x57;
  Serial.print(i2cadresse);
  Serial.print(" (0x");
  Serial.print(i2cadresse, HEX);
  Serial.println(")");
  MemoryDump(i2cadresse, 10);
  i2c_eeprom_writeByte(i2cadresse, 0x01, 0x45);
  MemoryDump(i2cadresse, 10);
};

void loop() {};