Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Afegim una funció per gestionar els paràmetres

En els exemples que hem vist fins ara els paràmetres que s'enviaven només podien ser LED=0 o LED=1 i, per tant, era fàcil fer la comprovació. Però quan les opcions són moltes més cal un sistema més eficient per obtenir els paràmetres, especialment en el cas que siguin valors numèrics.

La funció Dades, que comentarem després, té dos paràmetres. El primer és la petició que ha rebut el microcontrolador i el segon és el nom del paràmetre que ens interessa. Per exemple, amb la petició

aaa.bbb.ccc.ddd/?LED=1&cas=activar&temp=23.5

Podem obtenir els valors que es posen en els següents comentaris per a cada crida a la funció:

    String peticio = client.readString();
    Serial.print("LED: ");
    Serial.println(Dades(peticio, "LED"));    // Dóna "1"
    Serial.print("cas: ");
    Serial.println(Dades(peticio, "cas"));    // Dóna "activar"
    Serial.print("temp: ");
    Serial.println(Dades(peticio, "temp"));    // Dóna "23.5"

En cas que el valor esperat sigui numèric el podem convertir:

    int led = Dades(peticio, "LED").toInt();
    float temp = Dades(peticio, "temp").toFloat();

A continuació tenim la funció que tot seguit comentarem.

String Dades(String peti, String param){
    String valor = "";
    String sepa;
    int pos;
    if (peti.indexOf("?") != -1) {    // Si no ho troba torna -1
        peti = peti.substring(peti.indexOf("?")+1);
        if (peti.indexOf(param) != -1) {    // Si no ho troba torna -1
            peti = peti.substring(peti.indexOf(param)+param.length());
            sepa = peti.substring(0, 1);
            peti = peti.substring(1);
            pos = peti.indexOf("&");
            if (pos == -1) {
                pos = peti.indexOf(" ");
            }
            if ((pos != 0) && (sepa == "=")){
                valor = peti.substring(0, pos);
            }
        } 
    }
    return valor;
}

Per començar, cerca un interrogant a la petició. Si no el troba vol dir que la petició no conté paràmetres i, per tant, no cal fer res més. Tot seguit es queda amb el que hi ha després de l'interrogant (els paràmetres) i descarta la resta. Llavors mira si troba el nom del paràmetre, si no el troba tornarà una cadena buida i ja hem acabat. Si troba el nom del paràmetre, comprova que vagi seguit del signe = i es queda amb tot el que hi ha entre el signe = i el signe & (quan el paràmetre no és el darrer) o un espai en blanc (quan el paràmetre és el darrer) i això és el que retorna.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.