bin nun ein Stückchen weiter, aber generell ist das RF433 doch echt murks, was die Reichweite angeht und gute Übertragung
Hi,
ich baue gerade eine Temperatur Überwachung und habe das Ganze nun erweitert um die Werte via RF433 MHz zu übertragen.
Vom Prinzip funktioniert das Ganze, aber irgendwie will es mir nicht gelingen, das die Werte sauber angekommen.
Ich benutze die VirtualWire Lib
funktionierter Sender-Programm-Auszug:
funktionierter Empfänger-Programm-Auszug:Code:. . . . const char *toSend = "24,48,1009"; vw_send((uint8_t *)toSend, strlen(toSend)); vw_wait_tx(); delay(200); . . . .
wenn ich nun den statischen String umbaue, um die Messwerte zu übertragen funktioniert es nicht mehr.Code:. . . . if (vw_get_message(buf, &buflen)) // check to see if anything has been received { int i; for (i = 0; i < buflen; i++) { Serial.print((char)buf[i]); // the received data is stored in buffer StrReceived[i] = char(buf[i]); // data to array } // split data into array sensorData sscanf(StrReceived, "%d,%d,%d", & sensor[0], & sensor[1],& sensor[2]); // Converts a string to an array // } // for (int i = 0; i < maxSensorData; i++){ // nice output // Serial.print("Sensor"); Serial.print(i); Serial.print(":"); // Serial.print(sensor[i]); Serial.print("\t"); // } Serial.println(""); // linefeed // reset variable StringReceived // memset(StrReceived, 0, sizeof(StrReceived)); // delay(1000); } display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.print("Temperatur: "); display.print(sensorData[0]); display.println(" *C"); // display.display(); // display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.print("Pressure: "); display.print(sensorData[2]); display.println(" hPa"); display.setTextSize(1); display.setTextColor(WHITE); display.print("Approx. Alt: "); // display.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); display.println(" m"); display.setTextSize(1); display.setTextColor(WHITE); display.print("Humidity: "); display.print(sensorData[1]); display.println(" %"); display.display(); delay(5000); display.clearDisplay(); } . . . .
nicht funktionierter Sender-Programm-Auszug:
ich sehe zwar im Monitor, das die Werte ausgelesen werden und, aber es kommt nichts mehr an... interessant je länger es läuft desto länger wird die Zeile ich weiss nur nicht ob es am Monitor liegt oder ob es ein Fehler ist. er bufft die irgendwie zwischen. jemand ähnlich Erfahrungen gemacht ? oder fehlt mir nur Programm VerständnisCode:. . . . void Read_Sensor4() { alt = (bme.readAltitude(SEALEVELPRESSURE_HPA)); //alt = 300; itoa(alt, msg1, 10); } void Send_Data() { //strcat(msg1, msg0); //strcat(msg1, msg2); //strcat(msg3, msg0); //strcat(msg3, msg4); strcat(toSend, msg1); strcat(toSend, msg0); strcat(toSend, msg2); vw_send((uint8_t *)toSend, strlen(toSend)); vw_wait_tx(); delay(200); . . . .
cYa
Geändert von piggituX (06.02.2017 um 23:43 Uhr)
cYa pig
bin nun ein Stückchen weiter, aber generell ist das RF433 doch echt murks, was die Reichweite angeht und gute Übertragung
cYa pig
https://alexbloggt.com/fenstersensoren-arduino/
Da steht, dass man bessere Empfänger benutzen sollte...
Grüssle, Sly
..dem Inschenör ist nix zu schwör..
moin,
was mich gerade so nervt ist, schicke ich eine statische Messung kann ich locker 10m entfernt sein, und das kommt an. Auch das Senden eines einfachen On / Off funktioniert ohne Probleme ...... nur wenn man mehr als das schickt , will es nicht so richtig.
vielleicht sollte ich die andere Lib testen.
oder ich überspinge V2 und gehe gleich zu V3 über und baue es mit nem ESP8622 nochmal neu auf.
cYa pig
ESP32, der hat auch BT mit drinne aber die Lib ist leider immernoch SEHR Basic, du brauchst schon ein gutes BTLE Buch um die Config für den GATT Server zu verstehen XD
Ein Kollege von mir arbeitet gerade dran eine einfache Lib mit Grundlegenden Funktionen zu implementieren, der hat wesentlich mehr Plan von BTLE.
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Mit welcher Datenübertragungsrate überträgst Du deine Bits denn?
Je höher die ist, um so empfindlicher wird das Ganze.
Wir haben mal vor ein paar Jahren ein Telemetriesystem mit RFM Modulen gebaut.
http://www.toeging.net/flieger/profi...telemetrie.htm
Das hat über 200...300m Outdoor gut funktioniert.
Auch eine Fehlererkennung bzw. Korrektur sollte bei einer Funkstrecke schon mit drin sein.
hi,
das ist ein guter Hinweis, ich habe erstmal den Standard drin mein ich von 2000 bits pro Sekunde
wenn ich nur ne statische Message sende klappt das, wobei ich mich schon frage, wo da der Unterschied liegt, weil ich die Messwerte auch als char Message übertrage.Code:vw_setup(2000); // Bits pro Sekunde
Oder die China Teile haben so eine grosse Toleranz..... und je länger die laufen desto schlechter werden die
cYa pig
Wenn es mit kurzen Sequenzen geht und mit Langen nicht, könnte es an einer "Überlastung" beim Controller liegen.
Bits werden verschluckt, weil der Controller gerade was anderes macht - Das Problem hatte ich mal bei einer SD-FAT Library.
Kommen die vorderen Bytes richtig an und die späteren nicht mehr?
Das würde auf so einen Fehler hinweisen.
Obwohl man das bei 2000 Bit/s eigentlich nicht schaffen kann.
Ich bin da leider mit dem Arduino nicht so fit, drum kann ich mit Deinem Code relativ wenig anfangen.
Versuch doch mal den Hardware USART zu nutzen und die Empfangsroutine im Interrupt laufen zu lassen.
HI,
so wie msg1 auch mit
Code:const char msg0[] = {","}; char msg1[10]; char msg2[10]; char toSend[140];
liegen sender / empfänger nur 1m auseinander funktioniert es.
ich habe mich ein bisschen an dem Tutorial lang gehangelt
cYa
cYa pig
Lesezeichen