#include <Wire.h>

// Адрес устройства на шине I2C
#define I2C_SLAVE_ADDR 8

void setup() {
  // Инициализация Serial для вывода в монитор порта
  Serial.begin(9600);
  
  // Инициализация I2C как Slave (ведомый)
  Wire.begin(I2C_SLAVE_ADDR);
  
  // Регистрируем функцию, которая вызывается при получении данных от Master
  Wire.onReceive(receiveEvent);
}

void loop() {
  // Основной цикл пуст, все работает на прерываниях
  delay(100);
}

// Функция обработки приема данных от ESP32
void receiveEvent(int howMany) {
  // Читаем все доступные байты
  while (Wire.available()) {
    char c = Wire.read();
    Serial.print(c); // Выводим символ в монитор порта
  }
  // После получения всей строки делаем перенос строки для красоты
  Serial.println(); 
}