Inhaltsverzeichnis
Arduino UNO
#include "Adafruit_BMP280.h"
#include "LCDIC2.h"
// 4-zeiliges LCD
LCDIC2 lcd(0x27, 20, 4);
Adafruit_BMP280 bmp;
void setup()
{
// BMP280 starten
bmp.begin();
Serial.begin(9600);
// LCD starten
lcd.begin();
// Cursor "verstecken"
lcd.setCursor(false);
}
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);
}
ESP32-Wroom mit Datum-Zeitanzeige
/*
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
DHT.h -> Messfunktionen für die Sensoren DHT11/DHT22
*/
#include "WiFi.h"
#include "time.h"
#include "Adafruit_BMP280.h"
#include "LCDIC2.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);
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);
}
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 sht in String mit 2 Nachkommastellen 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);
}
Letzte Aktualisierung: