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 ![]()
#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);
}
}