Meteostanica - Webclient
Príspevkov: 7
• Stránka 1 z 1
- martinius96
- Príspevky: 44
- Registrovaný: Uto 23. Dec 2014 2:15:50
Meteostanica - Webclient
Navštívte moju stránku: https://arduino.php5.sk
Ahojte, prinášam vám projekt meteostanice, ktorý som vytvoril v niekoľkých variantách s využitím rozličných modulov a riešenie, ktoré sa mi zdalo najideálnejšie som sa rozhodol zverejniť
Čo je poslaním projektu? Čo sa naučím?
- monitorovať teploty v domácnosti (vonkajšiu i vnútornú)
- vlhkosť,
- atmosférický tlak
- uložiť namerané dáta do MySQL databázy cez .PHP súbor s Arduinom v režime Webclient a to v pravidelnom cykle HTTP requestom
Čo budeme na projekt potrebovať? -->
Arduino (UNO),
Ethernet Shield W5100,

2x DS18B20 (indoor a outdoor vyhotovanie),

DHT12 (meranie tlaku, odporúčam DHT22 je presnejší a meria vlhkosť až do 100%, tento čínsky len do 85%),

BMP280 alebo BME280 (meranie tlaku,(teploty), jeden z nich má aj merač vlhkosti)
Schéma zapojenia

Kód s komentármi k zapojeniu
Arduino môžete kontrolovať. Ako vidíte v kóde, to, čo sa odošle do internetu (ak vôbec) tak sa vypíše aj na sériovej linke. Nezabudnite na predefinovanú rýchlosť 9600. Prostredníctvom programu, ktorý podporuje UART, napríklad Putty je možné sledovať čo do internetu odišlo, aby ste vedeli, či máte pripojenie z Arduina aktívne. Odporúčam nastaviť IP napríklad na 192.168.1.254 kde nehrozí kolízia z rozsahu DHCP, ktorý je najčastejeiše 192.168.1.100-192.168.1.150. Nezabudnite, že pri čidlách DS18B20 je nutné použiť 4,7Kohm odpor pre možnosť využitia OneWire zbernice. Neoficiálne zdroje hovoria, že ak napojíte onewire na krútenú dvojlinku, tak je možné je využiť až na 300 metrov. Niečo o OneWire protokole si môžete prečítať TU: https://cs.wikipedia.org/wiki/1-Wire
Následuje aj server-side časť.
V scripte pre Arduino je add.php súbor, na ktorý sa robí požiadavka GET metódou cez ? (otáznik) kde napr: mojastranka.sk/meteostanica/index.php?temp1=20.34&temp2=21.88&hum1=47.58&pres1=1014.28 Takýto request môže byť uložený do databázy, ak je na PHP súbore nastavená metóda GET a na ňu je vytvorený MySQL request. Pre lepší výkon využívam súčasne najpoužívanejšie riešenie MySQLi. Súbor add.php je ošetrený pred prázdnym inputom, napríklad pri náhodnom otvorení stránky.






Týmto sme sa naučili, ako hodnoty do databázy dostať. S hodnotami môžete prostredníctvom kódu pracovať napríklad tak, že môžete vytvárať grafy (v mojom prípade JsCharts, či GoogleCharts) Jednoduchým predaním dát z PHP do JS kódu je možné vykresliť krásne stĺpcové grafy za obdobia, ktoré si sami zvolíte --> Dáte JS dáta iba za určitý časový úsek.
Vyhotovenie
V mojom prípade som zvolil krabičku od žiaroviek do auta, kde som umiestnil breadboard s čidlom DS18B20 (outdoor) + DHT12 + BMP280, na druhom breadborde (žltom) je umiestnený DS18B20 (indoor). Všetko je prepojené podľa schémy vyššie.


UPOZORNENIE NA ZÁVER: Ethernet Shield minimálne ten, ktorý som tu popísal W5100 nepodporuje HTTPS protokol. Jeho procesor nezvláda šifrovanie. Preto, ak chcete tento koncept vyskúšať, siahnite po HTTP hostingu. V prípade, že chcete testovať na HTTPS, zakúpte si Wifi Shield 101, alebo NodeMCU.
HTTPS hosting free: PHP5.sk --> doména 3. radu zdarma, teda vasastranka.php5.sk je to ale na HTTPS! Nepoužívať s Ethernet Shieldom W5100.
Pre HTTP vyskúšajte Endoru, alebo Hostinger, prípadne Studenthosting.
Pridávam aj knižnice: Ethernet.h, SPI.h je obsiahnutá v každom Arduino IDE od nainštalovania.
Heslo na stiahnutie je: arduino.sk
https://ulozto.sk/!pkxqIyTKu2uH/meteostanica-arduinosk-rar
Podporiť ma a prezrieť zaujímavé projekty môžete aj na: [url]arduino.php5.sk[/url]
Ahojte, prinášam vám projekt meteostanice, ktorý som vytvoril v niekoľkých variantách s využitím rozličných modulov a riešenie, ktoré sa mi zdalo najideálnejšie som sa rozhodol zverejniť
Čo je poslaním projektu? Čo sa naučím?
- monitorovať teploty v domácnosti (vonkajšiu i vnútornú)
- vlhkosť,
- atmosférický tlak
- uložiť namerané dáta do MySQL databázy cez .PHP súbor s Arduinom v režime Webclient a to v pravidelnom cykle HTTP requestom
Čo budeme na projekt potrebovať? -->

