bonjour,
j'essaie de configurer mon ethernet shield en serveur. pour que la page heberger par l'arduino soit avenante je voudrais afficher une image stocker sur la carte sd.
Mais voila, dès que j'initialise la communication avec le shield ethenet je perd la communication avec la carte sd :
void setup() {
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(5,OUTPUT);
Serial.begin (9600); //initialisation de communication série
if (!SD.begin(4)){//teste la communication avec la carte(pin 4)
Serial.println("Communication impossible");
return; //stoppe le programme
}
else {
Serial.println("Communication ok !");}
Ethernet.begin (mac); //initialisatio de la communication Ethernet
server.begin();
if (Ethernet.begin( mac) == 0)
{ Serial.println(" FAILED!");
}
else {
Serial.println(" OK!");
Serial.print(" IP Address: ");
Serial.println( Ethernet.localIP());
Serial.print(" Default Gateway: ");
Serial.println( Ethernet.gatewayIP());
Serial.print(" Subnet Mask: ");
Serial.println( Ethernet.subnetMask());
Serial.print(" DNS Server: ");
Serial.println( Ethernet.dnsServerIP());
}
if (!SD.begin(4)){//teste la communication avec la carte(pin 4)
Serial.println("Communication impossible");
return; //stoppe le programme
}
else {
Serial.println("Communication ok !");}
}
qui me renvoie :
communication ok
les paramètres ip, mac communication impossible
Commencez par le Ethernet.begin() et configurez la SD ensuite - essayez avec ça dans le setup
(tapé dans le forum directement, donc possible qu'il y ait des erreurs de frappe - cf les commentaires par changer la mac address et le nom de votre image)
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h> // vaut mieux utiliser SDFat.h, mais si vous ne l'avez pas, commencez par ça
// MAC address (si nécessaire regardez l'auto-collant de votre Ethernet shield sous la carte)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
cons byte sdcardCSPin = 4;
const char * nomImage = "/monImage.jpg"; // <-- A CHANGER POUR LE BON NOM
EthernetServer server(80);
void setup()
{
pinMode (SS, OUTPUT);
pinMode (sdcardCSPin, OUTPUT); // SDCard cs
Serial.begin(115200); // console à 115200
Ethernet.begin(mac);
server.begin();
if (!SD.begin(sdcardCSPin)) {
Serial.println(F("ERREUR - SD"));
while(1); // on meurt ici
}
Serial.println(F("SD card OK"));
// check for index.htm file
if (!SD.exists(nomImage)) {
Serial.println(F("ERREUR - PAS DE FICHIER IMAGE"));
while(1); // on meurt ici
}
Serial.println(F("OK SD et FICHIER."));
}
void loop()
{}
exactement, je pense donc que les deux librairies sont en conflit car elle partagent le protocole spi
j'ai téléchargé sdfat, mais j'ai du mal à trouver la doc afin de réaliser un test avec cette librairie
le SPI est fait pour être partagé et si vous mettez bien la pin SS et 4 en OUTPUT il n'y a pas de raison pour que ça ne fonctionne pas (sauf clone de mauvaise facture)
si je met 10 en output alors j'obtiens directement le message communication impossible :o
#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
#include <SD.h>
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xF3, 0x9B}; // tableau pour l'adresse MAC de votre carte
EthernetServer server(80);
int dit;
int temperature;
int masse;
int effectif;
void setup() {
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(5,OUTPUT);
pinMode (10,OUTPUT);
pinMode(4,OUTPUT);
Serial.begin (9600); //initialisation de communication série
if (!SD.begin(4)){//teste la communication avec la carte(pin 4)
Serial.println("Communication impossible");
return; //stoppe le programme
}
else {
Serial.println("Communication ok !");}
Ethernet.begin (mac); //initialisatio de la communication Ethernet
server.begin();
if (Ethernet.begin( mac) == 0)
{ Serial.println(" FAILED!");
}
else {
Serial.println(" OK!");
Serial.print(" IP Address: ");
Serial.println( Ethernet.localIP());
Serial.print(" Default Gateway: ");
Serial.println( Ethernet.gatewayIP());
Serial.print(" Subnet Mask: ");
Serial.println( Ethernet.subnetMask());
Serial.print(" DNS Server: ");
Serial.println( Ethernet.dnsServerIP());
}
if (!SD.begin(4)){//teste la communication avec la carte(pin 4)
Serial.println("Communication impossible");
return; //stoppe le programme
}
else {
Serial.println("Communication ok !");}
}
il s'agit bien d'un uno
internet fonctionne car mon code (ci-dessous ) permet d'accéder à la page (image jointe)
#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
#include <SD.h>
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xF3, 0x9B}; // tableau pour l'adresse MAC de votre carte
EthernetServer server(80);
int dit;
int temperature;
int masse;
int effectif;
void setup() {
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(5,OUTPUT);
pinMode(4,OUTPUT);
Serial.begin (9600); //initialisation de communication série
if (!SD.begin(4)){//teste la communication avec la carte(pin 4)
Serial.println("Communication impossible");
return; //stoppe le programme
}
else {
Serial.println("Communication ok !");}
Ethernet.begin (mac); //initialisatio de la communication Ethernet
server.begin();
if (Ethernet.begin( mac) == 0)
{ Serial.println(" FAILED!");
}
else {
Serial.println(" OK!");
Serial.print(" IP Address: ");
Serial.println( Ethernet.localIP());
Serial.print(" Default Gateway: ");
Serial.println( Ethernet.gatewayIP());
Serial.print(" Subnet Mask: ");
Serial.println( Ethernet.subnetMask());
Serial.print(" DNS Server: ");
Serial.println( Ethernet.dnsServerIP());
}
if (!SD.begin(4)){//teste la communication avec la carte(pin 4)
Serial.println("Communication impossible");
return; //stoppe le programme
}
else {
Serial.println("Communication ok !");}
}
void loop() {
temperature = analogRead (A0);
masse = analogRead (A1);
effectif = analogRead (A2);
EthernetClient client = server.available(); // try to get client
if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
true;
// send a standard http response header
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println(F("Connection: close"));
client.println();
// send web page
client.println(F("<!DOCTYPE html>"));
client.println(F("<html>"));
client.println("<head>");
client.println("<META HTTP-EQUIV=""Refresh"" CONTENT=""5"">");
client.println("<title>Arduino Web Page</title>");
client.println("</META>");
client.println("</head>");
client.println("<body>");
client.println(F(" <div style=""text-align: center; font-weight: bold; color: rgb(255, 102, 0);""><big><big><span style=""font-family: Javanese Text;"">Ma ruche connecte</span>
</big></big></div>"));
client.println(F("<span style=""font-family: Courier New,Courier,monospace;""></span>"));
client.println(F("<table style=""text-align: left; width: 1251px; height: 119px;"" border=""1""cellpadding=""2"" cellspacing=""2"">"));
client.println(F("<tbody>"));
client.println(F("<tr>"));
client.print(F("<td style=""width: 18%;""><span style=""font-weight: bold; font-family: Marlett;""> temperature: "));
client.print(temperature);
client.println(F("</span></td>"));
client.println(F("<td style=""width: 40%;"" colspan=""1"" rowspan=""3""><img src='ruche.jpg'></td>"));
client.println(F(" <td colspan=""1"" rowspan=""3"" align=""undefined"" valign=""undefined"">video</td>"));
client.println("</tr>");
client.println("<tr>");
client.print(F("<td align=""undefined"" valign=""undefined""><span style=""font-weight: bold; font-family: Marlett;"">Masse: "));
client.print(masse);
client.println(F("</span></td>"));
client.println(F(" </tr>"));
client.println(F(" <tr>"));
client.print(F("<td align=""undefined"" valign=""undefined""><span style=""font-weight: bold; font-family: Marlett;"">Effectif: "));
client.print(effectif);
client.println(F("</span></td>"));
client.println(F(" </tr>"));
client.println(F(" </tbody>"));
client.println(F("</table>"));
client.println(F("
"));
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}