Das Programm misst die Temperatur mit einem DHT11 oder DHT22. Das aktuelle Datum und die aktuelle Zeit wird über WiFi ermittelt. Temperatur, Luftfeuchtigkeit und Zeit werden auf einem LCD angezeigt.
Die Hardware
Die Pinbelegung kann sich von der hier gezeigten unterscheiden. Achte auf die Beschriftung auf dem Modul!
Das LCD wird über die Pins SDA und SCL verbunden. Im Programm wird das verwendete LCD (2-zeilig oder 4-zeilig) über seine Adresse definiert.
Diese kannst du mit dem folgenden ⇒Programm herausfinden:
⇒LCD
Die Helligkeit kann mit einem Potentiometer auf der Rückseite des LCDs eingestellt werden.
Vorbereitung
Zunächst musst du über den Boardverwalter das Board installieren:
Wenn das Board angeschlossen ist, kann der USB-Anschluss ausgewählt werden. Der Name des Anschlusses unterschiedet sich je nach verwendetem Betriebssystem.
Ansicht auf dem LCD
Der Schaltplan
Das Programm
Benötigte Bibliotheken
Bibliotheken und Variable
#include "DHT.h"
#include "WiFiS3.h"
#include "NTP.h"
#include "LCDIC2.h"
LCDIC2 lcd(0x27, 20, 4);
// Pin des Sensors
int SENSOR_DHT = 7;
// DHT11
// #define SensorTyp DHT11
// DHT22
#define SensorTyp DHT22
// Sensor einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
// SSID und Passwort des Routers
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
// Zeit bis zur nächsten Messung
static unsigned long GesicherteStartZeit = 0;
unsigned long Startzeit;
// alle 60 Sekunden aktualisieren, kann angepasst werden
int Intervall = 60000;
Der setup-Teil
void setup()
{
lcd.begin();
Serial.begin(9600);
while (!Serial) { ; }
delay(1000);
// Verbindung aufbauen
WiFi.begin(Router, Passwort);
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.print("Verbindung aufbauen mit ");
Serial.println(Router);
// IP des Servers/des verbundenen Computers anzeigen
Serial.print("Server: ");
Serial.println(WiFi.SSID());
// IP des Arduinos anzeigen
Serial.print("IP Adresse Arduino DHCP: ");
Serial.println(WiFi.localIP());
/*
Zeitzone
CEST: Central European Summertime
Beginn europäische Sommerzeit letzter Sonntag im März 2 Uhr GMT + 2 Stunden
*/
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);
// CET: Central European Time
// Beginn Normalzeit letzter Sonntag im Oktober 3 Uhr GMT + 1 Stunde
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);
// ntp starten
ntp.begin();
// Zeit holen
ntp.update();
dht.begin();
// beim Start Daten ausgeben
// Serieller Monitor
String Temperatur = String(dht.readTemperature());
Temperatur.replace(".", ",");
Serial.print("Temperatur:");
Serial.println(Temperatur + " °C");
// Luftfeuchtigkeit
String Luftfeuchtigkeit = String(dht.readHumidity());
Luftfeuchtigkeit.replace(".", ",");
Serial.print("Luftfeuchtigkeit: ");
Serial.println(Luftfeuchtigkeit + " %");
lcd.setCursor(0, 0);
switch (ntp.weekDay()) {
case 0:
Serial.print("Sonntag");
lcd.print("Sonntag");
break;
case 1:
Serial.print("Montag");
lcd.print("Montag");
break;
case 2:
Serial.print("Dienstag");
lcd.print("Dienstag");
break;
case 3:
Serial.print("Mittwoch");
lcd.print("Mittwoch");
break;
case 4:
Serial.print("Donnerstag");
lcd.print("Donnerstag");
break;
case 5:
Serial.print("Freitag");
lcd.print("Freitag");
break;
case 6:
Serial.print("Samstag");
lcd.print("Samstag");
break;
}
Serial.print(", ");
// Zeit mit formatedTime() anzeigen:
// %d = Tag, %m = Monat, %Y = Jahr, %T = Zeit in Stunden, Minuten, Sekunden
Serial.println(ntp.formattedTime("%d.%m.%Y Uhrzeit: %T"));
lcd.setCursor(0, 1);
String Zeit = ntp.formattedTime("%d.%m.%Y %T");
// String Zeit nch Minuten kürzen
lcd.print(Zeit.substring(0, Zeit.indexOf(":") + 3));
lcd.setCursor(0, 2);
lcd.print(Temperatur + " \337C");
lcd.setCursor(0, 3);
lcd.print(Luftfeuchtigkeit + " %");
// Cursor "verstecken"
lcd.setCursor(false);
}
Im Seriellen Monitor werden die verwendete IP-Adresse und die Messwerte für Temperatur und Luftfeuchtigkeit angezeigt.
Der loop-Teil
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
lcd.clear();
// Startzeit zurücksetzen
GesicherteStartZeit = Startzeit;
// Zeit holen
ntp.update();
Serial.println("Temperatur und Luftfeuchtigkeit messen");
Serial.println("Letzte Messung: ");
// formatedTime() zeigt Wochentage in englischer Sprache
// -> müssen einzeln abgefragt werden
lcd.setCursor(0, 0);
switch (ntp.weekDay())
{
case 0:
Serial.print("Sonntag");
lcd.print("Sonntag");
break;
case 1:
Serial.print("Montag");
lcd.print("Montag");
break;
case 2:
Serial.print("Dienstag");
lcd.print("Dienstag");
break;
case 3:
Serial.print("Mittwoch");
lcd.print("Mittwoch");
break;
case 4:
Serial.print("Donnerstag");
lcd.print("Donnerstag");
break;
case 5:
Serial.print("Freitag");
lcd.print("Freitag");
break;
case 6:
Serial.print("Samstag");
lcd.print("Samstag");
break;
}
Serial.print(", ");
Serial.println(ntp.formattedTime("%d.%m.%Y Uhrzeit: %T"));
// Temperatur
String Temperatur = String(dht.readTemperature());
Temperatur.replace(".", ",");
Serial.print("Temperatur:");
Serial.println(Temperatur + " °C");
// Luftfeuchtigkeit
String Luftfeuchtigkeit = String(dht.readHumidity());
Luftfeuchtigkeit.replace(".", ",");
Serial.print("Luftfeuchtigkeit: ");
Serial.println(Luftfeuchtigkeit + " %");
// Ausgabe LCD
lcd.setCursor(0, 1);
String Zeit = ntp.formattedTime("%d.%m.%Y %T");
// String Zeit nch Minuten kürzen
lcd.print(Zeit.substring(0, Zeit.indexOf(":") + 3));
lcd.setCursor(0, 2);
lcd.print(Temperatur + " \337C");
lcd.setCursor(0, 3);
lcd.print(Luftfeuchtigkeit + " %");
}
}
letzte Aktualisierung: