Arduino Nano - Capteur de Température et d'Humidité - OLED

Ce tutoriel vous explique comment lire la température et l'humidité à partir d'un capteur DHT11/DHT22 et les afficher sur un OLED.

Capteur de température et d'humidité Arduino Nano DHT11/DHT22 avec affichage OLED

Préparation du matériel

1×Official Arduino Nano
1×Alternativement: DIYables ATMEGA328P Nano Development Board
1×Câble USB A vers Mini-B
1×Écran OLED I2C SSD1306 128x64
1×Écran OLED I2C SSD1306 128x32
1×Capteur de température et humidité DHT11
1×Fils de connexion
1×Optionnel: 9V Power Adapter for Arduino Nano

You can use DHT22 sensor instead of DHT11 sensor.

1×Recommandé: Carte d'extension à bornier à vis pour Arduino Nano
1×Recommandé: Carte d'extension breakout pour Arduino Nano
1×Recommandé: Répartiteur d'alimentation pour Arduino Nano

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos de l'écran OLED, des capteurs d'humidité et de température DHT11 et DHT22

Si vous n'êtes pas familier avec l'écran OLED, les capteurs d'humidité et de température DHT11 et DHT22 (brochage, fonctionnalités, programmation...), les tutoriels suivants peuvent vous aider :

Diagramme de câblage

Arduino Nano - Câblage du module DHT11 avec écran LCD

Schéma de câblage Arduino Nano DHT11 OLED

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Arduino Nano - Câblage du module DHT22 avec écran LCD

Schéma de câblage Arduino Nano DHT22 OLED

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Voir Comment alimenter un Arduino Nano..

Code Arduino Nano - Capteur DHT11 - OLED

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-temperature-humidity-sensor-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #define OLED_WIDTH 128 // OLED display width, in pixels #define OLED_HEIGHT 64 // OLED display height, in pixels #define DHT_PIN 2 // The Arduino Nano pin connected to DHT11 sensor #define DHT_TYPE DHT11 Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C DHT dht(DHT_PIN, DHT_TYPE); String temperature; String humidity; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x64 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true) ; } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(3); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display dht.begin(); // initialize DHT11 the temperature and humidity sensor temperature.reserve(10); // to avoid fragmenting memory when using String humidity.reserve(10); // to avoid fragmenting memory when using String } void loop() { float humi = dht.readHumidity(); // read humidity float tempC = dht.readTemperature(); // read temperature // check if any reads failed if (isnan(humi) || isnan(tempC)) { temperature = "Failed"; humidity = "Failed"; } else { temperature = String(tempC, 1); // one decimal places temperature += char(247); // degree character temperature += "C"; humidity = String(humi, 1); // one decimal places humidity += "%"; } Serial.print(tempC); // print to Serial Monitor Serial.print("°C | " ); // print to Serial Monitor Serial.print(humi); // print to Serial Monitor Serial.println("%"); // print to Serial Monitor oledDisplayCenter(temperature, humidity); // display temperature and humidity on OLED } void oledDisplayCenter(String temperature, String humidity) { int16_t x1; int16_t y1; uint16_t width_T; uint16_t height_T; uint16_t width_H; uint16_t height_H; oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_T, &height_T); oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_H, &height_H); // display on horizontal and vertical center oled.clearDisplay(); // clear display oled.setCursor((SCREEN_WIDTH - width_T) / 2, SCREEN_HEIGHT / 2 - height_T - 5); oled.println(temperature); // text to display oled.setCursor((SCREEN_WIDTH - width_H) / 2, SCREEN_HEIGHT / 2 + 5); oled.println(humidity); // text to display oled.display(); }

Étapes rapides

  • Cliquez sur l'icône Libraries dans la barre gauche de l'IDE Arduino.
  • Recherchez "SSD1306" puis trouvez la bibliothèque SSD1306 d'Adafruit.
  • Appuyez sur le bouton Install pour installer la bibliothèque.
Bibliothèque OLED Arduino Nano
  • Vous devrez installer d'autres dépendances de bibliothèque.
  • Appuyez sur le bouton Install All pour terminer l'installation de toutes les dépendances de la bibliothèque.
Bibliothèque de capteurs Adafruit GFX pour Arduino Nano
  • Recherchez « DHT » et localisez la bibliothèque de capteurs Adafruit DHT.
  • Appuyez sur le bouton Install pour installer la bibliothèque.
Bibliothèque du capteur DHT pour Arduino Nano
  • Il vous sera demandé d'installer d'autres dépendances de bibliothèque.
  • Cliquez sur le bouton Install All pour installer toutes les dépendances de la bibliothèque.
Bibliothèque unifiée de capteurs Adafruit pour Arduino Nano
  • Copiez le code ci-dessus et ouvrez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour envoyer le code au Arduino Nano.
  • Placez le capteur dans de l'eau chaude et froide, ou tenez-le dans votre main.
  • Vérifiez le résultat sur l'OLED et le moniteur série.

※ Note:

Le code en question centre automatiquement le texte à la fois horizontalement et verticalement sur un écran OLED.

Code Arduino Nano - Capteur DHT22 - OLED

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-temperature-humidity-sensor-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #define OLED_WIDTH 128 // OLED display width, in pixels #define OLED_HEIGHT 64 // OLED display height, in pixels #define DHT_PIN 2 // The Arduino Nano pin connected to DHT22 sensor #define DHT_TYPE DHT22 Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C DHT dht(DHT_PIN, DHT_TYPE); String temperature; String humidity; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x64 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true) ; } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(3); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display dht.begin(); // initialize DHT22 the temperature and humidity sensor temperature.reserve(10); // to avoid fragmenting memory when using String humidity.reserve(10); // to avoid fragmenting memory when using String } void loop() { float humi = dht.readHumidity(); // read humidity float tempC = dht.readTemperature(); // read temperature // check if any reads failed if (isnan(humi) || isnan(tempC)) { temperature = "Failed"; humidity = "Failed"; } else { temperature = String(tempC, 1); // one decimal places temperature += char(247); // degree character temperature += "C"; humidity = String(humi, 1); // one decimal places humidity += "%"; Serial.print(tempC); // print to Serial Monitor Serial.print("°C | " ); // print to Serial Monitor Serial.print(humi); // print to Serial Monitor Serial.println("%"); // print to Serial Monitor } oledDisplayCenter(temperature, humidity); // display temperature and humidity on OLED } void oledDisplayCenter(String temperature, String humidity) { int16_t x1; int16_t y1; uint16_t width_T; uint16_t height_T; uint16_t width_H; uint16_t height_H; oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_T, &height_T); oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_H, &height_H); // display on horizontal and vertical center oled.clearDisplay(); // clear display oled.setCursor((SCREEN_WIDTH - width_T) / 2, SCREEN_HEIGHT / 2 - height_T - 5); oled.println(temperature); // text to display oled.setCursor((SCREEN_WIDTH - width_H) / 2, SCREEN_HEIGHT / 2 + 5); oled.println(humidity); // text to display oled.display(); }

※ Note:

Le code pour DHT11 et DHT22 est le même, à part une ligne. La bibliothèque utilisée pour les deux est également la même.

Vidéo

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !