dht22 показывает "nan" данные

Alex277
Offline
Зарегистрирован: 20.01.2021

Привет! Пытаюсь отправить данные с dht22 в базу mysql в определенное время с помощью ds3231. Но вместо реальных данных всегда получаю «nan». В чем может быть проблема?

//idSensor 1
//fridgeName горячий цех-шкаф холодильный
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

#include <TimeLib.h>
#include <TimeAlarms.h>
#include <Wire.h>
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Newer Ethernet shields have a MAC address printed on a sticker on the shield
IPAddress server(192, 168, 7, 1); //IPv4 address
// set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);
IPAddress myDns(192, 168, 0, 1);
EthernetClient client;

void setup() {
  Serial.begin(9600);
  // wait for Arduino Serial Monitor
  while (!Serial) ;

  // get and set the time from the RTC
  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet)
    Serial.println("Unable to sync with the RTC");
  else
    Serial.println("RTC has set the system time");

  // create the alarms, to trigger functions at specific times
  Alarm.alarmRepeat(8, 35, 0, Morningalarm);
  Ethernet.begin(mac);
  dht.begin();
}

void loop() {
  digitalClockDisplay();
  // wait one second between each clock display in serial monitor
  Alarm.delay(1000);
}

int idSensor = 1;
String fridgeName = "горячий%20цех-шкаф%20холодильный";
float hum = dht.readHumidity(); //Reading the humidity and storing in hum
float temp = dht.readTemperature(); //Reading the temperature as Celsius and storing in temp
float fah = dht.readTemperature(true); //reading the temperature in Fahrenheit
float heat_index = dht.computeHeatIndex(fah, hum); //Reading the heat index in Fahrenheit
float heat_indexC = dht.convertFtoC(heat_index); //Converting the heat index in Celsius

void Morningalarm() {
  if (client.connect(server, 80)) {
    Serial.println("connected");
    //client.print("GET /data.php?temperature=25&humidity=27&heat_index=24"); //Connecting and Sending values to database
    client.print("GET /data.php?");
    client.print("temperature=");
    client.print(temp);
    client.print("&humidity=");
    client.print(hum);
    client.print("&heat_index=");
    client.print(heat_indexC);
    client.print("&idSensor=");
    client.print(idSensor);
    client.print("&fridgeName=");
    client.print(fridgeName);
    client.println(" HTTP/1.1");
    client.println("Host: 192.168.7.1");
    client.println("Connection: close");
    client.println();

    Serial.print("GET /data.php?");
    Serial.print("temperature=");
    Serial.print(temp);
    Serial.print("&humidity=");
    Serial.print(hum);
    Serial.print("&heat_index=");
    Serial.print(heat_indexC);
    Serial.print("&idSensor=");
    Serial.print(idSensor);
    Serial.print("&fridgeName=");
    Serial.print(fridgeName);
    Serial.println(" HTTP/1.1");
    client.stop(); //Closing the connection
  } else {
    //if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void digitalClockDisplay() {
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}
void printDigits(int digits) {
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

dht22 подключен к 5v, ds3231 к 3.3v

sadman41
Offline
Зарегистрирован: 19.10.2016

Опять сразу космический корабль... отдельно работает DHT на тестовом скетче? Что в Serial Monitor видно, какие показания?

Alex277
Offline
Зарегистрирован: 20.01.2021

Отдельно dht работает.

Serial monitor:

kalapanga
Offline
Зарегистрирован: 23.10.2016

Проблема в том, что получение данных с датчика расположено вне исполняемого кода. Скорее всего это как объявление переменных и срабатывает, но единственный раз и до вызова dht.begin().

Строки 48 - 52 после строки 54 поставьте.

sadman41
Offline
Зарегистрирован: 19.10.2016

Если отдельно работает, то сначала делайте все в простом лупе, без библиотек типа alarm*. Заработает - переходите к усложнению.

А вообще - дюпонт может просто плохо контачить в загибе под некоторым углом.

Alex277
Offline
Зарегистрирован: 20.01.2021

"Строки 48 - 52 после строки 54 поставьте."

Спасибо! Теперь работает:

YuriyP
Offline
Зарегистрирован: 08.12.2021

Заметил. Тут что-то с библиотекой.Установил библиотеку для DHT21, а датчик поставил DHT11. Работает без NAN. Наоборот не работает.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

часы реального времени там явно лишние