Bonjour,
je dois me connecter à un site (http://192.168.1.1/Dom/MAJ.php) avec un shield enc28j60
j'ai trouvé la librairie EtherCard qui fonctionne bien pour se connecter à un site. mais lorsque je met des GET, cela me retourne une page 404. sauriez vous de quoi ça peut venir?
Je vous met le code ci dessous (cela peut en aider d'autre)..
#include <EtherCard.h>
static byte mymac[] = { 0xDA,0xDA,0xD0,0xD0,0x00,0x1 };
byte Ethernet::buffer[700];
static uint32_t timer;
//Callback
static void my_callback (byte status, word off, word len) {
Serial.println(">>>");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println("...");
}
void setup () {
Serial.begin(9600);
Serial.println("\n[webClient]");
if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0)
Serial.println(F("Failed to access Ethernet controller"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
char websiteIP[] = "192.168.1.1";
ether.parseIp(ether.hisip, websiteIP);
ether.printIp("SRV: ", ether.hisip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 5000;
Serial.println();
ether.browseUrl(PSTR("/Dom/MAJ.php?"), "get=Hello", "192.168.1.1", my_callback);
}
}
J'ai bien un retour si à la dernière ligne je met :
ether.browseUrl(PSTR("/Dom/MAJ.php?"), "", "192.168.1.1", my_callback);
et biensure dans un navigateur :
http://192.168.1.1/Dom/MAJ.php?a=b
fonctionne très bien.
Si quelqu'un à une idée. Je serai preneur.
Merci d'avance
bonjour,
teste ca
ether.browseUrl(PSTR("/Dom/MAJ.php?get="), "Hello", "192.168.1.1", my_callback);
en partant du principe que la variable s'appelle get, ce qui n'est pas une bonne idée
Merci beaucoup, ça fonctionne, mais pas juste en changeant cette ligne.
Je deviens fou avec les erreurs 400 et je ne comprend pas pourquoi.
Je vais afficher mon code modifié (ça pourra toujours en aider certains).
Mais dès que je touche certaines choses, j'ai des erreurs 400. En premier, voici mon code:
#include <EtherCard.h>
//Adresse MAC
static byte mymac[] = { 0xDA,0xDA,0xD0,0xD0,0x00,0x1 };
byte Ethernet::buffer[700];
static uint32_t timer;
// retour du client
static void my_callback (byte status, word off, word len) {
Ethernet::buffer[off+300] = 0;
Serial.println("Contenu HTML");
String tout = (const char*) Ethernet::buffer + off;
Serial.println(tout);
}
void setup () {
Serial.begin(9600);
//On prépare la carte
Serial.println("\n[webClient]"); //A afficher sinon on a un bad request
if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0)
Serial.println(F("Failed to access Ethernet controller"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
char websiteIP[] = "192.168.1.1";
ether.parseIp(ether.hisip, websiteIP);
ether.printIp("SRV: ", ether.hisip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 15000;
Serial.println();
ether.browseUrl(PSTR("/Domotique/Arduino?a="), "Hello", "192.168.1.1", my_callback);
}
}
J'ai un retour en erreur 400 si:
- je change les println pour le traduire en français
- comme noté dans le code : je dois laisser le "Serial.println("\n[webClient]");"
- j'ai voulu récupérer dans ma callback le message de retour pour le traiter mais la commande "int pos=tout.indexOf("ip");" après le "Serial.println(tout);" bien que la commande soit déjà revenu, me donne une erreur 400 du serveur
Auriez vous une idée?
Explications de l'erreur 400, Mauvaise requête
La requête HTTP n'a pas pu être comprise par le serveur en raison d'une syntaxe erronée. Le problème peut provenir d'un navigateur web trop récent ou d'un serveur HTTP trop ancien.
dans ta requete
/Domotique/Arduino?a=
A quoi correspond Arduino?
une requête appelle un fichier html/php (je passe le Js)
donc, a voir les logs sur le server pour comprendre l'erreur 400