The I2C bus is "Open Drain." This means devices can only pull the voltage line down to zero (Ground); they cannot push it up to 5V. It relies on external resistors (Pull-up Resistors) to pull the line back up to High when nobody is talking. Novice engineers often forgot these resistors. Without them, the SDA and SCL lines would droop like wet spaghetti. The library would send a beginTransmission() , the line would hit zero, and it would never come back up. The code would hang in an infinite loop, waiting for a High signal that never came. The city went dark.
void receiveEvent(int bytes) while(Wire.available()) char c = Wire.read(); Serial.print(c); wire.h library