Meteostanica v2 - Vyskúšajte online TU!


Technológie pre meteostanicu:

  • PHP
  • CSS
  • AJAX - dynamický zápis posledných teplôt do real-time tabuĺky
  • Google Charts (Grafy)
  • C (Wiring) pre NodeMCU
  • Ethernet: Prenos dát na web
  • Ethernet Shield Wiznet W5100
  • Veličiny v projekte:

  • Teplota dnu: Senzor DS18B20 interiérové vyhotovenie
  • Teplota von: Senzor DS18B20 vonkajšie vyhotovenie
  • Vlhkosť vzduchu: DHT22 - senzor vhlhkosti na I2C zbernici
  • Atmosférický tlak: BMP280 - senzor vhlhkosti na I2C zbernici
  • Hardvérová výbava bez zmeny (volitelná zmena DHT22 miesto DHT12)
    Verzia v2 ponúka:
  • Nové grafické používateľské rozhranie (responzívne)
  • Login systém
  • Real-time dáta do dynamickej tabuľky
  • Archivácia v 10-minútových intervaloch do MySQL databázy, Google Grafy (náhrada za CanvasJS) - výpis grafov aktuálny deň + 7 posledných dní
  • Vylepšená prognóza počasia pre celodenný vývoj teplôt
  • Reset dosky na diaľku
  • Log prihlásení/zmena loginu
  • Indikátor stavu pripojenia dosky
  • Zmena názvov jednotlivých izieb/názvov senzorov
  • Screenshoty meteostanice:

    Zdrojový kód pre Arduino + W5100


  • Knižnice: TU

  • Wiring pre datove piny:
    DS18B20 --> D8
    DHT22 --> D2
    BMP280 --> A4--> SDA A5 --> SCL/SCK
    
    #include <avr\wdt.h> //kniznica watchdogu
    #include <SPI.h>                     //kniznica SPI
    #include <Ethernet.h>                //kniznica k ethernet shieldu
    #include <OneWire.h>                 //Onewire kniznica
    #include <DallasTemperature.h>       //knižnica senzorov  DS18B20
    #include "Adafruit_BMP280.h"         //bmp280 kniznica s upravou na 0x76 adresu
    #define ONE_WIRE_BUS 8               //definovany pin OneWire zbernice
    OneWire oneWire(ONE_WIRE_BUS);       //inicializacia pinu
    DallasTemperature sensors(&oneWire); //priradenie ds18b20 senzorov na onewire zbernicu
    #include <Adafruit_Sensor.h>
    #include <DHT.h>
    #include <DHT_U.h>
    #define DHTPIN            2         // Pin which is connected to the DHT sensor.
    #define DHTTYPE           DHT22     // DHT 22 (AM2302)
    DHT_Unified dht(DHTPIN, DHTTYPE);
    Adafruit_BMP280 bmp; //inicializacia BMP senzora
    byte mac[] = { 0x20, 0x1A, 0x06, 0x75, 0x8C, 0xAA };  
    char server[] = "www.arduino.php5.sk";  
    IPAddress dnServer(192, 168, 0, 1);
    IPAddress gateway(192, 168, 0, 1);
    IPAddress subnet(255, 255, 255, 0);
    IPAddress ip(192, 168, 0, 45);                    
    EthernetClient client;
    void setup() {
      sensors.begin();           //start senzorov ds18b20
      bmp.begin();        //start snimaca BMP
      dht.begin();
      sensor_t sensor;
      Serial.begin(9600);
      if (Ethernet.begin(mac) == 0) {                  //V PRIPADE ZLYHANIA NASTAVENIA DHCP
        Serial.println("Chyba konfiguracie, manualne nastavenie");
        Ethernet.begin(mac, ip, dnServer, gateway, subnet);
      }
      wdt_enable(WDTO_8S);
    }
    void odosli_data(){
      sensor_t sensor;
      sensors_event_t event;  
      dht.humidity().getEvent(&event);
      sensors.requestTemperatures();
      delay(1000);
      String teplota1 = String(sensors.getTempCByIndex(0));
      String teplota2 = String(sensors.getTempCByIndex(1));
      String vlhkost = String(event.relative_humidity);
      String tlak = String(bmp.readPressure() / 100);
      if (client.connect(server, 80)) {               // AK SA NAPOJI NA SERVER NA PORTE 80 (HTTP)
        client.print("GET /system/nodemcu/zapishodnoty.php?teplota1=");        
        client.print(teplota1);  
        client.print("&teplota2=");
        client.print(teplota2);
        client.print("&tlak=");
        client.print(tlak);
        client.print("&vlhkost=");
        client.print(vlhkost);
        client.println(" HTTP/1.1");                 // UKONCENIE REQUESTU ZALOMENIM RIADKA A DOPLNENIM HLAVICKY HTTP S VERZIOU
        client.println("Host: www.arduino.php5.sk"); // ADRESA HOSTA, NA KTOREHO BOL MIERENY REQUEST (NIE PHP SUBOR)
        client.println("Connection: close");         //UKONCENIE PRIPOJENIA ZA HTTP HLAVICKOU
        client.println();                            //ZALOMENIE RIADKA KLIENTSKEHO ZAPISU
        client.stop();
        Serial.println("Data uspesne odoslane!");                    
      }else{
        Serial.println("Neuspesne odoslanie dat - spojenie sa nepodarilo");
        }
    }
     
    void loop() {
       if (Ethernet.begin(mac) == 0) {
        Serial.println("Chyba konfiguracie, manualne nastavenie");
        Ethernet.begin(mac, ip, dnServer, gateway, subnet);
        wdt_reset();
     
    }
    odosli_data();
    for(int i=0; i<=10; i++){
      delay(1000);
      wdt_reset();
      }
    }