Arduino empfängt keine Daten über XBee->RX; versenden klappt

Hallo liebe Community,

ich komme bei folgendem Problem nicht mehr weiter und habe mein Fehleranalysepluver verschossen. Hab ihr Ideen, wo der Fehler liegen könnte? Sind die Schlüsse, die ich gezogen habe, vielleicht am mancher Stelle nicht richtig?

Ziel: zwei Arduino Nano sollen in einem umfangreicheren Projekt via Xbee mit einem Raspberry Pi bidirektional Daten austauschen.

Zwischenziel: zwei Arduinos (Nano/Uno) sollen über ihre serielle Schnittstelle und über XBee Module Daten austauschen.

Uno/Tx--->XBee1/DIN---->XBee1/RF ~ ~ ~ ~ ~ > XBee2/RF--->XBee2/DOUT--->Nano/RX

Verwendete Hardware:
1x Arduino Uno SMD
1x Elegoo Nano v3
2x XBEE S2C XB24, mit 802.15.4 Firmware und Default Mode (https://www.digikey.de/product-detail/de/digi-international/XB24CDMPIT-001/602-1961-ND/6226949)
2x Parallax XBee 5V/3.3V Adapter Board (XBee 5V/3.3V Adapter Board - Parallax)
1x Parallax XBee USB Adapter Board (XBee USB Adapter Board - Parallax)
1x Adafruit 1.44'' (Adafruit 1.44 Color TFT LCD Display with MicroSD Card breakout [ST7735R] : ID 2088 : $14.95 : Adafruit Industries, Unique & fun DIY electronics and kits)

Problem: die Arduinos (Nano und Uno) empfangen keine Daten über die serielle Schnittstelle, also Serial.available() immer gleich 0; das empfangen der Daten, die eine Arduino versendet, über das USB Adapter Board am Raspberry Pi funktioniert allerdings, also: senden via Arduino funktioniert und empfangen am RPi funktioniert auch.

Folgende Test-Codes sollen das Problem weitgehend isolieren:

Sketch Uno:

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print('A');
  delay(1000);
  Serial.print('B');
  delay(1000);

}

Sketch Nano:

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>
#define TFT_CS        10
#define TFT_RST        9
#define TFT_DC         8
#define MAGENTA 0xF81F
char piValue = 0;
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  Serial.begin(9600);
  tft.initR(INITR_144GREENTAB);
  tft.fillScreen(ST77XX_BLACK);
}
void loop() {
  if(Serial.available()>0) {
    
    piValue = Serial.read();
    piValue = piValue - 48;
    drawnumber(piValue);
  }
     
}
void drawnumber(int number) {
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(MAGENTA);
  tft.setTextSize(7);
  tft.setTextWrap(true);
  tft.print(number);
}

Folgende Fehlerquellen habe ich bereits überprüft:

  • Der Sketch läuft wie gewollt, wenn ich Tx-Uno->Rx-Nano und Tx-Nano->Rx-Uno mit gemeinsamer Masse verbinde.

- Also funktionieren Display und direkte serielle Kommunikation.

  • Die Xbee Module kommunizieren im Default Mode wie gewünscht birekrektional, wenn ich ein XBee-Modul mit dem USB Adapter und das andere mit dem 5/3.3 Adapter Board über USB/TTL mit meinem Laptop verbinde und über das X-CTU Terminal Bytes versende.

- Also funktionieren die XBee Module, das Parallax 5/3.3 Adapter Board und das USB Adapter Board.

  • Ich verwende bei beiden Boards eine externe Spannungsversorgung, es kommen also keine Daten bspw. über USB rein.

  • Baud-Rate ist überall 9600.

  • Da am ich am RPi genau die versendeten Bytes empfange (und keinen Datenmüll), ist auch die Konfiguration der Seriellen Kommunikation (Anzahl Datenbits, Startbit, Stopbit, Paritybit) nicht die Ursache des Problems.

  • Ich habe schon Boards gewechselt, es funktioniert weder mit Nano noch mit Uno, egal wer empfängt und wer sendet, auch nicht ohne Display und nur mit einer blöden Diode als Anzeige. (Es wird schon so sein, dass ich einen Fehler mache..)

  • Rx blinkt am empfangenden XBee2/Parallaxboard, wenn sekundenweise die Bytes ankommen.

  • Sogar am empfangenden Nano blinkt Rx, wenn sekundenweise die Bytes ankommen. (Das macht mich am meisten fertig!)

  • Die Spannung am XBee2/DOUT des Parallaxboards liegt bei 4.6V, ist also für die Arduinos verständlich.

Ich habe SoftwareSerial schon ausprobiert, damit funktioniert zwar die Kommunikation mit XBee. Dafür kann ich die PinInterrupts nicht mehr nutzen, die aber definitiv benötige. Also ist SoftwareSerial keine Option.

Sowohl UNO als auch Nano haben USB Serial Wandler drauf.

Der ATMega328P, und auch der SerielWandler sind an Pin 0 und 1 angeschlossen.

Wenn du da noch ein XBee dran klemmst, dann kann das Probleme bereiten.
Denn 3 Gesprächspartner an einer UART Verbindung kann nicht wirklich funktionieren.

Also ist SoftwareSerial keine Option.

Und AltSoftSerial ?

Du meinst das hier, oder..

Ich hatte dieses Bildchen mal wo gesehen, ja. Und nicht ernst genug genommen, die Widerstände/der Wandler den Pegel kaputtmachen.

Vielen dank, das erklärt, warums nicht hinhaut!