Byte array to char !

Hello everyone ! I am programming an api and I have come across the following scenario:
I have data received by the serial port ->

byte read_buffer[40];

if(Serial.available()){

      for(int i = 0; i < sizeof(read_buffer); i++){

        delay(5);
        read_buffer[i] = Serial.read();
      
      }
}

Up to this point everything works and I still haven't figured out how to convert those received bytes to char* type variables, the data would be converted to enter the SSID and Password of the function Wifi.begin("SSID","PASSWORD"), could someone give me a hand ! thank you so much !

For example ...

read_buffer[0] = 86;
read_buffer[1] = 73;
read_buffer[2] = 76;
read_buffer[3] = 76;
read_buffer[4] = 65;
read_buffer[5] = 32;

these decimal bytes converted to a variable char* = "VILLA"

That code says that if 1 byte is available, read 40 bytes. Not the best way to go.

The serial input basics tutorial shows how to receive serial data into a string (null terminated character array).

1 Like

you're right ! and how can I convert the decimal bytes to char* ?

read_buffer[0] = 86;
read_buffer[1] = 73;
read_buffer[2] = 76;
read_buffer[3] = 76;
read_buffer[4] = 65;
read_buffer[5] = 32;

char* x = read_buffer  = "VILLA"

Is it possible to do that ?

Copy a number of elements to a new array and append the value 0 (zero. (Final de cadena, creo que entiendes el español). Same for the second string.

However you must know the number of bytes for each of both fields: the SSID and the password. Maybe the original string contains a way that let's you split it in two strings.

o por supuesto ya tengo separados los datos seriales recibidos, así que puedo manipularlos, con lo que no he podido es que la función WiFi.begin("SSID","PASSWORD") solo admite datos tipo char*, con los arrays de bytes decimales tambien se como pasarlos a un nuevo array, lo que no he podido hacer es convertir ese nuevo byte decimal array a una variable tipo char* ... si puedes darme una mano con ello estare muy agradecido ! :grinning:

Ak ok, entonces lo que debes hacer es agregar el valor 0 (final de cadena) a cada una de tus cadenas, con eso cualquier función de cadena de C entenderá que se trata de una cadena válida:

char read_buffer[7]; // uno más de lo que necesitas

read_buffer[0] = 86;
read_buffer[1] = 73;
read_buffer[2] = 76;
read_buffer[3] = 76;
read_buffer[4] = 65;
read_buffer[5] = 32;
read_buffer[6] = 0;  // Agrega este elemento (también funciona '\0')

Serial.print( read_buffer ); // debería imprimir VILLA en la terminal

WiFi.begin( read_buffer, "PASSWORD");

Ok efectivamente al agregar el 0 al final de la cadena y al imprimir se ve VILLA en el puerto serial, al parecer la funcion WiFi.begin(), solo acepta variables del tipo const char*, sigo buscando documentación ... gracias por responder !

Muchas gracias problema resuelto ! tu respuesta fue muy importante para encontrar la solución, termine creando una variable del tipo :

`const char* ssid_input;`

Luego cree otra variable para pasar los bytes a char :

char array_ssid[x] = read_buffer[x];

y finalmente asigne los valores de la variable char a char* :

ssid_input = array_ssid;

Pienso que habrá una forma mas rápida, y es normal que aprendamos algo nuevo todos los días ! , de nuevo mil gracias por tu ayuda ! :+1:

Moderador:
Como un tema empieza en inglés y termina con respuestas en español.
@ bsarevalo si empiezas hablando en inglés terminas haciendolo en ese idioma. no mezcles idiomas por favor.
Ahora el tema no pertenece ni al foro en inglés ni a este.
Lee las normas @bsarevalo