ESP8266 DHT22 Projekt

OP #5198439
Lesenswert?

Hallo,

ich bin gerade dabei meinen nodeMCU v3 ESP8266 ESP-12 E zu 
programmieren. Eine LED bekomme ich schon zum Blinken, nun möchte ich 
folgendes Projekt bei mir zum Laufen bringen: 
http://blog.thomasheldt.de/esp8266-am2302-dht22-sensor-fuer-akkubetrieb-ein-projekt-zum-mitmachen-3/

Also habe ich das Programm in Arduino 1.8.5 genöffnet und meine 
Variablen aus dem EEPROM entsprechend angepasst:

Wenn ich mir nun die serielle Ausgabe anschaue, erhalte ich alle meine 
angepassten Variablen mit ⸮ z.B.
SENSORSSID=⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮

So wird es im Code ausgegeben:
1
  for (int i = 117; i < 149; ++i)
2
  {
3
    SENSORSSID += char(EEPROM.read(i));
4
  }
5
  
6
  Serial.print(F("SENSORSSID="));
7
  Serial.println(SENSORSSID.c_str());
Auch meine IP hat er nicht entsprechend meiner Vorgaben angepasst. Woran 
kann das liegen??

Mir ist aufgefallen, dass ich nur eine Systemspannung von 3.028Volt 
habe. Eigentlich würde der Code bei einer Spannung < 3.1Volt gar nicht 
laufen.
Auch wenn ich extern 5V an Vin anschließe, erhöht sich die 
Systemspannung nicht.
OP #5198537
Lesenswert?

Ja, nur warum werden meine Werte nicht ins EEPROM geschrieben?
Im Code steht unter den Variablen:
String SENSORSSID="ESP8266-DHT22-SENSOR";

Auch die anderen Variablen haben ihren Wert.

Kann das an der Spannung liegen und warum ist die so niedrig?
Das Board wird über USB versorgt ist aber auch so bei externer 
Versorgung über VIN.
Gast #5198550
Lesenswert?

H. C. schrieb:
> Im Code steht unter den Variablen:
> String SENSORSSID="ESP8266-DHT22-SENSOR";
Meine Vermutung: Dieser String ist eine Variable im RAM.

> Ja, nur warum werden meine Werte nicht ins EEPROM geschrieben?
Das wird vielleicht in einem früheren Teil des Tutoriums beschrieben.
Es gibt in diesem Teil ja die Funktion "void ReadEEPROMConfig();".
Vielleicht gibt es auch eine "WriteEEPROMConfig()";
Die braucht ja nur einmalig aufgerufen zu werden.
Danach sind die Werte im EEPROM, bis man sie wieder überschreibt.
Gast #5198583
Lesenswert?

Danke für den Hinweis. Ich habe nun im Teil-2 des Tutorials etliche 
kleine Testprogramme gefunden. Den Sensor liest er korrekt aus, aber bei 
diesem Code sollte der ESP8266 eigentlich in den Tiefschlaf gehen und 
alle 2 Sekunden die Messung wiederholen.
Bei mir wird es nur ein einziges Mal gemacht:
1
#include <DHT.h>
2
 
3
#define DHTPIN 4            
4
#define DHTTYPE DHT22       
5
 
6
DHT dht(DHTPIN, DHTTYPE);
7
 
8
void setup() {
9
  pinMode(5,OUTPUT);
10
  pinMode(14,OUTPUT);
11
 
12
  digitalWrite(14,1);
13
  digitalWrite(5,1);
14
  
15
  Serial.begin(115200);
16
 
17
  Serial.println(F("")); 
18
  Serial.println(F("")); 
19
  Serial.println(F("ESP8266-DHT22-AKKU-SENSOR Test mit Deep-Sleep..."));
20
  Serial.println(F(""));
21
  Serial.print(F("SDK-Version: "));
22
  Serial.println(ESP.getSdkVersion());
23
  Serial.print(F("ESP8266 Chip-ID: "));
24
  Serial.println(ESP.getChipId());
25
  Serial.print(F("ESP8266 Speed in MHz: ")); 
26
  Serial.println(ESP.getCpuFreqMHz());
27
  Serial.print(F("Free Heap Size in Bytes: "));
28
  Serial.println(ESP.getFreeHeap());
29
  Serial.println(F(""));
30
 
31
  delay(1000);
32
  
33
  dht.begin();
34
 
35
  float hum = dht.readHumidity();
36
  float temp = dht.readTemperature();
37
 
38
  if (isnan(hum) || isnan(temp)) {
39
    Serial.println(F("Sensorfehler!"));
40
  } else {
41
    Serial.print(F("Luftfeuchte: "));
42
    Serial.print(hum);
43
    Serial.println(F(" %"));
44
    Serial.print(F("Temperatur: "));
45
    Serial.print(temp);
46
    Serial.println(F(" *C"));
47
  } 
48
  
49
  ESP.deepSleep(2000000, WAKE_RF_DISABLED);
50
  delay(100);
51
}
52
 
