Programm mit Arduino
Der Sensor BMP280 kann die Temperatur messen und den Luftdruck bestimmen. Er wird über ⇒I2C angesteuert. Auf einem LCD sollen Temperatur und Luftdruck angezeigt werden.
Das Programm im Film
LCD anschließen
⇒LCD
Normalerweise wäre eine komplexe Verkabelung zum Betrieb eines LCDs nötig. Der ⇒I2C-Bus regelt über einen eigenen Mikroprozessor die Kommunikation der Datenleitungen untereinander. Es werden deshalb nur vier Anschlüsse benötigt.
Die Helligkeit kann mit einem Potentiometer auf der Rückseite des LCDs eingestellt werden.
Benötigte Bauteile
- BMP280
- LCD 1602
- Leitungsdrähte
Der Schaltplan
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
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
Binde die benötigen Bibliotheken und definiere die Bauteile.
#include "Adafruit_BMP280.h"
#include "LCDIC2.h"
// 4-zeiliges LCD
LCDIC2 lcd(0x27, 20, 4);
Adafruit_BMP280 bmp;
Der setup-Teil
Im setup-Teil werden das LCD und der BMP280 gestartet:
void setup()
{
// BMP280 starten
bmp.begin();
Serial.begin(9600);
// LCD starten
lcd.begin();
// Cursor "verstecken"
lcd.setCursor(false);
}
Der loop-Teil
Im loop-Teil wird die Temperatur und der Luftdruck gemessen. Beachte die Kommentare.
void loop()
{
// readTemperature() Temperatur messen und Messergebnis formatieren
String Temperatur = String(bmp.readTemperature());
// . durch , ersetzen
Temperatur.replace(".", ",");
/*
readPressure() Luftdruck messen und Messergebnis formatieren
readPressure() liest in Pascal, ausgabe in hPa (Hekto-Pascal)
Ergebnis durch 100 teilen
*/
String Luftdruck = String(bmp.readPressure() / 100);
Luftdruck.replace(".", ",");
// Ausgabe Serieller Monitor
Serial.println("Temperatur: " + Temperatur + "°C");
Serial.println("Luftdruck: " + Luftdruck + " hPa");
// Ausgabe LCD
lcd.setCursor(0, 0);
lcd.print("Temperatur: ");
lcd.setCursor(0, 1);
// \337C -> °
lcd.print(Temperatur + "\337C");
lcd.setCursor(0, 2);
lcd.print("Luftdruck: ");
lcd.setCursor(0, 3);
lcd.print(Luftdruck + " hPa");
delay(3000);
}
Programm mit ESP32-Wroom
Der ESP32-Wroom verbindet sich über WiFi mit einem Zeitserver und zeigt das aktuelle Datum und die aktuelle Zeit an.
So sieht es aus:
Board installieren
Der Schaltplan
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Das Programm
Bibiotheken und Variablen
/*
WiFi.h -> WiFi-Verbindungen herstellen
time.h -> Zeitfunktionen bereitstellen
Adafruit_BMP280.h -> Messfunktionen für den Sensor BMP280
LCDIC2.h -> Anzeige auf LCD1602 mit I2C
*/
#include "WiFi.h"
#include "time.h"
#include "Adafruit_BMP280.h"
#include "LCDIC2.h"
#include "Wire.h"
// Router-SSID und Passwort
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// NTP-Server aus dem Pool für Deutschland
#define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European Summer Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
// Zeit -> Name der Struktur
tm Zeit;
// Kommunikation des Servers über den Standardport 80
WiFiServer Server(80);
// Name des Klienten
WiFiClient Client;
// 4-zeiliges LCD
LCDIC2 lcd(0x27, 20, 4);
// Name des Sensorobjekts
Adafruit_BMP280 bmp;
// statischeIP = false -> IP-Adresse über DHCP vergeben
// statischeIP = true -> statische IP festlegen
// ip und gateway müssen an das lokale Netz angepasst werden
bool statischeIP = true;
IPAddress ip(192, 168, 1, 200);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
/*
öffentliche DNS-Server
-----------------------------------------------
OpenDNS 208, 67, 222, 222 (USA)
Google 8, 8, 8, 8 (USA)
Cloudfare 1, 1, 1, 1 (USA)
DNSWWatch 84.200.69.80 (Deutschland)
Quad9 9, 9, 9, 9 (Schweiz)
Neustar UltraDNS 56, 154, 70, 3 (USA, gefiltert)
Deutsche Telekom 217, 5,100,185
------------------------------------------------
oder die im Router eingetragene IP
im Beispiel: 192, 168, 1, 20
*/
IPAddress primaryDNS(192, 168, 1, 20);
IPAddress secondaryDNS(9, 9, 9, 9);
Der setup-Teil
void setup()
{
// Zeitzone: Parameter für die zu ermittelnde Zeit
configTzTime(Zeitzone, Zeitserver);
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(500);
// WiFi starten
WiFi.begin(Router, Passwort);
// statische IP vergeben
if (statischeIP)
{
WiFi.config(ip, gateway, subnet, primaryDNS, secondaryDNS);
Serial.print("Verbunden mit ");
Serial.println(Router);
// IP anzeigen
Serial.print("IP: ");
Serial.println(ip);
}
// IP über DHCP ermitteln
else
{
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(Router);
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
// BMP280 starten
bmp.begin();
// LCD starten
lcd.begin();
// Cursor "verstecken"
lcd.setCursor(false);
}
Der loop-Teil
void loop()
{
// aktuelle Zeit holen
time(&aktuelleZeit);
// localtime_r -> Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
lcd.setCursor(0, 0);
// es kann bis zu 60 Sekunden dauern
// bis die Zeit ermittelt wird
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10)
{
Serial.print("0");
lcd.print("0");
}
Serial.print(Zeit.tm_mday);
lcd.print(String(Zeit.tm_mday));
Serial.print(".");
lcd.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10)
{
Serial.print("0");
lcd.print("0");
}
// Zählung beginnt mit 0 -> +1
Serial.print(Zeit.tm_mon + 1);
lcd.print(String(Zeit.tm_mon + 1));
Serial.print(".");
lcd.print(". ");
// Anzahl Jahre seit 1900
Serial.print(Zeit.tm_year + 1900);
Serial.print(" ");
// Stunde: wenn Stunde < 10 -> 0 davor setzen
if (Zeit.tm_hour < 10)
{
Serial.print("0");
lcd.print("0");
}
Serial.print(Zeit.tm_hour);
Serial.print(":");
lcd.print(String(Zeit.tm_hour));
lcd.print(":");
// Minuten
if (Zeit.tm_min < 10)
{
Serial.print("0");
lcd.print("0");
}
Serial.print(Zeit.tm_min);
lcd.print(String(Zeit.tm_min));
Serial.print(":");
lcd.print(":");
// Sekunden
if (Zeit.tm_sec < 10)
{
Serial.print("0");
lcd.print("0");
}
Serial.print(Zeit.tm_sec);
lcd.print(String(Zeit.tm_sec));
Serial.println();
// gelesene Temperatur in String umwandeln
String Temperatur = String(bmp.readTemperature());
// . durch , ersetzen
Temperatur.replace(".", ",");
/*
readPressure() Luftdruck messen und Messergebnis formatieren
readPressure() liest in Pascal, ausgabe in hPa (Hekto-Pascal)
Ergebnis durch 100 teilen
*/
String Luftdruck = String(bmp.readPressure() / 100);
Luftdruck.replace(".", ",");
// Ausgabe Serieller Monitor
Serial.println("Temperatur: " + Temperatur + "°C");
Serial.println("Luftdruck: " + Luftdruck + " hPa");
Serial.println("--------------------------------");
// Ausgabe auf dem LCD
// Ausgabe LCD
lcd.setCursor(0, 1);
lcd.print("Temperatur: ");
// \337C -> °
lcd.print(Temperatur + "\337C");
lcd.setCursor(0, 2);
lcd.print("Luftdruck: ");
lcd.setCursor(0, 3);
lcd.print(Luftdruck + " hPa");
delay(5000);
}
Verwandte Anleitungen:
- BME280 -Messdaten anzeigen
- DHT11/DHT22 - Durchschnittstemperatur berechnen und auf einem OLED-Display anzeigen
- DHT11/DHT22 - Wetterdaten aufzeichnen
- DHT11/DHT22 - Wetterdaten mit Bluetooth-Modul übermitteln
- DHT11/DHT22 - Wetterstation LAN
- DHT11/DHT22 - Wetterstation Anzeige auf einem LCD
- DHT11/DHT22 - Wetterstation WiFi
- Messdaten mit BME680 und ESP32 anzeigen
- Temperaturanzeige auf einem LCD mit einem ESP32-Wroom
- TMP36 - Temperatur messen
- Wetterstation mit CO2-Messung
- Wetterstation mit Nano ESP32, ESP32-Wroom, NodeMCU, DHT11/DHT22 und OLED
- Wetterstation mit UNO R4 WiFi und LCD
- DHT11/DHT22 - Wetterstation LAN Daten speichern
Letzte Aktualisierung: