Nano 33 IoT (keine DHT11 Sensordaten)

Hallo,

ich habe ein Projekt gefunden was ich nachgebaut habe !
DHT11 Sensor daten sollen zu tingg.io gebracht werden.

mein Problem ist das der Sensor mir noch nicht mal aktuelle Daten im Seriellen Monitor liefert, sondern nur 1x die Standard Daten am Anfang und der Rest ERROR

Ich habe mir den Code schon X mal angeschaut und finde den Fehler nicht.

Das mit der Led funzt ganz gut

#include <WiFiNINA.h> 
#include <PubSubClient.h>
#include "credentials.h"

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>


#define LED_PIN   LED_BUILTIN

#define DHTPIN 2     // Digital pin connected to the DHT sensor 
#define DHTTYPE    DHT11     // DHT 11

const char* ssid = networkSSID;
const char* password = networkPASSWORD;
const char* mqttServer = mqttSERVER;
const char* mqttUsername = mqttUSERNAME;
const char* mqttPassword = thingKEY;
const char* mqttDeviceId = thingID;

char subTopic[] = "ledControl";     //payload[0] will control/set LED
char pubTopic[] = "ledState";       //payload[0] will have ledState value
char temperatureTopic[] = "temperature";
char humidityTopic[] = "humidity";

WiFiClient wifiClient;
PubSubClient client(wifiClient);
long lastMsg = 0;
char msg[50];
int value = 0;
int ledState = 0;

DHT_Unified dht(DHTPIN, DHTTYPE);


void setup_wifi() 
{
  delay(10);
  
  Serial.println();
  Serial.print("Connecting to wifi ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) 
{
  Serial.print("topic: ");
  Serial.print(topic);
  Serial.print(" message: ");
  for (int i = 0; i < length; i++) 
  {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  if ((char)payload[0] == '1') 
  {
    digitalWrite(LED_PIN, HIGH);   
    ledState = 1;
    char payLoad[1];
    itoa(ledState, payLoad, 10);
    client.publish(pubTopic, payLoad);
  } 
  else 
  {
    digitalWrite(LED_PIN, LOW); 
    ledState = 0;
    char payLoad[1];
    itoa(ledState, payLoad, 10);
    client.publish(pubTopic, payLoad);
  }

}

void reconnect() 
{
  while (!client.connected()) 
  {
    Serial.print("connecting to mqtt.tingg.io...");
 
    if (client.connect(mqttDeviceId, mqttUsername, mqttPassword)) 
    {
      Serial.println("connected.");
      client.subscribe(subTopic);
    } else 
    {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void setup() 
{
  pinMode(LED_PIN, OUTPUT);     
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqttServer, 1883);
  client.setCallback(callback);

  dht.begin();
  // Print temperature sensor details.
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
  Serial.println(F("------------------------------------"));
  Serial.println(F("Temperature Sensor"));
  Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);
  Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);
  Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);
  Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
  Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
  Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
  Serial.println(F("------------------------------------"));
  // Print humidity sensor details.
  dht.humidity().getSensor(&sensor);
  Serial.println(F("Humidity Sensor"));
  Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);
  Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);
  Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);
  Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("%"));
  Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("%"));
  Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("%"));
  Serial.println(F("------------------------------------"));
}

void loop() 
{
  if (!client.connected()) 
  {
    reconnect();
  }
  client.loop();

  long now = millis();
  if (now - lastMsg > 5000) 
  {
    lastMsg = now;
    char payLoad[1];
    itoa(ledState, payLoad, 10);
    client.publish(pubTopic, payLoad);

    // Get temperature event and print its value.
    sensors_event_t event;
    dht.temperature().getEvent(&event);
    if (isnan(event.temperature)) {
      Serial.println(F("Error reading temperature!"));
    }
    else {
      Serial.print(F("Temperature: "));
      float celsius = event.temperature;
      Serial.print(celsius);
      Serial.println(F("°C"));
      client.publish(temperatureTopic, String(celsius).c_str());
      
    }
    // Get humidity event and print its value.
    dht.humidity().getEvent(&event);
    if (isnan(event.relative_humidity)) {
      Serial.println(F("Error reading humidity!"));
    }
    else {
      Serial.print(F("Humidity: "));
      float humidity = event.relative_humidity;
      Serial.print(humidity);
      Serial.println(F("%"));
      client.publish(humidityTopic, String(humidity).c_str());
    }


    
  }
}

Poste ein Verdrahtungs-Diagramm, das könnte auf Probleme dort hindeuten.

Poste einen Link zur DHT-Bibliothek, die Du verwendest, es gibt fast ein halbes Dutzend, das DHT.h heisst.

Und poste die vollständige Ausgabe des Seriellen Monitors!

Angeschlossen ist es richtig !!!

Serial Monitor...

Error reading temperature!

im Code gibt es die passage wenn ein Fehler auftritt..

dht.humidity().getEvent(&event);
    if (isnan(event.relative_humidity)) {
      Serial.println(F("Error reading humidity!"));

ich habe jetzt mal ein simplen Code genommen...


#include "DHT.h"                
#define DHTPIN 2           
#define DHTTYPE DHT11     
                                 
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHT11 Testprogramm");
  dht.begin();
}
void loop() {
  // Wait a few seconds between measurements.
  delay(2000);                     
                                    
  float h = dht.readHumidity();    // Lesen der Luftfeuchtigkeit und speichern in die Variable h
  float t = dht.readTemperature(); // Lesen der Temperatur in °C und speichern in die Variable t
  
/*********************( Überprüfen ob alles richtig Ausgelesen wurde )*********************/ 
  if (isnan(h) || isnan(t)) {       
    Serial.println("Fehler beim auslesen des Sensors!");
    return;
  }

  // Nun senden wir die gemessenen Werte an den PC dise werden wir im Seriellem Monitor sehen
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(h);                  // Ausgeben der Luftfeuchtigkeit
  Serial.print("%\t");              // Tabulator
  Serial.print("Temperatur: ");
  Serial.print(t);                  // Ausgeben der Temperatur
  Serial.write('°');                // Schreiben des ° Zeichen
  Serial.println("C");
}

Getestet auf Arduino...

UNO >>> erfolgreich Daten werden gelesen
Nano 33 IoT >>> keine Daten (Fehler beim auslesen des Sensors!)

hängt das eventuell damit zusammen ??

 if (isnan(h) || isnan(t)) {       
    Serial.println("Fehler beim auslesen des Sensors!");
    return;

Das sieht sehr stark danach aus, dass die Lib nicht für den Nano 33 IoT geeignet ist.
Da Du den Link zu Deiner Lib geheim hältst, kann man dazu nichts genaues sagen.

Gruß Tommy

ich habe es von hier genommen und seine Video´s auf YouTube gesehen ...

Quelle - .Lib

@pylon
Zitat: Poste ein Verdrahtungs-Diagramm, das könnte auf Probleme dort hindeuten.

Das war der Denkanstoß..

ich glaube ich habe die Fehlerquelle gefunden !!!
Ich hatte mir ne Zeichnung für die Pins ausgedruckt weil die auf dem Board so klein aufgedruckt sind.
Danach hab ich auch meine Verbindungen gepinnt ....
Ich bin der meinung mal gelesen zu haben das das Board keine 5V hat aber auf meine Zeichnung wird 5V angegeben !
Habe jetzt mal mit ner Lupe am Board gesucht und keine 5V gefunden nur 3.3V
Da hab ich jatzt mal gepinnt und wunder es Funzt jetzt, da ich immer mit Ardu. UNO 5V gearbeitet habe ist es mir nicht aufgefallen das dieses Board Ardu. 33 IoT wohl keine 5V gibt hmmm

Das ist nix neues, es gibt zig Hersteller und noch mehr varianten :wink:
Bei ESP ist das gleiche Spiel, bei Mega falsche Serial Bezeichnungen usW :wink:
Glückwunsch !!!

ich habe grade festgestellt das ich mit 33 IoT noch nicht mal nen HC-SR04 betreiben kann !
Der braucht 5V und das liefert 33 IoT nicht, könnte ich den Sensor mit externe 5V speisen zb. 5V Netzteil ???

Sensor
VCC/GND über extern 5V
Trig/Echo über 33 IoT

Den darfst Du nicht direkt an den Nano 33 IoT anschliessen, das könnte ihn beschädigen. Sei sehr vorsichtig, wenn Du Komponenten mit unterschiedlichen Spannungslevels betreibst. Der Nano 33 IoT arbeitet mit 3.3V, der UNO mit 5V. Wenn Du Komponenten mit anderen Arbeitsspannungen verwendest, solltest Du sog. Level-Converter einsetzen, die von einer Spannung in die andere "übersetzen".

kann ich nicht einfach andere Quellen nehmen ??

Was meinst du mit anderen Quellen ?

Ich betreiben den US-Sensor an einem ESP8266 mit 3,3Volt und das funktioniert. Somit sollte das auch mit dem Nano 33IoT funktionieren.

Wenn du Bedenken hast, mach es wie hier beschrieben.

Es gibt 3 Sorten vom dem Zeug, mit Quarz, ohne Quarz und umschaltbare auf Serial auch ohne Quarz .
Der mit dem Quarz will nicht mit 3,3V bei mir, die beide andere sind schon fest verbaut.
@HotSystems danke für den Link

sieht man doch auf dem Bild !

US-Sensor 5V und 33 IoT 5V vom Netzteil !

Ich Frage ja nicht umsonst , weil ich US-Sensor nicht mit 3.3V betreiben kann , liefert keine werte !!! immer 000000000 (über UNO & 5V schon)
Selbst mit DHT11 & 3.3V kommen zwar werte raus sind aber Fehlerhaft ! (über UNO & 5V korrekte daten )

Was sieht man im Bild ?
Oder magst du Fragen nicht direkt beantworten ?

man sieht das ich den Sensor mit 5V speisen will und den Arduino mit 5V speisen will !
Kann man das so machen ?

Ich guck mir aber grade die wandler an

Sorry aber der DHT11 ist schrott, der funktioniert 1A

Ok, wenn der Nano 33 mit 5 Volt betrieben wird, bekommt der Controller dennoch nur 3,3Volt und die Pins vertragen dann auch nur die 3,3Volt. Ausgenommen, das Datenblatt sagt was anderes.

Schau dir meinen Link an, da steht, wie es geht.

mag sein das der gut Funktioniert, die Produkte die ich momentan verwende sind nur zum testen da.
Aber der US-Sensor Funktioniert garnicht !
Ich will auch nicht weiter vom Thema abschweifen ,

könnte ich den US - Sensor mit 5V extern Speisen ? wie Grafik zeigt

Ja, den Link habe ich gepostet.

Ich schau mir erstmal den Link weiter an !

Danke