53
void loop() {
54
}

So sieht meine Ausgabe aus:
1
{$l⸮⸮|⸮d⸮|  ....noch viel mehr so komische Sonderzeichen, die sich aber nicht kopieren lassen ...
2
ESP8266-DHT22-AKKU-SENSOR Test mit Deep-Sleep...
3

4
SDK-Version: 1.5.3(aec24ac9)
5
ESP8266 Chip-ID: 991916
6
ESP8266 Speed in MHz: 80
7
Free Heap Size in Bytes: 46792
8

9
Luftfeuchte: 69.60 %
10
Temperatur: 17.70 *C
11
{ll⸮⸮|⸮d⸮|⸮d⸮c<⸮⸮⸮⸮{⸮c$⸮b⸮⸮og⸮l'o⸮⸮⸮#p⸮⸮${ls$⸮s⸮⸮n⸮c⸮ocp
Gast #5198597
Lesenswert?

sunshineh schrieb:
> aber bei
> diesem Code sollte der ESP8266 eigentlich in den Tiefschlaf gehen und
> alle 2 Sekunden die Messung wiederholen.
> Bei mir wird es nur ein einziges Mal gemacht:

Dazu müsste
1
  delay(1000);
2
  
3
  dht.begin();
4
 
5
  float hum = dht.readHumidity();
6
  float temp = dht.readTemperature();
7
 
8
  if (isnan(hum) || isnan(temp)) {
9
    Serial.println(F("Sensorfehler!"));
10
  } else {
11
    Serial.print(F("Luftfeuchte: "));
12
    Serial.print(hum);
13
    Serial.println(F(" %"));
14
    Serial.print(F("Temperatur: "));
15
    Serial.print(temp);
16
    Serial.println(F(" *C"));
17
  } 
18
  
19
  ESP.deepSleep(2000000, WAKE_RF_DISABLED);
20
  delay(100);

in der loop(){} sein, und nicht nur in setup(){}.
Einfach nur Sachen aus dem Internet zusammen zu kopiern bringt nichts. 
Man sollte sie auch verstehen.
Gast #5198600
Lesenswert?

Das gleich hab ich mir auch gedacht. Dort stand aber geschrieben, dass 
beim Aufwachen jedesmal die Setup durchlaufen wird.
Außerdem habe ich es getestet und den Code mal in die Loop kopiert, das 
Verhalten blieb komplett gleich.
#5199386
Lesenswert?

Hi,
der Code paßt schon so. Natürlich kann man das im setup() haben, wenn es 
sowieso nur einmal durchlaufen werden soll.
Auf NodeMcu Boards ist zwar ein Widerstand gpio16-rst vorgesehen aber 
i.d.R. nicht bestückt.
Eine Brücke ist das Übelste was man da bestücken kann, ein Widerstand 
(ca 560 Ohm) geht gerade so, eine Schottkydiode ist wohl die beste Wahl 
(mit Katode nach gpio16).
Hintergrund: gpio16 ist während deepdleep ziemlich "hard" high, somit 
auch rst und der kann dann von der Flashelektronik kaum erfolgreich auf 
gnd gepulst werden -> Flashversuche schlagen großteils fehl.
#5199408
Lesenswert?

Stefan U. schrieb:
> 
https://raw.githubusercontent.com/nodemcu/nodemcu-devkit/master/Documents/NODEMCU_DEVKIT_SCH.png
>
> Laut diesem Schaltplan ist da schon ein Widerstand, nämlich R7.

Bzw. bei Boards die auf dem aktuellen v1.0-Schaltplan
https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF
basieren, heisst dieser 470 Ohm-Widerstand R11 (und hat die Seite 
gewechselt); der unbestückte Widerstand heisst R10 (siehe Anhang).
Angehängte Dateien:
Gast #5199493
Lesenswert?

> dass der V0.9 Schaltplan in dem Bereich Unfug ist steht wohl ausser
> Debatte, oder?

Man beachte, dass der Taster dort als KEY_USER beschriftet ist, nicht 
als RESET Taster. Bei der Schaltung 0.9 ohne Brücke kann man ihn 
tatsächlich als User-Taster verwenden.

Erwarten würde das aber wohl kaum jemand, oder?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren