NodeMCU Sketch läuft nur an einem bestimmten PC

Hallo,

ich habe eine NodeMCU mit einem RXB6 433 MHz Empfänger verbunden, um 8 Temperaturfühler bei mir im Haus zu empfangen und per Wifi an einen Graphite/Grafana Server weiterzuleiten.
Alles funktioniert bestens, wenn ich alles via USB an meinen Windows-PC anschließe. Allerdings tut sich nichts, wenn ich alles an ein klassisches USB Handy-Ladegerät oder meinen Linux-PC anschließe.

Ich bin etwas überfragt woran dies liegt.

Hardware:

  • NodeMCU
  • RXB6 433MHz Empfänger
    ** Helical Spiral Antenne angelötet
    ** Data Pin mit D3 von NodeMCU verbunden
    ** +5V an Vin an NodeMCU verbunden
    ** GND mit GND an NodeMCU verbunden

Auf dem Linux System kann ich mit Hilfe des Seriellen Monitors, das Problem eingrenzen. Es scheint so, dass ein digitalRead(0) dort im Gegensatz zum Windows-System sich nicht ändert und dauerhaft TRUE zurück gibt. (siehe Markierung in der loop Methode unten.

Habt ihr eine Idee waran dies liegen könnte?

Der ursprüngliche Code kommt von hier:

Setup Methode

void setup() {
  Serial.begin(115200);//make it fast so it dumps quick!
  pinMode(RxPin, INPUT);
  pinMode(ledPin, OUTPUT);

  pinMode(LED, OUTPUT);

    // Benutze einen externen AP
    WiFi.mode(WIFI_STA);
    WiFi.begin(SSID, PASSWORD);
    while (WiFi.status() != WL_CONNECTED)
    {
      delay(500);
      Serial.print(".");
    }
}

loop Methode:

void loop(){
  tempBit=polarity; ####### Polarity ist inital 1
  [...]
  digitalWrite(LED, HIGH);
  while (noErrors && (nosBytes<maxBytes)){

    
    byte value = digitalRead(RxPin);  ###### RxPin ist 0
    while(value != tempBit){
      if(value)
      {
        Serial.println("TRUE"); ######  <----- hier landet der Linux-PC ausschließlich
      }
      else
      {
        Serial.println("FALSE"); 
      }
      yield();
      value= digitalRead(RxPin);
    }
...

Vielen Dank im Voraus für Tipps wie ich das Problem beheben könnte.

Wenn du schon weißt, wo der Fehler liegt, warum schreibst du nicht was daran angeschlossen ist.

Ich vermute einen Fehler in deiner Hardware.
Poste doch mal ein Schaltbild.

Hi,

an der NodeMCU sind nur ein Micro-USB Kabel und wie oben beschrieben 3 Kabel zum RXB6. Da die schaltung so simpel ist, habe ich sie nur unter "Hardware" oben beschrieben.

Bei einem Hardwarefehler würde das Ganze vermutlich an keinem Rechner funktionieren. An meinem PC läuft ja alles bestens. Den möchte ich aber nicht dauerhaft laufen lassen.

Madex:
...........
Alles funktioniert bestens, wenn ich alles via USB an meinen Windows-PC anschließe. Allerdings tut sich nichts, wenn ich alles an ein klassisches USB Handy-Ladegerät oder meinen Linux-PC anschließe.

Sollte dein PC nicht gerade das "Überdrübergerät" sein und USB Schnittstellen mit mehr als 1000mA haben würde ich das Thema Strom mal hinten anstellen.

Das Thema Spannung sollte bei Wald und Wiesen USB Teilen auch noch passen.
Beides ist aber nachzumessen. Der Sender benötigt schon mal mehr Strom kurzzeitig.

Eher tippe ich auch die Oberwellen der USB Ladegeräte, d.h. heftig versaute Spannungen die dir in den Sender pfuschen. Da hilft mal nur ein Oszi.

Alternativ verschiedene USB Ladegeräte testen oder Abstand Ladegerät zum Ardu vergrößern oder Spannung filtern (Filterbemessung ohne Messwerte ist schwer)

Helfen könnte auch schon der Vin Pin damit der Regler am Ardu eingreift. Allerdings nicht mehr als 9V sonst wird der zu warm.

LG
Viktor

Madex:
Hi,

an der NodeMCU sind nur ein Micro-USB Kabel und wie oben beschrieben 3 Kabel zum RXB6. Da die schaltung so simpel ist, habe ich sie nur unter "Hardware" oben beschrieben.

Bei einem Hardwarefehler würde das Ganze vermutlich an keinem Rechner funktionieren. An meinem PC läuft ja alles bestens. Den möchte ich aber nicht dauerhaft laufen lassen.

Das ist schon mal dein größter Irrtum.

Mit einem Schaltbild fällst du selbst über deine Fehler.
So wie ich das oben lese, hast du den 5Volt Anschluss des Empfängers am Vin des NodeMCU angeschlossen.
Das kann normal nicht funktionieren, da Vin ein Spannungseingang ist.

Nach wie vor tippe ich auf ein Hardware-Problem, da die Software ja an einem PC funktioniert. Warum sollte die am anderen PC nicht funktionieren ?
Also zeichne ein Schaltbild und du siehst klarer.

An der Stromaufnahme liegt es nicht da es sich um einen Empfänger handelt und nicht um einen Sender.

Hab mich noch nicht mit dem NodeMCU beschäftigt aber ich vermute mal das "digitalRead(0)" auf Pin 0 zugreift der aber schon für die USB Kommunikation zuständig ist. Du musst einen anderen FREIEN Pin dafür auswählen.

Gruß

@Viktor93
Wo siehst du einen Sender ?
Das was der TO angeschlossen hat ist ein Empfänger.
Der kann natürlich, abhängig vom Standort, durch Störungen beeinflusst werden.
Und auch das sollte der TO prüfen.
Nur ohne genauere Informationen ist das hier wieder ein stochern im Nebl.

Scherheinz:
An der Stromaufnahme liegt es nicht da es sich um einen Empfänger handelt und nicht um einen Sender.

Hab mich noch nicht mit dem NodeMCU beschäftigt aber ich vermute mal das "digitalRead(0)" auf Pin 0 zugreift der aber schon für die USB Kommunikation zuständig ist. Du musst einen anderen FREIEN Pin dafür auswählen.

Gruß

Das mit D0 und D1 ist beim Uno/Nano so, nicht beim NodeMCU.

Was aber ganz wichtig ist, wurde auch schon geschrieben, der TO sollte mal die Spannungen messen.

Achso ok, danke für die Info! :slight_smile:

Und was mir auch auffällt, der TO schreibt mal D0 und mal D3.
Wo ist jetzt der Empfänger angeschlossen.
Alles Mist, ohne Schaltbild.

und ohne Deklarationsteil vom Code....

Scherheinz:
und ohne Deklarationsteil vom Code....

Ja, möglichst nicht so viel preisgeben und alles geheim halten.

Ich würde mal einen einfachen Sketch testen, z.B. Blink mit externen Leds dran.

@TO: ohne eine ganzen compilierbaren Code ist das rumgerate.
Mach mal wie von EsEspanol vorgeschlagen einen Bink-Sketch und probier den auf deinen PC's
Wenn das überall klappt, mach einen Schaltplan.
Schrittweise vorgehen.

Übrigens weils in der Raterei der Helfenden schon mal vorkam D0 != 0 am NodeMCU:

static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3;
static const uint8_t D10 = 1;

Hallo,

hier ist ja ganz schön was los...

Die NodeMCU funktioniert an allen USB Ports super. LED Blinken, WebServer etc. Nur das Empfangen vom RXB6 läuft halt nur in einem Fall.

Die Verkabelung ist trivial: NodeMCU D3 (in Arduino Studio = 0) ist an Data vom RXB6 angeschlossen. Der Rest ist nur Stromversorgung. Daher habe ich kein Schaubild erstellt.

HotSystems:
Das kann normal nicht funktionieren, da Vin ein Spannungseingang ist.

Vin ist an der NodeMCU die Spannung die direkt vom USB Port kommt und die NodeMCU versorgt. Daher ist Vin korrekt. Ansonsten würde es am dem einen Rechner ja auch nicht funktionieren.
Dies ist notwendig, weil die NodeMCU nur 3v liefert, dier RXB6 aber 5 V benötigt und dies direkt am USB Port anliegt

HotSystems:
Ja, möglichst nicht so viel preisgeben und alles geheim halten.

Ich möchte nichts "geheim halten". Ich wollte die relevanten Teile der über 600 Zeilen posten. Ich kann aber auch gerne den kompletten Code posten.

kompletter "work in progress" Code (relevanter Teil bei "hier bleiben die nicht funktionierenden Systeme in einer Enlosschleife" (Zeile 207)):

Hänge den Sketch bitte direkt ins Forum.
In Code-Tags und wenn das nicht geht als Anhang x.ino.

hier auch noch als Anhang... Mit Codeblöcken wird das 9000 Zeichen Limit überschritten

sketch.txt (21.5 KB)

Ok, so kann man den problemlos lesen.

Hast du denn mal die Spannungen gemessen und verglichen ?
Der RXB6 läuft auch mit 3 Volt, lt. Datenblatt.

Hallo,

ich habe jetzt einfach einen anderen Pin (D5) für die Übermittlung der Daten gewählt. Nun funktioniert alles überall.