
#include <Wire.h>

void setup() {
 Wire.begin(8);                /* задаем на шине i2c 8 адрес */
 Wire.onReceive(receiveEvent); /* регистрируем приход данных от главного */
 Wire.onRequest(requestEvent); /* регистрируем запрос от главного */
 Serial.begin(9600);           /* открываем серийный порт */
}

void loop() {
 delay(100);
}

// Функция для извлечения любых принимаемых данных от мастера на шину
void receiveEvent() {
 while (0 <Wire.available()) {
    char c = Wire.read();      /* получаем байт как символ*/
    Serial.print(c);           /* выводим символ в серийный порт */
  }
 Serial.println();             /* переходим на новую строку */
}

// Функция для извлечения любых отправляемых данных от мастера на шину
void requestEvent() {
 Wire.write("Hello ESP32");  /* отправляем по запросу строку "Hello ESP32" */
}
