Comando para leer el Monitor, no sirve?

Se te ocurrió la simpleza de ver que esta leyendo tu comando?

void loop() {
  if(Serial.available()){
    String a = Serial.readString();
    Serial.print("He leido: ");
    Serial.println(a);
    if(a.equals("cambiar")){
      Serial.print("funciona");
    }
  }
}

De este modo puedes VER que esta llegando. Ojo.. si hay caracteres raros no los vas a ver. ni comparar
Raros serían el CR (carriage return) y el LF (Line feed) o sea un 0x0a y 0x0d

Yo he modificado levemente tu código y obtuve un buen resultado asi

String a = ""; 

void setup() {
   Serial.begin(9600);
}

void loop() {
  

  if (Serial.available()) {
  	  a = Serial.readStringUntil('\r');
      
 	  Serial.print("Lei:");
 	  Serial.print(a);
      if (a.equals("cambiar")){
          Serial.print("funciona");
          a = ""; 
      }
   }
}

Luego te haré algunos comentarios de los errores cometidos