OK - jetzt wissen wir schon mehr - laut Log konte sich dein Arduino verbinden. was er jetzt genau als Post gesendet hat, wissen wir allerdings noch nicht... aber auch das kann man herausfinden.
Nein, ich glaube das war vorallem mein RechnerG
ICh bekomme folgenden Fehler bei deinem Link:
Un
AT+RSI_FWVERSION?
AT+RSI_BAND=0
AT+RSI_INIT
AT+RSI_NUMSCAN=0
AT+RSI_SCAN=0
AT+RSI_NETWORK=INFRASTRUCTURE
AT+RSI_PSK=1*********
AT+RSI_JOIN=*********,0,2
AT+RSI_DNSSERVER=192.168.1.1
AT+RSI_IPCONF=0,192.168.1.48Q38,255.255.255.0,192.168.1.1
AT+RSI_DNSGET=http://mwsystec.de
AT+RSI_DNSGET=http://mwsystec.de
AT+RSI_DNSGET=http://mwsystec.de
DNS ERR
AT+RSI_DISASSOC
Also muss irgendwie schon wieder ein DNS fehler auftauchen
probier jetzt nochmal den Logger - ich hab ihn umgebastelt, so dass er den Request mitloggt.
EDIT - da warst du schneller als ich... also sieht aus, als ob er den Namen nicht auflösen kann - warum auch immer... wichtig wäre jetzt zu wissen, ob es über ip gehen würde, sprich ob es wirklich "nur" am DNS liegt...
du kannst Spasshalber mal statt des Hostnames die IP meines Servers eingeben, müsste auch funktionieren: http://188.40.236.77/redfly.php ... hab ihn so eingestellt, dass er ip-requests annimmt.
EDIT 2: Poste mal bitte deinen KOMPLETTEN Sketch - naürlich mit geschwärzten Zugangsdaten für dein WLAN
Ich bekomme leider immer diesen DNS Error
Poste mal bitte deinen KOMPLETTEN Sketch - natürlich mit geschwärzten Zugangsdaten für dein WLAN
Also jetzt initialisiert er nicht einmal mehr das WLAN Shield, warum auch immer.....Mal sehen woran das liegt.
Ich glaube nur langsam nicht mehr dran, weil er das Shield wie gesagt nicht mehr initialisiert.....eventuell hat sich die firmware verabschiedet
/*
Web Client
This sketch connects to a website using a RedFly-Shield.
*/
#include <RedFly.h>
byte ip[] = { 192,168, 1,138 }; //ip from shield (client)
byte netmask[] = { 255,255,255, 0 }; //netmask
byte gateway[] = { 192,168, 1, 1 }; //ip from gateway/router
byte dnsserver[] = { 192,168, 1, 1 }; //ip from dns server
byte server[] = { 188, 40,236, 77 }; //85.25.245.16
#define HOSTNAME "http://mwsystec.de" //host www.hemitheconyx-caudicinctus.de
uint8_t http=0xFF; //socket handle
uint16_t http_len=0; //receive len
char http_buf[512]; //receive buffer
//serial format: 9600 Baud, 8N2
void debugout(char *s) { RedFly.disable(); Serial.print(s); RedFly.enable(); }
void debugoutln(char *s){ RedFly.disable(); Serial.println(s); RedFly.enable(); }
void setup()
{
uint8_t ret;
//init the WiFi module on the shield
ret = RedFly.init();
if(ret)
{
debugoutln("INIT ERR"); //there are problems with the communication between the Arduino and the RedFly
}
else
{
//scan for wireless networks (must be run before join command)
RedFly.scan();
//join network
ret = RedFly.join("******", "1*****", INFRASTRUCTURE);
if(ret)
{
debugoutln("JOIN ERR");
for(;;); //do nothing forevermore
}
else
{
//set ip config
// ret = RedFly.begin(); //DHCP
// ret = RedFly.begin( 2 ); //1=DHCP or 2=Auto-IP
// ret = RedFly.begin(ip);
ret = RedFly.begin(ip, dnsserver, gateway, netmask);
if(ret)
{
debugoutln("BEGIN ERR");
RedFly.disconnect();
for(;;); //do nothing forevermore
}
else
{
if(RedFly.getip(HOSTNAME, server) == 0) //get ip
{
http = RedFly.socketConnect(PROTO_TCP, server, 80); //start connection to server on port 80
if(http == 0xFF)
{
debugoutln("SOCKET ERR");
RedFly.disconnect();
for(;;); //do nothing forevermore
}
else
{
//send HTTP request
RedFly.socketSendPGM(http, PSTR("POST / HTTP/1.1\r\nHost: "HOSTNAME"/redfly.php\r\n\r\n"));
}
}
else
{
debugoutln("DNS ERR");
RedFly.disconnect();
for(;;); //do nothing forevermore
}
}
}
}
}
void loop()
{
uint8_t sock, buf[32];
uint16_t rd, len;
//Serial.println("Ausgabe");
if(http == 0xFF) //no socket open
{
return;
}
sock = 0xFF; //0xFF = return data from all open sockets
rd = RedFly.socketRead(&sock, &len, buf, sizeof(buf));
if(sock == http)
{
if((rd != 0) && (rd != 0xFFFF))
{
if((http_len+rd) > sizeof(http_buf))
{
rd = sizeof(http_buf)-http_len;
}
memcpy(&http_buf[http_len], buf, rd);
http_len += rd;
}
if((rd == 0xFFFF) || (len == 0)) //connection closed or all data received
{
//close connection
RedFly.socketClose(sock);
//show http buffer
http_buf[sizeof(http_buf)-1] = 0;
debugout(http_buf);
}
}
}
das wäre bitter - aber lass uns das Ding erstmal auf ein minimum stutzen und ein bisschen strukturieren - am liebsten durch den exzesiven Einsatz von Methoden ![]()
Ich bastel mal wieder - allerdings hier im blindflug, da ich kein derartiges Shield habe, und poste es dann... dauert allerdings nen Moment
Ich danke dir dafür, aber ich werde erstmal schauen wie ich das Firmware Update drauf gespielt bekomme....
Kein Ding, ich wühl mich solange durch den Sketch
Ich ahbe gerade mal fix den Reset-Button aufs Shield gelötet (was blieb mir anderes übrig) und jetzt läuft das init wieder
So ich denke die aktuelle php Ausgabe zeigt einen Zugriff des WLAN Shields.
Okay, also ich denke es muss was mit dem HOSTNAMEN zu tun haben, da muss der Link anders angegeben werden.
Cool... woran lag es?
Beim durchwühlen des Codes und der Dokumentation der API ist mir aufgefallen, dass der DNS-Request einen Pointer für ip brauch, um darin die IP des Hostnames zu speichern - bei deinem Sketch wird "server[]" benutzt. allerdings bin ich nicht firm genuig um zu wissen, ob das array beim Request überschrieben wird - da müssten uns die Pointer-Profis Udo und Uwe helfen.
so, hab jetzt mal etwa 90% des Codes dokumentiert und außerdem den Request auf GET umgestellt - versuch mal ob es so funktioniert - wenn ja, sollte man im Log einen GET-Request erkennen...
#include <RedFly.h>
// IP Einstellungen
byte ip[] = { 192,168, 1,138 }; // IP Adresse des Shields
byte netmask[] = { 255,255,255, 0 }; // Subnetzmaske
byte gateway[] = { 192,168, 1, 1 }; // Gateway IP
byte dnsserver[] = { 192,168, 1, 1 }; // DNS-Server IP
byte serverIP[] = {0,0,0,0}; // früher mal server[] - ich hab spaßhalber mal Nullen eingesetzt, da ich hoffe dass es nach dem Aufruf von getip() überschrieben wird.
#define HOSTNAME "mwsystec.de" // Hostname zu dem verbunden werden soll
uint8_t http=0xFF; //socket handle, HTTP-Fehler
uint16_t http_len=0; //receive len
char http_buf[512]; //Receive-Buffer
//serial format: 9600 Baud, 8N2
void debugout(char *s) { RedFly.disable(); Serial.print(s); RedFly.enable(); }
void debugoutln(char *s){ RedFly.disable(); Serial.println(s); RedFly.enable(); }
void setup()
{
uint8_t ret;
ret = RedFly.init(); // Redfly initialisieren
if(ret) // Falls Redfly einen Fehler verursacht, bekommt "ret" einen Rückgabewert
{
debugoutln("INIT ERR"); //there are problems with the communication between the Arduino and the RedFly
}
else
{
//Nach Netzwerken scannen
RedFly.scan();
//dem Netzwerk beitreten
ret = RedFly.join("******", "1*****", INFRASTRUCTURE);
if(ret)
{
debugoutln("JOIN ERR");
for(;;); //do nothing forevermore
}
else
{
// Redfly IP-Konfiguration einstellen, begin(1) benutzt DHCP, andernfalls die jeweilige Konfiguration
ret = RedFly.begin(ip, dnsserver, gateway, netmask);
if(ret) // Eventuellen Fehler abfangen
{
debugoutln("BEGIN ERR");
RedFly.disconnect();
for(;;); //Endlosschleife
}
else
{
if(RedFly.getip(HOSTNAME, serverIP) == 0) //DNSname von HOSTNAME auflösen und in serverIP speichern,
{
http = RedFly.socketConnect(PROTO_TCP, serverIP, 80); // Verbindung zum Server per IP aufbauen
if(http == 0xFF)
{
debugoutln("SOCKET ERR");
RedFly.disconnect();
for(;;); //do nothing forevermore
}
else
{
//HTTP Request senden...
RedFly.socketSendPGM(http, PSTR("GET / HTTP/1.1\r\nHost: "HOSTNAME"/redfly.php?Test=HalloWelt\r\n\r\n")); // HalloWelt per GET (vormals Post) an redfly.php übergeben
}
}
else
{
debugoutln("DNS ERR");
RedFly.disconnect();
for(;;); //do nothing forevermore
}
}
}
}
}
void loop()
{
uint8_t sock, buf[32];
uint16_t rd, len;
//Serial.println("Ausgabe");
if(http == 0xFF) //no socket open
{
return;
}
sock = 0xFF; //0xFF = return data from all open sockets
rd = RedFly.socketRead(&sock, &len, buf, sizeof(buf));
if(sock == http)
{
if((rd != 0) && (rd != 0xFFFF))
{
if((http_len+rd) > sizeof(http_buf))
{
rd = sizeof(http_buf)-http_len;
}
memcpy(&http_buf[http_len], buf, rd);
http_len += rd;
}
if((rd == 0xFFFF) || (len == 0)) //connection closed or all data received
{
//close connection
RedFly.socketClose(sock);
//show http buffer
http_buf[sizeof(http_buf)-1] = 0;
debugout(http_buf);
}
}
}
Okay,ich dank dir für deine Hilfe, aber bei mir wird jetzt nicht mehr viel passieren. Ich bin tierisch müde. Vielen Dank für deine Hilfe und eine gute nacht.
mfg
Balli
p.s. dein sketch teste ich noch und gebe ein feedback
hab noch einen DNS-Fehler gefunden: Hostname MUSS abc.de und nicht http://abc.de sein, habs im Code ausgebessert - ich mach jetzt auch feierabend, war ein langer Tag - kannst ja morgen mal das Ergebnis berichten
immer noch dns-fehler, habe aber gesehen das noch http dabei ist, werde ich morgen entfernen und testen. Gute Nacht
Edit:
ohne http geht es jetzt!Schau mir gleich mal deine Auswertungs Php an.
Edit2:
ich vermute den Fehler fast hier:
RedFly.socketSendPGM(http, PSTR("GET / HTTP/1.1\r\nHost: "HOSTNAME"/redfly.php?Test=HalloWelt\r\n\r\n")); // HalloWelt per GET (vormals Post) an redfly.php übergeben
Ich denke es wird lediglich der Host aufgerufen
Hi Marcus,
ich denke ich habe den Fehler gefunden:
es muss heißen:
RedFly.socketSendPGM(http, PSTR("GET http://"HOSTNAME"/redfly.php?Test=HalloWelt HTTP/1.1\r\nHost: "HOSTNAME"/redfly.php?Test=HalloWelt\r\n\r\n")); // HalloWelt per GET (vormals Post) an redfly.php übergeben
Bei der zweiten Hälfte scheint er nur was abzuholen, der eigentliche Request muss direkt an das Get gebunden werden.
Moin Balli,
Normalerweise sollte ein Request folgendermaßen aussehen:
GET /test.html HTTP/1.1
Host: www.example.net
In unserem konkreten Fall also:
RedFly.socketSendPGM(http, PSTR("GET /redfly.php?Test=HalloWelt HTTP/1.1\r\n Host: "HOSTNAME"\r\n\r\n"));
hab ich gestern abend nicht mehr gesehen, aber anscheinend funktionieren ja beide Varianten
Okay super, ich werde mich heute Nachmittag noch ein wenig intensiver damit beschäftigen. Möchte ja das der Request nur ausgeführt wird, wenn ein Ereignis im Loop auftritt. Und dann muss ich noch die Kommunikation zwischen Laptop (per php Skript) und Arduino hinbekommen... Aber Schritt für Schritt ich bin dir auf jeden Fall unendlich Dankbar