-         
Ergebnis 1 bis 4 von 4

Thema: NodeMCU 1.0 e-ink und si7021

  1. #1

    NodeMCU 1.0 e-ink und si7021

    Anzeige

    Hallo,

    ich bin gerade an einem Projekt in dem ich ein e-ink display ansteuern will und zusätzlich einen Temperatur Sensor auslesen will.
    Mein Problem ist das wenn ich die Library für das waveshare 1.54 " e-ink display nutze und zugleich das display mit spi initialisiere bekomme ich willkürliche werte von dem Sensor. Egal ob der Sensor angesteckt ist oder nicht

    verkabelt ist es wie folgt

    waveshare:
    Busy -> D6 (12)
    RST -> D4
    DC -> D3
    CS -> D8
    CLK -> D5
    DIN -> D7
    GND -> GND
    VCC -> None (because i get a mem_error when it is connected to 3.3v)

    SI7021:
    SCL -> D2 (4)
    SDA -> D2 (5)
    GND -> GND
    3.3v -> 3.3v

    this is my program so far with the edp2 library


    Code:
    #include <Wire.h>
     
    // SI7021 I2C address is 0x40(64)
    #define si7021Addr 0x40
    
    // base class GxEPD2_GFX can be used to pass references or pointers to the display instance as parameter, uses ~1.2k more code
    // enable or disable GxEPD2_GFX base class
    #define ENABLE_GxEPD2_GFX 0
    
    #include <GxEPD2_BW.h>
    #include <GxEPD2_3C.h>
    #include <Fonts/FreeMonoBold9pt7b.h>
    
    #if defined (ESP8266)
    // 3-color e-papers
    GxEPD2_3C<GxEPD2_154c, GxEPD2_154c::HEIGHT> display(GxEPD2_154c(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 12));
    #endif
    
    #if defined(_BOARD_GENERIC_STM32F103C_H_)
      #define MAX_DISPAY_BUFFER_SIZE 15000ul // ~15k is a good compromise
      #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8))
      #define MAX_HEIGHT_3C(EPD) (EPD::HEIGHT <= (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8))
    #endif
    
    #if defined(__AVR)
    #define MAX_DISPAY_BUFFER_SIZE 800 // 
    #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8))
    #define MAX_HEIGHT_3C(EPD) (EPD::HEIGHT <= (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8))
    #endif
     
    void setup()
    {
      Serial.begin(115200);
      Serial.println("Setup");
      Wire.begin();
      Wire.beginTransmission(si7021Addr);
      Wire.endTransmission();
      display.init(115200);
      delay(300);
    }
     
    void loop()
    {
      unsigned int data[2];
     
      Wire.beginTransmission(si7021Addr);
      //Send humidity measurement command
      Wire.write(0xF5);
      Wire.endTransmission();
      delay(500);
     
      // Request 2 bytes of data
      Wire.requestFrom(si7021Addr, 2);
      // Read 2 bytes of data to get humidity
      if(Wire.available() == 2)
      {
        data[0] = Wire.read();
        data[1] = Wire.read();
      }
     
      // Convert the data
      float humidity  = ((data[0] * 256.0) + data[1]);
      humidity = (((125 * humidity) / 65536.0) - 6)/1000;
     
      Wire.beginTransmission(si7021Addr);
      // Send temperature measurement command
      Wire.write(0xF3);
      Wire.endTransmission();
      delay(500);
     
      // Request 2 bytes of data
      Wire.requestFrom(si7021Addr, 2);
     
      // Read 2 bytes of data for temperature
      if(Wire.available() == 2)
      {
        data[0] = Wire.read();
        data[1] = Wire.read();
      }
     
      // Convert the data
      float temp  = ((data[0] * 256.0) + data[1]);
      float celsTemp = ((175.72 * temp) / 65536.0) - 46.85;
      float fahrTemp = celsTemp * 1.8 + 32;
     
      // Output data to serial monitor
      Serial.print("Humidity : ");
      Serial.print(humidity);
      Serial.println(" % RH");
      Serial.print("Celsius : ");
      Serial.print(celsTemp);
      Serial.println(" C");
      Serial.print("Fahrenheit : ");
      Serial.print(fahrTemp);
      Serial.println(" F");
      delay(1000);
    }
    
    
    void helloWorld(int i)
    {
      Serial.println("helloWorld");
      display.setRotation(1);
      display.setFont(&FreeMonoBold9pt7b);
      display.setTextColor(GxEPD_RED);
      uint16_t x = (display.width() - 160) / 2;
      uint16_t y = display.height() / 2;
      display.setFullWindow();
      display.firstPage();
      do
      {
    
        display.fillScreen(GxEPD_WHITE);
        display.setCursor(20,115);
        display.println(String(i));
        display.setCursor(x, y);
        display.println(String(x) + " " +String(y) );
    
      }
      while (display.nextPage());
      //Serial.println("helloWorld done");
    }
    egal ob ich bei diesem code die pins sda und sdc verbunden habe gibt er mir immer die selben werte in der console aus.

    Was mach ich genau falsch. Bin relativ neu in der elektrotechnik. Brauche ich dort evtl einen Pull up resistor oder so

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    50
    Beiträge
    1.377
    Kontrollier mal das Pin-Mapping für _deinen_ NodeMCU.
    Ich hab hier welche (LOLIN), bei denen es etwas anders ist als bei vielen anderen, scheinbar.
    Weiterhin kannst du die I2C-Adresse mal überprüfen- manche Module können mehr als eine Adresse haben.
    Ob du Pullups brauchst, kann man nur raten: schau nach ob die auf dem Modul drauf sind-das ist bei vielen Modulen so, aber nicht bei allen.
    Manche bauen die immer ein, vorsichtshalber- ich habs bisher fast nie getan.

    Ausserdem sehe ich nicht, wo du eigentlich die Pins definierst, welche die Wire-Bibliothek benutzen soll...
    Ich mache das bei mir so:
    Wire.begin(D2, D1); // I2C Bus SDA=D2, SCL=D1 -> das funktioniert auch, mein NodeMcu spricht mit nem Arduino.

    Ohne PullUps, übrigens...da aber mein Arduino ein ProMini in der 5V-Ausführung ist, hab ich Levelshifter dazwischen.
    Läuft dein Sensor denn überhaupt mit 3V?
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.227
    Arduino verwendet standardmässig bei Nodemcu immer für Wire die Pins D1 und D2, wenn man nichts anderes definiert.
    Pullups sind keine fest eingebaut, es funktioniert oft auch ganz ohne, besser aber man nimmt welche zwischen 2k und 5k wie es empfohlen wird.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    853
    Blog-Einträge
    7
    Hallo,

    ich will mich mal dazu gesellen. Schade ist immer, dass man erst suchen muss, wenn man sich dafür interessiert. Ich will nicht meckern, aber:

    NodeMCU 1.0 e-ink und si7021
    Was ist ein si70231? - Kann man doch hinschreiben: .... meinGerät (si7021).
    Als Einführung kurz die Teile aufzuführen, die man verwendet - auch mit Typbezeichnung - wäre gut, damit andere sich besser in den Text reinfinden.
    Mühevoll ist es, wenn man so wie ich, die Teile nicht kennt und zwei-/dreimal über den Text lesen muss, um zu wissen, was was ist und was gemeint ist.

    Dann komme ich zu dem:

    SI7021:
    SCL -> D2 (4)
    SDA -> D2 (5)
    GND -> GND
    3.3v -> 3.3v
    Das scheint falsch zu sein. Kann so nicht funktionieren. Ich gehe mal davon aus, dass der Problembeschreiber den Text selbst nochmal gelesen hat und Fehler nicht enthalten sind. Von daher muss man nicht lange suchen, es wurden SCL und SDA auf denselben Anschluss gelegt und dann auch noch die Pin-Nummern vertauscht (in Klammern scheinen die Pin-Nummern zu stehen).

    Wenn man sich Mühe gibt und sorgfältig eine Problembeschreibung erstellt, findet man eigene Fehler oft schon selbst, weil man es für den Text nochmal genau reflektiert, was man gemacht hat. Andere haben auch weniger Mühe damit und können schneller helfen - mehr Antworten in kürzerer Zeit.

    MfG

Ähnliche Themen

  1. Ultraschallsensor am nodeMCU
    Von Moppi im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 41
    Letzter Beitrag: 15.10.2018, 17:31
  2. nodeMCU an Arduino
    Von Moppi im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 16
    Letzter Beitrag: 14.10.2018, 09:30
  3. NodeMCU als WLAN Lautsprecher
    Von littlekenny im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 5
    Letzter Beitrag: 30.03.2018, 20:09
  4. Anfängerproblem: Pin-Layout NodeMCU
    Von TFlow im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 2
    Letzter Beitrag: 30.11.2017, 10:47
  5. nodeMCU zu nodeMCU: keine Kommunikations-Verbindung mehr nach wenigen Minuten
    Von HaWe im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 0
    Letzter Beitrag: 02.10.2017, 14:01

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •