Go Down

Topic: Wemos D1 mini pro, DHT22 und esp.deepSleep (Read 190 times) previous topic - next topic

Ecstasy

Oct 17, 2018, 10:29 pm Last Edit: Oct 18, 2018, 06:03 am by Ecstasy
Guten Abend liebe Arduino-Gemeinde.

Ich heiße Sascha, bin 30 Jahre alt und bin ein relativer Frischling was das Programmieren mit Arduino angeht.

Aktuell arbeite ich an einem kleinen Projekt das mir die Temperatur und Luftfeuchtigkeit in einer externen Datenbank speichert.

Soweit funktioniert das meiste....ja richtig, das meiste.

Ich würde den Sensor später gerne mit Akkus betreiben. Da der Mini recht viel Strom verbraucht möchte ich ihn in den DeepSleep Modus versetzen.

Nachdem der Mini aus seinem kleinen Schlaf wieder erweckt wird, werden keine Daten mehr ausgelesen.

Mein Programm:

Code: [Select]
#include <ESP8266WiFi.h>
#include <DHT.h>

const char* ssid = "****"; //SSID aus dem Router
const char* password = "*****"; //Passwort für den Zugang zum WLAN
String Raum = "Wohnzimmer";

WiFiServer server(80); //Port auf welchem der Server laufen soll.

#define DHTPIN D4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  Serial.begin(115200);
  Serial.setTimeout(2000);

  dht.begin();

  Serial.print("Aufbau der Verbindung zu: "); //Ausgabe der SSID auf der Seriellen Schnittstelle.
  Serial.println(ssid);

  WiFi.begin(ssid, password); //Initialisieren der Wifi Verbindung.

  while (WiFi.status() != WL_CONNECTED) { //Warten bis die Verbindung aufgebaut wurde.
    delay(500);
    //Einen Punkt auf der Seriellen Schnittstelle ausgeben so das der Benutzer erkennt dass, das Sketch noch läuft.
    Serial.print(".");
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("");
    Serial.println("Mit WiFi verbunden");
    Serial.println("IP Adresse: ");
    Serial.println(WiFi.localIP());
  }
  else {
    Serial.println("");
    Serial.println("Nicht mit WiFi verbunden");
    ESP.deepSleep(100000);
    Serial.println("Ich gehe schlafen");
  }

  server.begin(); // Starten des Servers.
  Serial.println("Server gestartet"); //Ausgabe auf der Seriellen Schnittstelle das der Server gestartet wurde.

 
}

void loop()
{
  delay(1000);

  float LFValue = dht.readHumidity();
  float tempValue = dht.readTemperature();

  if (isnan(LFValue) || isnan(tempValue)) {
    Serial.println("Der Sensor gibt keine Daten zurück!");
    return;
  }
  else
  {
    Serial.print("Luftfeuchte: ");
    Serial.print(LFValue);
    Serial.print(" %\t");
    Serial.print("Temperatur: ");
    Serial.print(tempValue);
    Serial.println(" C");
  }
  storeData(tempValue, LFValue, Raum);
}

void storeData(float tempValue, float LFValue, String Raum) {

  const char* host = "****";
  const int httpPort = 80;

  // Use WiFiClient class to create TCP connections
  WiFiClient client;

  if (client.connect(host, httpPort)) {
 
  String url = "/temperatur.php?";
  url = url + "temp=" + tempValue;
  url = url + "&press=" + LFValue;
  url = url + "&raum=" + Raum;

  Serial.print("Requesting URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");

  client.println();  //Verbindungs mit Server aufbauen und HTTP Anfrage senden
  }
  client.stop();
  delay(1000);
 
  ESP.deepSleep(120e6);
}


Nach dem Upload des Sketches zeigt die IDE im seriellen Monitor an das Werte ausgelesen und gespeichert wurden. Anschließend fährt der Mini in den Schlafmodus.

Nach dem erwecken kommt nur noch folgendes:
Code: [Select]

Der Sensor gibt keine Daten zurück!


Das ganze Setup befindet sich auf einer "Tripler Base". Ganz links der DHT22 dann ein Battery Shield und auf der rechten Seite der Wemos D1 mini pro.

Sollten noch Informationen fehlen einfach Bescheid geben.

Ich danke euch schon mal und wünsche euch einen schönen Abend!

Grüße
Sascha

Tommy56

Korrigiere bitte [*quote] [*/quote] nach [*code] [*/code] ohne die *.
as kannst Du auch nachträglich über die Edit-Funktion noch tun.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)


Derfips

Meine Esp8266 & ESP32 Projekte => https://fipsok.de

Ecstasy

Das ist richtig doof. Kann ich die onBoard LED per Script ausschalten?
Oder muss ich die Hardwareseitig entfernen?

Habe ich noch alternative Möglichkeiten?

Vielen Dank für deine Hilfe!

Derfips

#5
Oct 18, 2018, 08:12 am Last Edit: Oct 18, 2018, 08:17 am by Derfips
Habe ich noch alternative Möglichkeiten?


Dht => D3?
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

noiasca

#6
Oct 18, 2018, 09:16 am Last Edit: Oct 18, 2018, 09:18 am by noiasca
Kann ich die onBoard LED per Script ausschalten?
das liegt weniger an der LED als dass dieser GPIO bei Wakeup High sein muss. Da ich letzte Woche ähnliche (selbstgemachte) Probleme mit den Pins (und ungewollte Doppelbelegungen) hatte, habe ich in meinen Skteche folgenden "Merker" drinnen:


Code: [Select]

// Pin Definition                    // comments on Pin Usage:
//#define LED_RED_PIN     16         // D0/GPIO16 the red LED on the NodeMCU 1.0 - wakeup from deepsleep
                                     // D1/GPIO05                  i.e. I2C SCL
                                     // D2/GPIO04 - wakeup high! - i.e. I2C SDA
                                     // D3/GPIO0 - Flash Button
//#define LED_BLUE_PIN    D4         // D4/GPIO2 the blue LED on the ESP-12e - is also Serial1 - could be used for Debug/Serial1.print
                                     // D5/GPIO14 - HSCLK -             
                                     // D6/GPIO12 - HMISO -             
                                     // D7/GPIO13 - HMOSI -
                                     // D8/GPIO15 - HCS - wakeup low - darf daher nicht mit SS vom PN532 belegt werden! WS2811 geht am ESP: D1 D2 D4 D8 10. Bei D4 leuchtet die blaue LED am ESP permanent // geht nicht am ESP: D0
//serial                             // D9/GPIO03 - RX
//serial                             // D10/GPIO01 - TX
                                     // GPIO09 - macht nur Probleme
                                     // GPIO10 - für out ok


ist zwar für den NodeMCU, aber vieleicht als Anregung mal die GPIOs am WEMOS durchzuprobieren
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Ecstasy

Ich habe das ganze jetzt auf D3 gelegt und es funktioniert einwandfrei.

Nur doof das ich ein fertiges DHT22 Shield zum Aufstecken habe -.- .

Vielen Dank für eure Tipps!

Grüße
Sascha

Go Up