diff --git a/cores/esp32/esp32-hal-gpio.c b/cores/esp32/esp32-hal-gpio.c
index df0e6a29984..2301302d62b 100644
--- a/cores/esp32/esp32-hal-gpio.c
+++ b/cores/esp32/esp32-hal-gpio.c
@@ -151,11 +151,16 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
     }
 }
 
+#ifdef RGB_BUILTIN
+uint8_t RGB_BUILTIN_storage = 0;
+#endif
+
 extern void ARDUINO_ISR_ATTR __digitalWrite(uint8_t pin, uint8_t val)
 {
     #ifdef RGB_BUILTIN
         if(pin == RGB_BUILTIN){
             //use RMT to set all channels on/off
+            RGB_BUILTIN_storage=val;
             const uint8_t comm_val = val != 0 ? RGB_BRIGHTNESS : 0;
             neopixelWrite(RGB_BUILTIN, comm_val, comm_val, comm_val);
             return;
@@ -170,6 +175,12 @@ extern void ARDUINO_ISR_ATTR __digitalWrite(uint8_t pin, uint8_t val)
 
 extern int ARDUINO_ISR_ATTR __digitalRead(uint8_t pin)
 {
+    #ifdef RGB_BUILTIN
+        if(pin == RGB_BUILTIN){
+            return RGB_BUILTIN_storage;
+        }
+    #endif
+
     if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) != NULL){
         return gpio_get_level((gpio_num_t)pin);
     }