Recupération de données dans un fichier xml

Bonjour,

voici le code final de la partie lecture des fichiers xml, TextFinder est une librairie de recherche dans le texte ce n'est pas qu'une librairie pour lire des fichiers xml. En espérant que cela servira aux personnes en difficultés comme moi :slight_smile:

#include <Ethernet.h>
#include <TextFinder.h>
#include <dht11.h>
bool modedebug=false;
byte mac[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; //adresse mac de votre carte
byte ip[] = {0, 0, 0, 0}; //adresse IP
byte dnServer[] = {0, 0, 0, 0}; //adresse IP
byte mask[]= {0, 0, 0, 0}; //mask
byte gw[]= {0, 0, 0, 0}; //gateway
EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80

typedef struct
{
  int pin;
  String type;
  String label;
  String nom;
  float mesure=15;
}capteur;

File conf;
capteur* tcapteur;
int NBcapteur=0;
unsigned long long previousMillis = 0;

void parseBytes(const char* str, char sep, byte* bytes, int maxBytes, int base) {
      for (int i = 0; i < maxBytes; i++) {
        bytes[i] = strtoul(str, NULL, base);  // Convert byte
        str = strchr(str, sep);               // Find next separator
        if (str == NULL || *str == '\0') {
            break;                            // No more separators, exit
        }
        str++;                                // Point to next character after separator
      }
}



    
void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);
  pinMode(10, OUTPUT);
  digitalWrite(10,HIGH);
  int temp;
  char buff[50];
  String debug="";
  if (!SD.begin(4)) { // Gère les erreurs
    //Serial.println("Erreur de carte SD !");
    for(;;);
    }
    
    conf=SD.open("config.xml", FILE_READ);
    TextFinder finder(conf);
    //Mode Debug
    conf.seek(0);
    temp=finder.getString("<debug>","</debug>",buff,50);
    debug=buff;
    if(debug.startsWith("oui"))
    {
      modedebug=true;
    }
    //Analyse reseau\\
    conf.seek(0);
    temp=finder.getString("<ip>","</ip>",buff,50);
    parseBytes(buff, '.', ip, 4, 10);
    //
    temp=finder.getString("<dns>","</dns>",buff,50);
    parseBytes(buff, '.',dnServer, 4, 10);
    //
    temp=finder.getString("<gw>","</gw>",buff,50);
    parseBytes(buff, '.',gw, 4, 10);
    //
    temp=finder.getString("<mask>","</mask>",buff,50);
    parseBytes(buff, '.',mask, 4, 10);
    //
    temp=finder.getString("<mac>","</mac>",buff,50);
    parseBytes(buff, ':',mac, 6, 16);
    Ethernet.begin(mac,ip,dnServer,gw,mask);
    Serial.println(Ethernet.localIP());
    if(modedebug==true){
      Serial.println("configuration réseaux");
      Serial.println("adresse IP:");
      Serial.println(ip[0]);Serial.println(ip[1]);Serial.println(ip[2]);Serial.println(ip[3]);
      Serial.println("adresse dns:");
      Serial.println(dnServer[0]);Serial.println(dnServer[1]);Serial.println(dnServer[2]);Serial.println(dnServer[3]);
      Serial.println("adresse GW:");
      Serial.println(gw[0]);Serial.println(gw[1]);Serial.println(gw[2]);Serial.println(gw[3]);
      Serial.println("adresse Mask:");
      Serial.println(mask[0]);Serial.println(mask[1]);Serial.println(mask[2]);Serial.println(mask[3]);
      Serial.println("adresse MAC:");
      Serial.println(mac[0],HEX);Serial.println(mac[1],HEX);Serial.println(mac[2],HEX);Serial.println(mac[3],HEX);Serial.println(mac[4],HEX);Serial.println(mac[5],HEX);
    }
    
    
    
    //analyse des capteurs\\
    conf.seek(0);
    while(finder.find("<capteur>"))
    {
      NBcapteur++;
    }
    tcapteur=new capteur[NBcapteur];
    
  
    //rangements des pins des capteurs
    conf.seek(0);
    for(int i=0;i<NBcapteur;i++){
      finder.find("<pin>");
      temp=finder.getValue();
      tcapteur[i].pin=temp;
    }

    //rangement des noms des capteurs 
    conf.seek(0);
    for(int i=0;i<NBcapteur;i++){
    temp=finder.getString("<nom>","</nom>",buff,50);
    tcapteur[i].nom=buff;
    }

    //rangement des labels des capteurs 
    conf.seek(0);
    for(int i=0;i<NBcapteur;i++){
    temp=finder.getString("<label>","</label>",buff,50);
    tcapteur[i].label=buff;
    }

    //rangement des types de capteurs 
    conf.seek(0);
    for(int i=0;i<NBcapteur;i++){
    temp=finder.getString("<type>","</type>",buff,50);
    tcapteur[i].type=buff;
    }

    if(modedebug==true){
      Serial.print("NBcapteur: ");Serial.println(NBcapteur);
      Serial.println("analyse des capteurs");
      Serial.print("nom du capteur | ");Serial.print("type du capteur | ");Serial.print("label du capteur | ");Serial.println("pin du capteur | ");
      for(int i=0;i<NBcapteur;i++){
      Serial.print(tcapteur[i].nom);Serial.print(" | ");Serial.print(tcapteur[i].type);
      Serial.print(" | ");Serial.print(tcapteur[i].label);Serial.print(" | ");Serial.println(tcapteur[i].pin);
      }
    }