

Ein DHT11, ein DHT22 oder ein BMP280 misst die Temperatur und zeigt sie in Schritten zu je ein Grad auf einem Neopixel-Stick an. Die gemessene Temperatur wird auf ganzzahlige Werte gerundet.
Benötigte Bauteile
- DHT11/DHT22 oder BMP280
- RGB LED-Stick mit 20 LEDs (Grove-Anschluss)
- Leitungsdrähte
Die Hardware
DHT11/DHT22

Der DHT11 und der DHT22 sind digitale Sensoren, sie werden an einem digitalen Pin angeschlossen.
Die Pinbelegung kann sich von der hier gezeigten unterscheiden. Achte auf die Beschriftung auf dem Modul!
LED-Stick

Der LED-Stick besteht aus mehreren miteinander verbundenen RGB-LEDs. Jede besitzt einen eigenen Controller und kann einzeln angesteuert werden. Der LED-Stick benötigt nur einen digitalen Eingang.
Wenn kein Grove-Shield verwendet werden kann, werden die Anschlüsse mit männlich-männlichen Kabeln verlängert.
RGB ist eine Mischung der Farben Rot, Grün und Blau. Jede Farbe kann von 0 bis 255 gesetzt werden, die Werte werden durch Kommata getrennt.

Hier findest du einen Überblick über die 🔗RGB-Farbcodes (externer Link abgerufen am 19.02.24).
BMP280
Der BMP280 wird in verschiedenen Bauformen mit unterschiedlicher Pinbelegung angeboten.


Bei einem BMP280 mit sechs Pins müssen SDO und CSB ebenfalls an VCC (5V) angeschlossen werden.
Quelle: 🔗https://sensorkit.joy-it.net/de/sensors/ky-052 (abgerufen am 01.03.24)
Das Programm
Benötigte Bibliotheken installieren

DHT11/DHT22

BMP280

