Obtener datos por serial con Serial.readStringUntil()

Muy buenas tengo un Arduino Uno conectado a un ESP8266 NodeMCU 0.9 y del Arduino estoy enviando unos datos de 9 sensores, los cuales necesito obtener en el ESP y guardar cada valor por separado por lo que estuve investigando y la función Serial.readStringUntil() me permite separarlos siempre y cuando esos datos lleguen con algún carácter separador, así que en el Arduino estoy enviando esto:

Cada valor lo estoy enviando separado por un ;

Mi problema radica en que como la función es utilizada únicamente con String, la variable donde voy almacenar los datos debe ser un String y al momento de yo separar esos datos no puedo meterlos en un array, debido a que debe ser de tipo char, así que investigué cómo pasar de String a char y me encontré con una función llamada toCharArray(), pero esta función lo que hace es ubicar cada dato que llega y desglozarlo por completo, por ejemplo: si me llega un dato de valor 90, dentro del char lo que voy a obtener es, char[0] = 9 y char[1] = 0 por lo que esto no me es conveniente debido a que necesitaría el valor 90 y no los números por separado, así que bueno pensé en que podría volver a convertir este dato en String y ya obtener el 90 en String ya que los valores los necesito en formato String para poder enviarlos a un servidor por método POST pero no sé si esa sea una buena solución.

El ESP lo estoy programando en el IDE de arduino, el código que tengo es el siguiente:

#define DEBUG(a) Serial.println(a);
int i=0;
String datos[8];
 
void setup(){
   Serial.begin(9600);
}
 
void loop(){
  if (Serial.available() > 0){
    String str = Serial.readStringUntil(';');
    datos[i] = str;
    i += 1;
    if(i>=10){
      i = 0;
    }
    //int data = str.toInt();
    //DEBUG(str)
  }
  Serial.println(datos[0]);
}

Aquí yo declaré el vector como String y Arduino me lo permite pero al momento de verlo por Serial, me envía un error después de leer los datos.

Alguno tiene una mejor idea de hacer esto?

Muchas gracias.

El objeto Serial tiene otros metodos que podrian serte utiles ,como parseInt() y parseFloat() ,que leen del buffer valores validos del tipo Int y Float respectivamente.
https://www.arduino.cc/reference/en/language/functions/communication/serial/parseint/
https://www.arduino.cc/reference/en/language/functions/communication/serial/parsefloat/

Gracias por la ayuda, sin embargo, ya pude resolver el problema haciéndolo de esta forma:

int i = 0;
String str[8];

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

void loop() {
    if (Serial.available() > 0) {
      for (i = 0; i <= 8; i++) {
        str[i] = Serial.readStringUntil(';');
      }
      for (i = 0; i <= 8; i++) {
        Serial.print("  ");
        Serial.print(str[i]);
      }
    }
}

A la final pude utilizarlo como un String.