Bonjour,
j’ai créé un mini-serveur pour afficher des images et recevoir des requêtes à l’aide des librairies SPI et Ethernet.
Le problème est le temps d’affichage surement dû au peu d’efficacité de ma méthode pour lire la requête.
J’ai essayé de voir se que renvoyait client.available pour pouvoir anticiper le nombre de bits à lire mais il ne renvoyait jamais un nombre nul
J’aimerait savoir si il est possible de rendre plus efficace les lignes :
c = client.read();
buffer +=c;
GetPosition = buffer.indexOf("GET /");
HTTPPosition = buffer.indexOf(" HTTP");
requeteHTML = buffer.substring(GetPosition+5, HTTPPosition);
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,49);
EthernetServer server(80);
String readString;
File webFile;
int GetPosition;
int HTTPPosition;
char c;
int n;
byte buf[2048];
String buffer;
static String requeteHTML;
void setup(){
Serial.begin(9600);
Ethernet.begin(mac, ip);
server.begin();
if(!SD.begin(4)){
Serial.println("ERREUR");
return;
}
}
void loop(){
EthernetClient client = server.available();
if (client){
buffer = "";
while (client.connected()){
if (client.available()){
c = client.read();
buffer +=c;
GetPosition = buffer.indexOf("GET /");
HTTPPosition = buffer.indexOf(" HTTP");
requeteHTML = buffer.substring(GetPosition+5, HTTPPosition);
if (c == '\n'){
if (requeteHTML.endsWith(".png")){
webFile = SD.open("Shasse/"+requeteHTML);
if (webFile){
while (1){
n = webFile.available();
if (n == 0) break;
if (n > 2048) n = 2048;
webFile.read(buf, n);
client.write(buf, n);
}
webFile.close();
}
}
else{
webFile = SD.open("Shasse/Shasse.txt");
if (webFile){
while (1){
n = webFile.available();
if (n == 0) break;
if (n > 2048) n = 2048;
webFile.read(buf, n);
client.write(buf, n);
}
webFile.close();
}
}
break;
}
}
}
client.stop();
}
}
Merci d’avance.
->jcomble