Wemos D1 Mini Experten gesuch

Einen wunderschönen guten Tag zusammen!

Ich habe aktuell ein Problem mit meinem Wemos D1 mini und hoffe, ihr könnt mir vielleicht helfen!

Ganz kurz zum Projekt:
Die Schaltung soll die Daten von einem BME280 (Temperatur, Luftfeuchte, Druck) auslesen und über ein NRF24L01 an eine andere Station schicken.

Stand:
Die Schaltung funktioniert, die Gegenstation empfängt die Daten und kann sie weiter verarbeiten, ABER...

...das Problem:
Der Wemos D1 Mini bootet innerhalb der Schaltung nicht anständig. Wenn ich ihn erst, z.B. über USB Kabel, starte, in die Schaltung stecke und dann neu starte tut er was er soll. Wenn ich ihn INNERHALB der Schaltung mit Spannung versorge bootet er nicht anständig. Im Serial Monitor gibt er dann auch nur sinnfreie Zeichen aus, er initialisiert scheinbar nicht mal die serielle Schnittstelle anständig.

Gibt es hier besondere Befindlichkeiten des Wemos? Dürfen manche Pins nicht belegt sein beim Start?

Ich hänge euch die Schaltung und das Platinen-Layout an. Unten kommt auch noch der Code. Wenn ihr noch mehr Details braucht, bitte Fragen.

Vielen Dank schon mal für eure Hilfe!!

Das ist mein Board:
Wemos D1 Mini von AZ Delivery

Das ist der Code:

#include <Wire.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

// Initialisierung fuer Funk
#define CE D3
#define CS D4
RF24 radio (CE, CS);
const byte address1[6] = "00001";

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C

struct sensor_data {
  char str_temp[8];
  char str_press[8];
  char str_hum[8];
};

void setup() {
    Serial.begin(19200);
    delay(10);
    Serial.println('\n');    
    
    Serial.println("BME280 test");
    
    bool status;
    
    // Status des Sensors pruefen
    status = bme.begin(0x76);  

    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring!");
        while (1);
    }

    radio.begin();
    radio.openWritingPipe(address1);
    radio.setPALevel(RF24_PA_MAX);
    radio.stopListening();

    sensor_data sensor;
    
    Serial.println("Beschreibe Struct");
  
    dtostrf(bme.readTemperature(), 1, 2, sensor.str_temp);
    Serial.println(sensor.str_temp);
      
    dtostrf((bme.readPressure() / 100.0F), 1, 2, sensor.str_press);
    Serial.println(sensor.str_press);
   
    dtostrf(bme.readHumidity(), 1, 2, sensor.str_hum);
    Serial.println(sensor.str_hum);    

    Serial.println("Sende Struct");

    radio.write(&sensor, sizeof(sensor));

    Serial.println("Struct gesendet");

    ESP.deepSleep(1200e6);
}

void loop() {   

}

Schau mal hier nach.

Gruß Tommy

Hier noch eine Tabelle mit den Nutzungsbeschreibungen der einzelnen Pins

Aktuell stellt sich mir die Frage, warum überhaupt noch einen NRF24L01 ?
Du kannst du alles prima per WLan übertragen, da braucht es den NRF24L01 nicht zu.

@Tommy56 und HotSystems:
vielen Dank, das sind sehr hilfreiche Links! Ich nutze den D8 als optionalen Eingang für den Interrupt vom NRF. Leider hab ich den Pullup dafür auf die Wemos Seite vom Jumper gepackt... Ich werde das gleich testen, ob es daran lag und anschließend ein kurzes Feedback hier rein schreiben!

Bezüglich dem NRF24:
Das stimmt, mit WLAN und Webserver könnte man es auch machen, das wäre auch mein nächster Ansatz gewesen, wenn ich mit dem hier gar nicht zurecht gekommen wäre. Der NRF bleibt allerdings auf Empfang auch wenn der Wemos im Deepsleep ist, d.h. ich verbrauche zwar ein wenig Strom aber kann den Wemos mit einem Funksignal aufwecken. So wars zumindest mal für eine künftige Anwendung von mir gedacht (dafür auch der Interrupt-Jumper der mir jetzt wahrscheinlich Probleme macht...)

Ansonsten wollte ich den NRF24 einfach mal testen, ganz profan quasi :slight_smile:

MucFB:
Ansonsten wollte ich den NRF24 einfach mal testen, ganz profan quasi :slight_smile:

Ok, alles klar. Dann bin ich gespannt, was beim Test rauskommt.

MucFB:
Im Serial Monitor gibt er dann auch nur sinnfreie Zeichen aus, er initialisiert scheinbar nicht mal die serielle Schnittstelle anständig.

Serial.begin(74880);

Gruß Fips

Hab jetzt D8 auf Masse gelegt (im Schaltplan: NRF_IRQ2) und jetzt funktioniert die Schaltung einwandfrei.
Wieder was gelernt, nächstes mal mach ich den Pullup einfach auf die andere Seite des Jumpers und gut ist!

Danke für die guten Links, werden gleich gespeichert für die nächsten Projekte...

@Derfips: Könntest du mir bitte kurz erklären, was die höhere Bitrate ändern würde? Fahr immer mit relativ niedrigen Raten, hab da noch keinen Nachteil gehabt bisher.

MucFB:
@Derfips: Könntest du mir bitte kurz erklären, was die höhere Bitrate ändern würde? Fahr immer mit relativ niedrigen Raten, hab da noch keinen Nachteil gehabt bisher.

Beim Start gibt der Chip ein paar Diagnose-Meldungen mit 74880 Baud aus, noch bevor die Firmware gestartet wird. Im Fehlerfall lohnt es sich, diese Meldungen mit einem Terminal-Programm anzuzeigen.

Gruß Fips

MucFB:
Hab jetzt D8 auf Masse gelegt (im Schaltplan: NRF_IRQ2) und jetzt funktioniert die Schaltung einwandfrei.
Wieder was gelernt, nächstes mal mach ich den Pullup einfach auf die andere Seite des Jumpers und gut ist!

Danke für die guten Links, werden gleich gespeichert für die nächsten Projekte...

@Derfips: Könntest du mir bitte kurz erklären, was die höhere Bitrate ändern würde? Fahr immer mit relativ niedrigen Raten, hab da noch keinen Nachteil gehabt bisher.

Prima und danke für die Rückmeldung.

Derfips:
Beim Start gibt der Chip ein paar Diagnose-Meldungen mit 74880 Baud aus, noch bevor die Firmware gestartet wird. Im Fehlerfall lohnt es sich, diese Meldungen mit einem Terminal-Programm anzuzeigen.

Ah ok, das ist auch interessant, muss ich mal testen, Danke!

Ansonsten kann man den Thread zumachen, alle Klarheiten sind beseitigt :slight_smile:

MucFB:
Ah ok, das ist auch interessant, muss ich mal testen, Danke!

Ansonsten kann man den Thread zumachen, alle Klarheiten sind beseitigt :slight_smile:

Schreibe in den Titel deines Eingangspost "[Erledigt]" o.ä.