Probleme mit Serieller Verbindung

Guten Tag miteinander,

hier mal eine kurze Beschreibung von meinem Projekt:
Ich habe im Garten am Pool einen Temperatursensor angebracht.
(Daneben habe ich noch ein Barometer, Hygrometer und andere Temp.Sensoren).
Ein Arduino Nano liest alle Werte ein, gibt sie u.a. auf einem Display aus und sendet die Daten anschließend über ein Funkmodul raus (FS1000A).

Etwa 7m weiter im Wohnzimmer habe ich einen zweiten Arduino (Uno), der die Daten über Funk empfängt und anschließend über die serielle Schnittstelle an einen Raspberry Pi ausgibt.

Auf dem Raspberry Pi läuft ein Python Script, dass die 0en und 1en richtig übersetzt und auf eine Website lädt.

Alles funktioniert soweit recht gut, allerdings hatte ich Probleme den Arduino Uno am Raspberry zum sprechen zu bringen. Momentan habe ich den Arduino über die TX RX Leitungen am RaspberryPi angeschlossen (TX_Arduino mit Spannungsteiler auf 3,3V).

Stecke ich das USB-Kabel vom Arduino in ein Netzteil, sendet der Arduino keine Daten über TX.
Stecke ich das USB-Kabel in den RaspberryPi, sendet der Arduino keine Daten über TX.
Stecke ich das USB-Kabel in mein MacBook, sender der Arduino Daten über TX!

Es sieht mir fast so aus, als müsste man dem Arduino erst mitteilen "Du kannst jetzt senden".
Ich möchte allerdings ununterbrochen Daten senden, egal ob das USB-Kabel angeschlossen ist, oder nicht..

Gibt es da eine möglichkeit?
Vielen Dank schon mal für die Hilfe :slight_smile:

Hast uns mal nen Schaltplan?

Abgesehen von den Hardware-Problemen wäre zu prüfen, ob der Sendepuffer irgendwann überläuft, wenn die Schnittstelle gesperrt ist (DTR/DTS?). Über USB sollte beim Uno eigentlich immer alles rausgehen, zumindest habe ich keine Steuerleitung dafür gefunden.

Hast Du vielleicht einen Software-Handshake eingebaut (XON/XOFF)?

Normaler Aufbau: Ein UNO holt sich die Zeit bei einem RTC-Modul, schreibt sie auf ein LC-Display und schickt sie auf den seriellen Monitor der IDE.
Testaufbau: UNO mittels Netzteil versorgt, also kein USB, UNO-TX an RX3 und UNO-RX an TX3 von einem Mega 2560. Der Sketch auf dem Mega leitet die Info von Serial3 weiter an Serial, wo der serielle Monitor der IDE angesprochen wird.

Ergebnis: Die Zeit wird auf dem seriellen Monitor angezeigt, obwohl TX auf dem UNO nicht blinkt.

Infinitgeering:
Es sieht mir fast so aus, als müsste man dem Arduino erst mitteilen "Du kannst jetzt senden".

Aus meinem Testergebnis würde ich schließen, daß dies nicht notwendig ist.

Hast Du an Nullmodem (RX-TX, TX-RX) gedacht?

Hast Du an Nullmodem (RX-TX, TX-RX) gedacht?

Ja, habe ich natürlich gemacht.
Er schickt ja auch Daten rüber, ich empfange Sie ja schließlich auch.
Nur eben wenn das USB-Kabel in meinem MacBook steckt...

Hier mal mein Code:

#include <VirtualWire.h>

const int led_pin = 13;
const int transmit_pin = 12;
const int receive_pin = 11;
const int transmit_en_pin = 3;

void setup()
{
    delay(1000);
    Serial.begin(9600);

    // Initialise the IO and ISR
    vw_set_tx_pin(transmit_pin);
    vw_set_rx_pin(receive_pin);
    vw_set_ptt_pin(transmit_en_pin);
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(1000);	 // Bits per sec

    vw_rx_start();       // Start the receiver PLL running

    pinMode(led_pin, OUTPUT);
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)&&(buf[0]=0xDE)&&(buf[1]=0xAD)&&(buf[2]=0xBE)&&(buf[3]=0xEF)) // Checking identifier from sensor (when different sensors are used near by)
    {
        digitalWrite(led_pin, HIGH); 
	int sent = Serial.write(buf, buflen); 
        Serial.println();
        digitalWrite(led_pin, LOW);
        delay(10000);
    }
}