Bibliotheken einbinden und Variablen definieren
DHT
#include "DHT.h"
#include "Adafruit_NeoPixel.h"
#define RING 4
// Anzahl der LEDs ⇒ muss angepasst werden
#define AnzahlLED 20
// LEDRing -> Name des LED-Rings
Adafruit_NeoPixel LEDRing(AnzahlLED, RING, NEO_GRB + NEO_KHZ800);
// Pin des DHT-Sensors
#define SENSOR_DHT 7
// Sensortyp festlegen
// DHT22 oder DHT11
#define SensorTyp DHT22
// Sensor DHT einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
BMP380
#include "Adafruit_BMP280.h"
#include "Adafruit_NeoPixel.h"
#define RING 4
// Anzahl der LEDs ⇒ muss angepasst werden
#define AnzahlLED 20
// LEDRing -> Name des LED-Rings
Adafruit_NeoPixel LEDRing(AnzahlLED, RING, NEO_GRB + NEO_KHZ800);
// Name des Sensor
Adafruit_BMP280 bmp;
Der setup-Teil
DHT
void setup()
{
Serial.begin(9600);
while (!Serial) {;}
delay(1000);
// DHT starten
dht.begin();
// setBrightness(0..255)
LEDRing.setBrightness(200);
// NeoPixel Bibliothek initialisieren
LEDRing.begin();
}
BMP280
void setup()
{
Serial.begin(9600);
while (!Serial) {;}
delay(1000);
// BMP280 starten
if (!bmp.begin()) Serial.println("BMP280 gestartet!");
// setBrightness(0..255)
LEDRing.setBrightness(200);
// NeoPixel Bibliothek initialisieren
LEDRing.begin();
}
Der loop-Teil
DHT
void loop()
{
// Temperatur lesen
float gemesseneTemperatur = dht.readTemperature();
// gelesene Temperatur in String umwandeln
String Temperatur = String(gemesseneTemperatur);
// . durch , ersetzen
Temperatur.replace(".", ",");
// Ausgabe Serieller Monitor
Serial.println("Temperatur: " + Temperatur + "°C");
Serial.println("--------------------------------");
// alle LEDs aus
LEDRing.clear();
/*
es können nur ganzzahlige Werte berücksichtigt werden
es sollen entsprechend der Skala die LEDs leuchten
der Wert vor dem Komma entscheidet über die Anzahl der LEDs
*/
if (gemesseneTemperatur >= 10 && gemesseneTemperatur < 11) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 1);
if (gemesseneTemperatur >= 11 && gemesseneTemperatur < 12) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 2);
if (gemesseneTemperatur >= 12 && gemesseneTemperatur < 13) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 3);
if (gemesseneTemperatur >= 13 && gemesseneTemperatur < 14) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 4);
if (gemesseneTemperatur >= 14 && gemesseneTemperatur < 15) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 5);
if (gemesseneTemperatur >= 15 && gemesseneTemperatur < 16) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 6);
if (gemesseneTemperatur >= 16 && gemesseneTemperatur < 17) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 7);
if (gemesseneTemperatur >= 17 && gemesseneTemperatur < 18) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 8);
if (gemesseneTemperatur >= 18 && gemesseneTemperatur < 19) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 9);
if (gemesseneTemperatur >= 19 && gemesseneTemperatur < 20) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 10);
if (gemesseneTemperatur >= 20 && gemesseneTemperatur < 21) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 11);
if (gemesseneTemperatur >= 21 && gemesseneTemperatur < 22) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 12);
if (gemesseneTemperatur >= 22 && gemesseneTemperatur < 23) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 13);
if (gemesseneTemperatur >= 23 && gemesseneTemperatur < 24) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 14);
if (gemesseneTemperatur >= 24 && gemesseneTemperatur < 25) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 15);
if (gemesseneTemperatur >= 25 && gemesseneTemperatur < 26) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 16);
if (gemesseneTemperatur >= 26 && gemesseneTemperatur < 27) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 17);
if (gemesseneTemperatur >= 27 && gemesseneTemperatur < 28) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 18);
if (gemesseneTemperatur >= 28 && gemesseneTemperatur < 29) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 19);
if (gemesseneTemperatur >= 29 && gemesseneTemperatur < 30) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 20);
LEDRing.show();
delay(2000);
}
BMP280
void loop()
{
float gemesseneTemperatur = bmp.readTemperature();
// gelesene Temperatur in String umwandeln
String Temperatur = String(gemesseneTemperatur);
// . durch , ersetzen
Temperatur.replace(".", ",");
// Ausgabe Serieller Monitor
Serial.println("Temperatur: " + Temperatur + "°C");
Serial.println("--------------------------------");
// alle LEDs aus
LEDRing.clear();
/*
es können nur ganzzahlige Werte berücksichtigt werden
es sollen entsprechend der Skala die LEDs leuchten
der Wert vor dem Komma entscheidet über die Anzahl der LEDs
*/
if (gemesseneTemperatur >= 10 && gemesseneTemperatur < 11) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 1);
if (gemesseneTemperatur >= 11 && gemesseneTemperatur < 12) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 2);
if (gemesseneTemperatur >= 12 && gemesseneTemperatur < 13) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 3);
if (gemesseneTemperatur >= 13 && gemesseneTemperatur < 14) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 4);
if (gemesseneTemperatur >= 14 && gemesseneTemperatur < 15) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 5);
if (gemesseneTemperatur >= 15 && gemesseneTemperatur < 16) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 6);
if (gemesseneTemperatur >= 16 && gemesseneTemperatur < 17) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 7);
if (gemesseneTemperatur >= 17 && gemesseneTemperatur < 18) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 8);
if (gemesseneTemperatur >= 18 && gemesseneTemperatur < 19) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 9);
if (gemesseneTemperatur >= 19 && gemesseneTemperatur < 20) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 10);
if (gemesseneTemperatur >= 20 && gemesseneTemperatur < 21) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 11);
if (gemesseneTemperatur >= 21 && gemesseneTemperatur < 22) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 12);
if (gemesseneTemperatur >= 22 && gemesseneTemperatur < 23) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 13);
if (gemesseneTemperatur >= 23 && gemesseneTemperatur < 24) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 14);
if (gemesseneTemperatur >= 24 && gemesseneTemperatur < 25) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 15);
if (gemesseneTemperatur >= 25 && gemesseneTemperatur < 26) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 16);
if (gemesseneTemperatur >= 26 && gemesseneTemperatur < 27) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 17);
if (gemesseneTemperatur >= 27 && gemesseneTemperatur < 28) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 18);
if (gemesseneTemperatur >= 28 && gemesseneTemperatur < 29) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 19);
if (gemesseneTemperatur >= 29 && gemesseneTemperatur < 30) LEDRing.fill(LEDRing.Color(0, 0, 255), 0, 20);
LEDRing.show();
delay(2000);
}