#include #include #define I2C_DEV_ADDR 0x55 #define NEOPIXEL_PIN 19 // Change as needed #define MAX_PIXELS 100 Adafruit_NeoPixel strip(MAX_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800); uint8_t pixelCount = 1; void receiveEvent(int len) { delay(50); // Add more delay for stability as requested if (len < 1) return; uint8_t cmd = Wire.read(); if (cmd == 0x01 && len >= 2) { // Set pixel count pixelCount = Wire.read(); strip.updateLength(pixelCount); strip.begin(); strip.show(); } else if (cmd == 0x02 && len >= 5) { // Set all pixels: R G B I uint8_t r = Wire.read(); uint8_t g = Wire.read(); uint8_t b = Wire.read(); uint8_t intensity = Wire.read(); for (int i = 0; i < pixelCount; i++) { strip.setPixelColor(i, strip.Color(r * intensity / 255, g * intensity / 255, b * intensity / 255)); } strip.show(); } else if (cmd == 0x03 && len >= 6) { // Set one pixel: N R G B I uint8_t n = Wire.read(); uint8_t r = Wire.read(); uint8_t g = Wire.read(); uint8_t b = Wire.read(); uint8_t intensity = Wire.read(); if (n < pixelCount) { strip.setPixelColor(n, strip.Color(r * intensity / 255, g * intensity / 255, b * intensity / 255)); strip.show(); } } } void setup() { strip.begin(); strip.show(); Wire.begin(I2C_DEV_ADDR, 8, 9); // ESP32-S3 default I2C pins: SDA=8, SCL=9 Wire.onReceive(receiveEvent); } void loop() { delay(100); // Main loop delay, not critical }