Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <WiFiNINA.h>
- #include "DHT.h"
- #include "arduino_secrets.h"
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- //Webserver
- ///////please enter your sensitive data in the Secret tab/arduino_secrets.h
- char ssid[] = SECRET_SSID; // your network SSID (name)
- char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)
- int keyIndex = 0; // your network key Index number (needed only for WEP)
- WiFiClient client; // Initialize the Wifi client library
- int status = WL_IDLE_STATUS;
- WiFiServer server(80);
- char meinserver[] = "lenk-haibach.de"; // server address:
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- //DHT22
- int led = 6;
- #define DHTPIN 8
- #define DHTTYPE DHT22
- DHT dht(DHTPIN, DHTTYPE);
- float hkf = 0;
- float hkt = 0;
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- //DCF77
- int signalPin = 5;
- char dcf77Signal;
- char buffer;
- unsigned long nowTime, lastTime;
- int diffTime;
- byte impulsLevel; // Impulsdauer 100ms => logisch 0, 200 ms => logisch 1
- byte Impuls[59]; // eingehende Impulse
- byte impulsWert[8] = {1, 2, 4, 8, 10, 20, 40, 80}; //Impulswertigkeit für Level logisch 1
- byte impulsZaehler = 0; //Anzahl eingehende Impulse
- byte dcf77Stunde = 0;
- byte dcf77Minute = 0;
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
- const unsigned long postingInterval = 600L * 1000L; // delay between updates, in milliseconds
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- void setup() {
- Serial.begin(9600); // initialize serial communication
- pinMode(led, OUTPUT); // set the LED pin mode
- pinMode(signalPin, INPUT);
- dht.begin();
- // check for the WiFi module:
- if (WiFi.status() == WL_NO_MODULE) {
- Serial.println("Kommunikation mit WiFi-Modul fehlgeschlagen!");
- // don't continue
- while (true);
- }
- // attempt to connect to Wifi network:
- while (status != WL_CONNECTED) {
- Serial.print("Versuche, eine Verbindung zum Netzwerk mit diesem Namen herzustellen:");
- Serial.println(ssid); // print the network name (SSID);
- // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
- status = WiFi.begin(ssid, pass);
- // wait 10 seconds for connection:
- delay(10000);
- }
- server.begin(); // start the web server on port 80
- Serial.println("Server gestartet");
- }
- void loop() {
- dcf77Signal = digitalRead(signalPin);
- if (dcf77Signal != buffer)
- {
- nowTime = millis();
- delay(5); //Wartezeit bis eingeschwungener Zustand
- diffTime = nowTime - lastTime;
- lastTime = nowTime;
- if (diffTime < 150) impulsLevel = 0;
- else if (diffTime < 250) impulsLevel = 1;
- else if (diffTime > 1000)
- {
- if (impulsZaehler == 59 || impulsZaehler == 60) dekodiereZeit();
- impulsZaehler = 0;
- }
- if (dcf77Signal == 0) // Abfrage auf "1", wenn das invertierte Signal verwendet wird
- {
- Impuls[impulsZaehler] = impulsLevel;
- impulsZaehler++;
- }
- buffer = dcf77Signal;
- neuerserver();
- if (millis() - lastConnectionTime > postingInterval) {
- DHTSensor();
- neuerclient();
- }
- }
- }
- void neuerserver() {
- WiFiClient client = server.available(); // listen for incoming clients
- if (client) { // if you get a client,
- Serial.println("Neuer client"); // print a message out the serial port
- String currentLine = ""; // make a String to hold incoming data from the client
- while (client.connected()) { // loop while the client's connected
- if (client.available()) { // if there's bytes to read from the client,
- char c = client.read(); // read a byte, then
- Serial.write(c); // print it out the serial monitor
- if (c == '\n') { // if the byte is a newline character
- // if the current line is blank, you got two newline characters in a row.
- // that's the end of the client HTTP request, so send a response:
- if (currentLine.length() == 0) {
- // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
- // and a content-type so the client knows what's coming, then a blank line:
- client.println("HTTP/1.1 200 OK");
- client.println("Content-type:text/html");
- client.println();
- // the content of the HTTP response follows the header:
- client.print("Click <a href=\"/H\">here</a> turn the LED on pin 9 on<br>");
- client.print("Click <a href=\"/L\">here</a> turn the LED on pin 9 off<br>");
- // The HTTP response ends with another blank line:
- client.println();
- // break out of the while loop:
- break;
- } else { // if you got a newline, then clear currentLine:
- currentLine = "";
- }
- } else if (c != '\r') { // if you got anything else but a carriage return character,
- currentLine += c; // add it to the end of the currentLine
- }
- // Check to see if the client request was "GET /H" or "GET /L":
- if (currentLine.endsWith("GET /H")) {
- digitalWrite(led, HIGH); // GET /H turns the LED on
- }
- if (currentLine.endsWith("GET /L")) {
- digitalWrite(led, LOW); // GET /L turns the LED off
- }
- }
- }
- // close the connection:
- client.stop();
- Serial.println("client disonnected");
- }
- }
- void neuerclient() {
- while (client.available()) {
- char c = client.read();
- Serial.write(c);
- }
- // close any connection before send a new request.
- // This will free the socket on the Nina module
- client.stop();
- // if there's a successful connection:
- if (client.connect(meinserver, 80)) {
- Serial.println("verbinde...");
- // send the HTTP PUT request:
- client.print("GET /getandsave.php?hkt=");
- client.print(hkt);
- client.print("&hkf=");
- client.print(hkf);
- client.println(" HTTP/1.1");
- client.println("Host:www.lenk-haibach.de");
- client.println("User-Agent: ArduinoWiFi/1.1");
- client.println("Connection: close");
- client.println();
- // note the time that the connection was made:
- lastConnectionTime = millis();
- } else {
- // if you couldn't make a connection:
- Serial.println("Verbindung fehlgeschlagen");
- }
- }
- void DHTSensor() {
- hkf = dht.readHumidity();
- hkt = dht.readTemperature();
- delay(2000);
- Serial.println(F("DHT Test!"));
- if (isnan(hkf) || isnan(hkt)) {
- Serial.println(F("Fehler beim Lesen des DHT-Sensors!"));
- return;
- }
- Serial.print(F("Luftfeuchte: "));
- Serial.print(hkf);
- Serial.print(F("% Temperatur: "));
- Serial.print(hkt);
- Serial.println(F("°C "));
- }
- void dekodiereZeit(){
- bool dateTimeOk = true;
- byte paritaetStunde = 0;
- byte paritaetMinute = 0;
- dcf77Stunde = 0;
- dcf77Minute = 0;
- //Ueberpruefen der Stundenparitaet
- for (byte i = 29; i < 35; i++) paritaetStunde ^= Impuls[i];
- if (Impuls[35] != paritaetStunde) dateTimeOk = false;
- //Ueberpruefen der Minutenparitaet
- for (byte i = 21; i < 28; i++) paritaetMinute ^= Impuls[i];
- if (Impuls[28] != paritaetMinute) dateTimeOk = false;
- //Zuweisen der Impulswertigkeit
- for (byte i = 29; i < 35; i++) (Impuls[i] == 1 ? dcf77Stunde += impulsWert[i - 29] : 0);
- for (byte i = 21; i < 28; i++) (Impuls[i] == 1 ? dcf77Minute += impulsWert[i - 21] : 0);
- //Ueberpruefen des Wertebereiches
- if (dcf77Stunde > 23 || dcf77Minute > 59) dateTimeOk = false;
- if (dateTimeOk)
- {
- Serial.print(dcf77Stunde);
- Serial.print(" : ");
- Serial.println(dcf77Minute);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement