Hallo,
ich habe die letzten Tage an Funk-Temperatursensoren gearbeitet, die ihre Daten per 433 Mhz an einen Arduino Ethernet schicken.
Dieser soll die Daten an ein PHP-Webscript übergeben.
Die Nodes funktioniert fehlerfrei. Ich habe mir also einzeln zwei Sketches gebaut; einmal um die Daten per 433 zu empfangen - das funktioniert - und einen Sketch mit einer Funktion, um diese empfangenen Daten an das PHP-Script zu übergeben.
Beide einzeln funktionieren prima - führe ich beide in einem Sketch zusammen funktioniert die GET-Anfrage über die Funktion connect() nicht mehr.
Ich habe nach und nach einzelne Zeilen auskommentiert und festgestellt: Sobald die Zeilen:
vw_setup(2000); // Bits per sec
vw_set_rx_pin(RX_Pin); // We will be receiving on pin 4 i.e the RX pin from the module connects to this pin.
vw_rx_start(); // Start the receiver
auskommentiert sind, werden meine Daten auch wieder an das Webscript übergeben.
Mal der ganze Code - ich hoffe gut kommentiert. Die Zeilen die auskommentiert sind gehören zur VirtualWire-Lib; wenn auskommentiert, funktioniert die Übergabe an das PHP-Script:
// https://gist.github.com/SergXIIIth/1628715
#include <SPI.h>
#include <Ethernet.h>
#include <VirtualWire.h>
// PIN, an den der 433 Mhz Empfänger angeschlossen ist
int RX_Pin = 8;
byte mac[] = {
0x00, 0xAB, 0xCB, 0xCD, 0xDE, 0x02 };
byte ip[] = { 192,168,2,177 };
byte subnet[] = { 255,255,255,0 };
byte gateway[] = { 192,168,2,1 };
byte dns1[] = { 192,168,2,1 };
char server[] = "www.3bm.de";
EthernetClient client;
void setup() {
Serial.begin(9600);
Serial.print("Setup LAN ... ");
// give the Ethernet shield a second to initialize:
delay(1000);
Ethernet.begin(mac, ip, dns1, gateway, subnet);
Serial.println("ok");
// VirtualWire initialisieren
//vw_setup(2000); // Bits per sec
//vw_set_rx_pin(RX_Pin); // We will be receiving on pin 4 i.e the RX pin from the module connects to this pin.
//vw_rx_start(); // Start the receiver
}
void loop(){
//uint8_t buf[VW_MAX_MESSAGE_LEN];
//uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Daten-Variable, die die empfangenen Daten hält
//char SensorDataTemp[24];
// Daten-Variable, zum Übergeben der Daten an die WebRequest-Funktion
//String SensorData;
// Empfang von Daten prüfen
// if (vw_get_message(buf, &buflen)) {
// int i;
// // Datagramm zusammensetzen
// for (i = 0; i < buflen; i++) {
// // Serial.print((char)buf[i]); // the received data is stored in buffer
// SensorDataTemp[i] = (char)buf[i];
// }
//
// // Char-Variable terminieren
// SensorDataTemp[buflen] = '\0';
// // Serial.print("Daten empfangen: ");
// // Serial.print(SensorDataTemp);
// // Serial.println();
//
// // Char to String-Konvertierung zur Übergabe an die connect()-Funktion
// SensorData = SensorDataTemp;
//
// // Console-Output zum Debuggen
// Serial.print("Daten empfangen: ");
// Serial.print(SensorData);
// Serial.println();
// }
Serial.println("Daten schicken...");
String dataTEST = "1;TEMP1:88.00";
connect(dataTEST);
delay(60000);
}
void connect(String payload){
if (client.connect(server, 80)) {
Serial.print("Anfrage senden an ");
Serial.print(server);
client.println("GET /xxx/index.php?data="+payload+"&key=xxx HTTP/1.0");
client.println("HOST: 3bm.de");
client.println();
client.stop();
Serial.println();
Serial.println("Daten uebermittelt.");
Serial.println("--- Getrennt ---");
Serial.println();
}
else {
// kf you didn't get a connection to the server:
Serial.println("!!! Verbindung fehlgeschlagen");
}
// DEBUGGING!
// while (client.available()) {
// char c = client.read();
// Serial.print(c);
// }
//
// // if the server's disconnected, stop the client:
// if (!client.connected()) {
// Serial.println();
// Serial.println("Trennen.");
// Serial.println("----------------------");
// client.stop();
// }
}
Ich habe nach folgenden Zeilen ein Serial.println("Geht los"); hinzugefügt:
void connect(String payload){
Und genau soweit komme ich - bis zu client.connect() - danach passiert auch nichts mehr; d.h. der SerialOutput hört einfach auf.
Ich meine soetwas ähnliches schonmal gehabt zu haben - und vermute, dass der RAM voll ist? Wenn ja, was kann ich da den jetzt tun?!