Arduino (UNO),

Ethernet Shield W5100,


2x DS18B20 (indoor a outdoor vyhotovanie),

DHT12 (meranie tlaku, odporúčam DHT22 je presnejší a meria vlhkosť až do 100%, tento čínsky len do 85%),

BMP280 alebo BME280 (meranie tlaku,(teploty), jeden z nich má aj merač vlhkosti)
Schéma zapojenia
Kód s komentármi k zapojeniu
- Kód: Vybrať všetko
#include <OneWire.h> //Onewire kniznica
#include <DallasTemperature.h> //knižnica senzorov DS18B20
#define ONE_WIRE_BUS 6 //definovany pin OneWire zbernice
OneWire oneWire(ONE_WIRE_BUS); //inicializacia pinu
DallasTemperature sensors(&oneWire); //priradenie ds18b20 senzorov na onewire zbernicu
#include <SPI.h> //SPI kniznica podporuje aj I2C pripojenia
#include <DHT12.h> //DHT12 kniznica chinese
#include "Adafruit_BMP280.h" //bmp280 kniznica s upravou na 0x76 adresu
#include <Ethernet.h> //wiznet w5100 kniznica
#define Hostname "Meno zariadenia v sieti" //hostname v sieti
Adafruit_BMP280 bmp; //inicializacia BMP senzora
DHT12 dht12; //inicializacia DHT12
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }; //MAC ADRESA
char server[] = "www.mojastranka.sk"; //adresa webservera, zapisujte s www
IPAddress ip(192, 168, 1, 100); //LAN IP ak zlyha DHCP
EthernetClient client; //SPUSTENIE ETHERNETU AKO CLIENTA //INICIALIZACIA SENZORU DHT12
void setup() {
sensors.begin(); //start senzorov ds18b20
bmp.begin(); //start snimaca BMP
Serial.begin(9600); //SPUSTENIE SERIOVEJ LINKY --UART-- NA CITACIU RYCHLOST 9600
while (!Serial) {
;
}
}
void loop() { //ZACIATOK SLUCKY
if (Ethernet.begin(mac) == 0) { //V PRIPADE ZLYHANIA NASTAVENIA MAC ADRESY VYPIŠ
Serial.println("Chyba konfiguracie cez DHCP"); //SERIOVY VYPIS CHYBY KONFIGURACIE DHCP
Ethernet.begin(mac, ip); //NASTAVENIE IP A MAC ADRESY PRE ETHERNET MODUL
}
if (client.connect(server, 80)) { // AK SA NAPOJI NA SERVER NA PORTE 80 (HTTP)
sensors.requestTemperatures(); //VYZIADANIE HODNOT ZO SENZOROV
Serial.println("Pripojenie uspesne na webserver"); //VYPIS NA SERIOVU LINKU
client.print("GET /add.php?temp1="); //ZAČIATOK HTTP REQUEST --> client.print GET METODOU s oznacenim premennej, do ktorej pridame hodnotu v URL
client.print(sensors.getTempCByIndex(0)); // VYPIS HODNOTY 1. SENZORU NA INDEXE 0 DO URL
client.print("&temp2="); //TEXTOVE DOPLNENIE DRUHEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL
client.print(sensors.getTempCByIndex(1)); // VYPIS HODNOTY 2. SENZORU NA INDEXE 1 DO URL
client.print("&hum1="); //TEXTOVE DOPLNENIE TRETEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL
client.print(dht12.readHumidity()); // VYPIS VLHKOMERU DO LINKU, HODNOTA, KTOREJ SA ROVNA PREMENNA HUM1
client.print("&pres1="); //TEXTOVE DOPLNENIE STVRTEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL
client.print((bmp.readPressure() / 100) + 30, 120481927710843373493975903614); // VYPIS BAROMETRA DO LINKU + PRIPOCITANA KONSTANTA NA ZAKLADE NADMORSKEJ VYSKY PRE SPRAVNY PREPOCET NA RELATIVNY TLAK
client.println(" HTTP/1.1"); // UKONCENIE REQUESTU ZALOMENIM RIADKA A DOPLNENIM HLAVICKY HTTP S VERZIOU
client.println("Host: www.mojastranka.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(); // UKONCENIE PRIPOJENIA ETHERNET SHIELDU
Serial.println("Odoslane hlavicky s datami: "); //SERIOVY VYPIS O STAVE USPESNOSTI PRENOSU
Serial.println("Teplota von: "); //SERIOVY VYPIS TEXT O TEPLOTE
Serial.println(sensors.getTempCByIndex(0)); //SERIOVY VYPIS STAV TEPLOTY NA SENZORE EVIDOVANOM NA INDEXE 0
Serial.println("Teplota dnu: "); //SERIOVY VYPIS TEXT O TEPLOTE
Serial.println(sensors.getTempCByIndex(1)); //SERIOVY VYPIS STAV TEPLOTY NA SENZORE EVIDOVANOM NA INDEXE 1
Serial.println("Vlhkost vzduchu: "); //SERIOVY VYPIS TEXT O VLHKOSTI VZDUCHU
Serial.println(dht12.readHumidity()); //SERIOVY VYPIS STAVU VLHKOSTI
Serial.println("Atmosfericky tlak: "); //SERIOVY VYPIS TEXT O TLAKU VZDUCHU
Serial.println((bmp.readPressure() / 100) + 30, 120481927710843373493975903614); //SERIOVY VYPIS STAVU RELATIVNEHO TLAKU 30,... je konstanta pre nadmorsku vysku, ktora sa prirata k teplote. (Použite pri nadmorskej do 1000m nadmorska vyska/8,3 tuto hodnotu napiste namiesto 30,...)
Serial.println("Odpojenie uspesne."); //SERIOVY VYPIS O STAVE USPESNOSTI PRENOSU
} else { // AK SA PRIPOJENIE NA SERVER NEPODARI
Serial.println("Pripojenie zlyhalo"); //SERIOVY VYPIS O NEUSPESNOSTI PRIPOJENIA --> ŽIADNY HTTP REQUEST NEBOL VYKONANY
}
delay(15000); //15 SEKUND PAUZA, slucka sa zopakuje
}
Arduino môžete kontrolovať. Ako vidíte v kóde, to, čo sa odošle do internetu (ak vôbec) tak sa vypíše aj na sériovej linke. Nezabudnite na predefinovanú rýchlosť 9600. Prostredníctvom programu, ktorý podporuje UART, napríklad Putty je možné sledovať čo do internetu odišlo, aby ste vedeli, či máte pripojenie z Arduina aktívne. Odporúčam nastaviť IP napríklad na 192.168.1.254 kde nehrozí kolízia z rozsahu DHCP, ktorý je najčastejeiše 192.168.1.100-192.168.1.150. Nezabudnite, že pri čidlách DS18B20 je nutné použiť 4,7Kohm odpor pre možnosť využitia OneWire zbernice. Neoficiálne zdroje hovoria, že ak napojíte onewire na krútenú dvojlinku, tak je možné je využiť až na 300 metrov. Niečo o OneWire protokole si môžete prečítať TU: https://cs.wikipedia.org/wiki/1-Wire
Následuje aj server-side časť.
V scripte pre Arduino je add.php súbor, na ktorý sa robí požiadavka GET metódou cez ? (otáznik) kde napr: mojastranka.sk/meteostanica/index.php?temp1=20.34&temp2=21.88&hum1=47.58&pres1=1014.28 Takýto request môže byť uložený do databázy, ak je na PHP súbore nastavená metóda GET a na ňu je vytvorený MySQL request. Pre lepší výkon využívam súčasne najpoužívanejšie riešenie MySQLi. Súbor add.php je ošetrený pred prázdnym inputom, napríklad pri náhodnom otvorení stránky.
Týmto sme sa naučili, ako hodnoty do databázy dostať. S hodnotami môžete prostredníctvom kódu pracovať napríklad tak, že môžete vytvárať grafy (v mojom prípade JsCharts, či GoogleCharts) Jednoduchým predaním dát z PHP do JS kódu je možné vykresliť krásne stĺpcové grafy za obdobia, ktoré si sami zvolíte --> Dáte JS dáta iba za určitý časový úsek.
Vyhotovenie
V mojom prípade som zvolil krabičku od žiaroviek do auta, kde som umiestnil breadboard s čidlom DS18B20 (outdoor) + DHT12 + BMP280, na druhom breadborde (žltom) je umiestnený DS18B20 (indoor). Všetko je prepojené podľa schémy vyššie.


UPOZORNENIE NA ZÁVER: Ethernet Shield minimálne ten, ktorý som tu popísal W5100 nepodporuje HTTPS protokol. Jeho procesor nezvláda šifrovanie. Preto, ak chcete tento koncept vyskúšať, siahnite po HTTP hostingu. V prípade, že chcete testovať na HTTPS, zakúpte si Wifi Shield 101, alebo NodeMCU.
HTTPS hosting free: PHP5.sk --> doména 3. radu zdarma, teda vasastranka.php5.sk je to ale na HTTPS! Nepoužívať s Ethernet Shieldom W5100.
Pre HTTP vyskúšajte Endoru, alebo Hostinger, prípadne Studenthosting.
Pridávam aj knižnice: Ethernet.h, SPI.h je obsiahnutá v každom Arduino IDE od nainštalovania.
Heslo na stiahnutie je: arduino.sk
https://ulozto.sk/!pkxqIyTKu2uH/meteostanica-arduinosk-rar
Podporiť ma a prezrieť zaujímavé projekty môžete aj na: [url]arduino.php5.sk[/url]
Naposledy upravil martinius96 dňa Sob 21. Okt 2017 22:42:56, celkovo upravené 4
Re: Meteostanica - Webclient
Celkom pekny projektik.
O meteostanicu sa snazim dlho len okrem toho aj ine veci.
Inak pouzivam cinsku nahradu za ethernetshield ENC28J60 ci ako sa to vola a volanie stranky na update som mal pekne zbuchane do jedneho riadku
Inak ked to updatujes kazdych 15s je dajak dost casto, db sa hodne rychlo plni co
Podla mna zbytocnost tie hodnoty sa asi velmi nemenia asi to nema zmysel tak casto aktualizovat.
O meteostanicu sa snazim dlho len okrem toho aj ine veci.
Inak pouzivam cinsku nahradu za ethernetshield ENC28J60 ci ako sa to vola a volanie stranky na update som mal pekne zbuchane do jedneho riadku

Inak ked to updatujes kazdych 15s je dajak dost casto, db sa hodne rychlo plni co

Podla mna zbytocnost tie hodnoty sa asi velmi nemenia asi to nema zmysel tak casto aktualizovat.
- martinius96
- Príspevky: 44
- Registrovaný: Uto 23. Dec 2014 2:15:50
Re: Meteostanica - Webclient
Ahoj, Ďakujem za odpoveď, už som myslel, že je toto forum totálne dead. Princíp je jednoduchý, bolo to pre školský projekt, tak tam bolo treba, aby videli, že sa to mení a napĺňa
Nevýhoda u Wiznetu W5100 je, že nepodporuje šifrovanie. Čo ten tvoj? Neprehrieva sa?

- martinius96
- Príspevky: 44
- Registrovaný: Uto 23. Dec 2014 2:15:50
Re: Meteostanica - Webclient
Ahoj, Ďakujem za odpoveď, už som myslel, že je toto forum totálne dead. Princíp je jednoduchý, bolo to pre školský projekt, tak tam bolo treba, aby videli, že sa to mení a napĺňa
Nevýhoda u Wiznetu W5100 je, že nepodporuje šifrovanie. Čo ten tvoj? Neprehrieva sa?

Re: Meteostanica - Webclient
Neviem o tom zeby bolo na arduino nieco co by podporovalo sifrovanie.
To by muselo byt nieco vykonnejsie.
Standardne ti to ani netreba. Jediny dovod kedy by som to potreboval, je ked potrebujem tlacit data na InitialState.
To by muselo byt nieco vykonnejsie.
Standardne ti to ani netreba. Jediny dovod kedy by som to potreboval, je ked potrebujem tlacit data na InitialState.
- martinius96
- Príspevky: 44
- Registrovaný: Uto 23. Dec 2014 2:15:50
Re: Meteostanica - Webclient
Wifi shield 101 podporuje vraj a určite podporuje ten od Wemosu s ESP8266
Ja mám napr freehosting u php5.sk a oni prešli na Https aj na subdomenach. Nejde to zmeniť tak som musel hľadať iné riešenie a tým bolo NodeMCU 


- martinius96
- Príspevky: 44
- Registrovaný: Uto 23. Dec 2014 2:15:50
Re: Meteostanica - Webclient
Update: 14.12.2017 na Github aktualizované súbory, ošetrené vstupy do SQL databázy pred "zlými hodnotami". Menšie úpravy v súboroch.
Github: https://github.com/martinius96/Meteostanica
Github: https://github.com/martinius96/Meteostanica
Príspevkov: 7
• Stránka 1 z 1