Ich bau grad eine Wetterstation und wollte dass alle 15 Minuten die Werte auf meinem mySQL Server gespeichert werden. Die Werte werden ohne Probleme ausgelesen und ich muss sie nur noch auf dem Server speichern. Das wollte ich über eine Webseite die auf dem Server liegt machen, indem ich die Werte per GET an die Datei schicke.
Das Problem: Ich habe das Ethernet Modul ENC28J60 und ich bin im Netzwerk online, aber ich kann nicht auf eine interne Webseite zugreifen.
Ein weiteres Problem ist, dass ich keinen Slash in der URL eingeben kann, weil ich dann immer den Fehler "400 Bad Request" bekomme.
// Demo using DHCP and DNS to perform a web client request.
// 2011-06-08 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
static uint32_t timer;
const char website[] PROGMEM = "192.168.3.100/wetter/update.php?brightness=1.2";
// called when the client request is complete
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(57600);
Serial.println(F("\n[webClient]"));
if (ether.begin(sizeof Ethernet::buffer, mymac) == 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);
if (!ether.dnsLookup(website))
Serial.println("DNS failed");
ether.printIp("SRV: ", ether.hisip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 5000;
Serial.println();
Serial.print("<<< REQ ");
ether.browseUrl(PSTR("/foo/"), "bar", website, my_callback);
}
}
wobei "192.168.3.100/wetter/update.php?brightness=1.2" der Hostname sein soll. Ich bin nicht erstaunt, dass der Arduino damit nicht wirklich viel anfangen kann.
Okay. Ich habe es mit einem anderen Code geschafft, aber es entstand ein anderer Fehler:
Wenn ich den LuftdruckSensor BMP085 weg lasse, funktioniert alles einwandfrei, aber wenn ich den in den Sketch einfüge, ist die "void Setup" Funktion in der Dauerschleife, bis zu dem Punkt "Ethernet.begin(mac);". Wie kann ich das lösen? Ich finde, dass der Luftdruck wichtig für die Wettervorhersage ist und man das auch mitloggen sollte. Kurz gesagt: Ich will darauf nicht verzichten.
Das tönt für mich nach einem Hardware-Fehler. Wahrscheinlich wird der Arduino geresettet, bevor er weiter kommt, anders kann ich mir bei dem Code einen Endlos-Schleife vor dem Ethernet.begin() nicht vorstellen.