Skocz do zawartości

Nodemcu v3 + czujnik temp/wilg AM2302


Pomocna odpowiedź

Napisano

Siemaneczko Podstawowy kod do Am2302 nie smiga na nodemcu v3 juz dostaje bialej gorączki, na arduino uno wszystko smiga nawet bez rezystora ... A nodemcu v3 ma focha i to juz 2 z koleii ...

GND-> GND , 3,3v-3,3v (sprawdzane na osobnym zasilaniu 5v i wspolnej masie) , 2-> D2

#include <cactus_io_AM2302.h>
 
 #define AM2302_PIN 2// what pin on the arduino is the AM2302 data line connected to
  // For details on how to hookup the AM2302 sensor to the Arduino then checkout this page
// http://cactus.io/hookups/sensors/temperature-humidity/am2302/hookup-arduino-to-am2302-temp-humidity-sensor
  // Initialize AM2302 sensor for normal 16mhz Arduino.
  AM2302 dht(AM2302_PIN);
 // Note: If you are using a board with a faster processor than 16MHz then you need
  // to declare an instance of the AM2302 using
  // AM2302 dht(AM2302_DATA_PIN, 30);
 // The additional parameter, in this case here is 30 is used to increase the number of
  // cycles transitioning between bits on the data and clock lines. For the
  // Arduino boards that run at 84MHz the value of 30 should be about right.
  
  void setup(){
 Serial.begin(9600);
  Serial.println("AM2302 Humidity - Temperature Sensor");
Serial.println("RH\tTemp (C)\tTemp (F)\tHeat Index (C)\tHeat Index (F)");
 
  dht.begin();
  }
  
  void loop(){
// Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  dht.readHumidity();
  dht.readTemperature();
  delay(2000);
  // Check if any reads failed and exit early (to try again).
  if (isnan(dht.humidity) || isnan(dht.temperature_C)) {
 Serial.println("AM2302 sensor read failure!");
 return;
 }
 
 Serial.print(dht.humidity); Serial.print(" %\t\t");
 Serial.print(dht.temperature_C); Serial.print(" *C\t");
 Serial.print(dht.temperature_F); Serial.print(" *F\t");
 Serial.print(dht.computeHeatIndex_C()); Serial.print(" *C\t");
 Serial.print(dht.computeHeatIndex_F()); Serial.println(" *F");
  // Wait a few seconds between measurements. The AM2302 should not be read at a higher frequency of
 // about once every 2 seconds. So we add a 3 second delay to cover this.
  delay(3000);
  }

 

Skąd wziąłeś tę bibliotekę i dlaczego nie używasz normalnej (DHT)? Poza tym nawet nie znając biblioteki a czytając tylko komentarze w kodzie - masz NodeMCU z prockiem 16 MHz?

  • Lubię! 1

Bibliotekę ogarnąłem po wielu próbach nieudanego odpalenia czujnika am2302. Dzisiaj bede to testował. Dziwi mnie to tylko ze kod ktory napisałem z opcja wysyłania na serwer działał do czasu. Potem sie wieszal i musiałem resetowac az nic juz to nie dawalo. Dzisiaj to wytestuje. 

Bo 2 to nie musi być D2. Jak chcesz użyć D2 to w kodzie użyj D2, jak chcesz użyć wartości liczbowej to wydrukuj sobie Serial.print(D2) i zobacz jaka to liczba, sprawdzisz co się kryje w definicjach danej płytki pod D2. Tak samo możesz w przyszłości sprawdzić numer pinu MOSI, czy SCL. Oczywiście można też w PC dogrzebać się do core i sprawdzić te definicje w pliku. W katalogu variants jest jeden pliczek h i tam taki tekst: "static const uint8_t D2   = 4;".

(edytowany)

Też miałem problem z DHT22 na nodeMCU. Ta sama biblioteka na Mega działała, a na NodeMCU już nie. Pomogła zmiana biblioteki. 

Oczywiście numeracja pinów to często popełniamy błąd... 😉

Edytowano przez SOYER

Na jaką bilbiotekę zmieniłes i smiga ?? Bo ja juz sie mecze , pokazuje teraz 0.00% i 0.00 'C .. Czujnik niby działa ale nic nie wskazuje ;/ 

Coś śmiesznego ! , działa wszystko nagle " z dupy " nic nie zrobiłem i działa ...  Czy ten czujnik jest szalony czy co ?

Ja mam takie piki w dół po wymianie czujnika na nowy, piwo dla kogoś kto mi to wytłumaczy. Mało tego, wcześniej były zawsze do zera, ale dopisałem isnan-a by ignorował te zera i teraz mam takie coś. To się kupy nie trzyma... 

 

Screenshot_20190526-135132.jpg

No to świetnie, że działa, nie wiem co prawda jak, bo nie mógł działać bez zmian w kodzie lub podłączeniu -  definicje masz na pin 2, a podpięcie pod D2 gdzie jest to 4 (GPIO4).

(edytowany)
7 godzin temu, ethanak napisał:

Znaczy jak ignorował... pokaż kod.

DHT dht_zew(DHTPIN2, DHTTYPE2);
   float w = dht_zew.readHumidity();
   float t = dht_zew.readTemperature();
   if (isnan(w) || isnan(t)) {}
   else{
  wilgotnosc_dht_zew = w;
  temperatura_dht_zew = t;

jeszcze jeden screenshot... 

 

Screenshot_20190526-221101.jpg

buziak za diagnozę 😄

Edytowano przez SOYER
18 godzin temu, kaczakat napisał:

No to świetnie, że działa, nie wiem co prawda jak, bo nie mógł działać bez zmian w kodzie lub podłączeniu -  definicje masz na pin 2, a podpięcie pod D2 gdzie jest to 4 (GPIO4).

No właśnie ja też jestem zdziwiony, że to zadziałało a przedtem mialem podlaczone pod D0 a działało na D2 ... nie wiem jakim cudem .

Obawiam się, że ciągle mieszasz myślowo różne systemy walutowe. Jak przy kompilacji wybierzesz płytkę NODE MCU to wpisując jako argument funkcji 2 np. digitalWrite(2) to  sygnał pojawi się na pinie D4, ale ten sam kod skompilowany dla np. WIFIDuino będzie banglował pinem D2. Gdy w wybranej płytce jest Generic to na GPIO2, a użycie oznaczenia D2 wygeneruje błąd kompilacji, bo definicjach pinów nie ma przemapowanych numerów GPIO na piny typu D(numerek). Kiedyś będzie prościej, ale najpierw musisz to załapać. Możesz mieć też jakiś wynalazek, który ma pomieszane oznaczenia na płytce, łatwo to rozgryźć puszczając pętlę migania diodą po kolei na wszystkie dostępne piny.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...