#include <dht.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
dht DHT;
#define DHT22_PIN 5
struct {
uint32_t total;
uint32_t ok;
uint32_t crc_error;
uint32_t time_out;
uint32_t connect;
uint32_t ack_l;
uint32_t ack_h;
uint32_t unknown;
} stat = { 0, 0, 0, 0, 0, 0, 0, 0};
void setup() {
// Initialize the display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
Serial.begin(115200);
Serial.println("dht22_test.ino");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
Serial.println();
display.clearDisplay();
// Set text size, color, and position
display.setTextSize(0.5);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Typ,\tstat,\tHumidity (%),\tTemp (C)\tTime");
}
void loop() {
// READ DATA
Serial.print("DHT22, \t");
uint32_t start = micros();
int chk = DHT.read22(DHT22_PIN);
uint32_t stop = micros();
stat.total++;
switch (chk)
{
case DHTLIB_OK:
stat.ok++;
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
stat.crc_error++;
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
stat.time_out++;
Serial.print("Time out error,\t");
break;
case DHTLIB_ERROR_CONNECT:
stat.connect++;
Serial.print("Connect error,\t");
break;
case DHTLIB_ERROR_ACK_L:
stat.ack_l++;
Serial.print("Ack Low error,\t");
break;
case DHTLIB_ERROR_ACK_H:
stat.ack_h++;
Serial.print("Ack High error,\t");
break;
default:
stat.unknown++;
Serial.print("Unknown error,\t");
break;
}
// DISPLAY DATA
display.print(DHT.humidity, 1);
display.print(",\t");
display.print(DHT.temperature, 1);
display.print(",\t");
display.print(stop - start);
display.println();
if (stat.total % 8 == 0)
{
display.clearDisplay();
display.setCursor(0,0);
display.println("\nTOT\tOK\tCRC\tTO\tCON\tACK_L\tACK_H\tUNK");
display.print(stat.total);
display.print("\t");
display.print(stat.ok);
display.print("\t");
display.print(stat.crc_error);
display.print("\t");
display.print(stat.time_out);
display.print("\t");
display.print(stat.connect);
display.print("\t");
display.print(stat.ack_l);
display.print("\t");
display.print(stat.ack_h);
display.print("\t");
display.print(stat.unknown);
display.println("\n");
stat.total =0;
}
display.display();
delay(2000);
}