blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDUJETE BLOG
Programátor
deadawp



Meteostanica s Arduinom a Ethernet Shieldom - HTTP
pridal deadawp 31.8. 2017 o 23:52



Dnes vám predstavím môj prvý komplexnejší projekt meteostanice, ktorá dokáže odosielať namerané dáta do internetu. 
Prostredníctvom Arduina a Ethernet shieldu sa naučíme do internetu odosielať hodnoty o teplote, ktoré si vieme rozlíšiť od rovnakých senzorov indexom, zapisovať merania tlaku vzduchu a vlhkosti.
 
Čo sa naučím?

  • monitorovať teploty v domácnosti
  • monitorovať vlhkosť
  • monitorovať atmosférický tlak
  • zapisovať hodnoty do MySQL databázy cez PHP kód v periodickom cykle


Čo budem na vyhotovenie potrebovať?

  • Arduino Uno
  • Ethernet Shield W5100
  • 2x DS18B20 (vonkajšie i vnútorné vyhotovenie) 
  • DHT12 (meranie vlhkosti)
  • BMP280(meranie atmosférického tlaku)
  • 4,7Kohm odpor
  • Webstránku s MySQL databázou



Schéma zapojenia:


Senzory DS18B20 sú teplomery od firmy Dallas (Maxim), ktoré sú vo vyhotovení s plastovou hlavičkou alebo aj vodotesne v hliníkovej trubičke, kde je v skutočnosti takýto senzor iba vložený. Nakoľko je toto vyhotovenie vodotesné, je vhodné ho umiestniť aj do vonkajších podmienok, priamo do vody, či do pôdy bez akéhokoľvek rizika skratu po zaliatí vodou či podobne. Senzory pracujú  v rozmedzí teplôt -55°C až 125°C. Najpresnejšie meranie garantuje výrobca medzi -10°C až 85°C, pri tomto meraní je odchýlka +-0,5°C. Pracovné napätie pre DS18B20 je 3,3V, alebo 5V.

Pri napájaní na 5V sa tieto senzory jemne ohrievajú, čo môže znepresniť meranie nad stanovenú odchýlku. Senzory sú najobľúbenejšie na takýto účel najmä cenou, ale i zaujímavosťou v podobe OneWire protokolu. Ako už názov napovedá, OneWire bude používať jeden drôt. V skutočnosti jedným drôtom tečie prúd i dáta (druhým drôtom samozrejme prepojíme zeme). Na jednom pine Arduina sa údaje čítajú od viacerých senzorov zároveň. Sú teda zapojené na jeden kábel OneWire! Táto zbernica komunikuje pomalšie, rýchlosťou 16kbps, no zato môže rozoznať a prijímať údaje až od 2na56 zariadení. OneWire protokol je možné použiť i po vodičoch krútenej dvojlinky. Niektoré zdroje hovoria, že po krútenej dvojlinke funguje OneWire až na 300 metrov! Nezabudnite využiť 4,7kΩ odpor pri zapojení.

Každý senzor má svoj port, aby nedošlo ku kolízii, či zlému odpísaniu dát, teda ním môžeme jednoznačne identifikovať každý senzor v zapojení. Všetky majú index, ktorý je číslovaný od 0. Preto si starostlivo skontrolujte, z ktorého senzora teploty sa hodnota zaznamenáva, napríklad priložením prstov na senzor  pre výraznejšiu zmenu teploty. Existujú aj príklady .ino súborov, ktoré dokážu vypísať všetky zariadenia zaznamenané na tejto zbernici. V zapojení je nutné využiť zbernicu I2C pre prečítanie analógových vstupov zo senzorov pre tlak vzduchu a pre vlhkosť vzduchu. Existuje niekoľko druhov DHT senzorov, ktoré sa líšia rozsahom merania vlhkosti. Ak by som to vedel pred nákupom, siahol by som určite po DHT22, ktorý dokáže merať vlhkosť od 0% až do 100%. 


DHT12 je lacnejší variant, ktorý umožňuje merať vlhkosť vzduchu v rozsahu 20% až 95% s odchýlkou 1%. Tieto senzory dokážu merať aj teplotu, no túto možnosť som nevyužil z dôvodu využitia OneWire senzorov. Pracovné napätie senzora je 5V. Senzor obsahuje 4 nožičky, teda napájanie, zem, SCK a SCL. Sú to SPI piny, v skratke sa jedná o piny rozhrania, ktoré sa pripájajú na SCK a SCL piny Arduina. Každé Arduino má svoje SCK a SCL piny iné! Arduino UNO má SCK a SCL na pinoch A4 a A5. V prípade iného modelu sa to môže líšiť.

Meranie tlaku je realizované senzorom BMP280. Senzor BMP280 využíva taktiež I2C zbernicu pre odosielanie analógových informácií o tlaku vzduchu. Jeho pracovné napätie je 5V, obsahuje viac výstupov, ale taktiež ako aj pri DHT12 využíva iba 4. Senzor okrem tlaku vie merať aj nadmorskú výšku a teplotu. Zaujímavým faktorom bol prepočet absolútneho tlaku vzduchu na relatívny. Absolútny tlak vzduchu je tlak vzduchu nameraný vo vašej oblasti, vo vašej výške nad morom. Pri skúmaní na internetových fórach mi používateľ fóre Svetelektro poradil, že takýto prepočet je možné uskutočniť metódou, ktorá je spoľahlivá do výšky 1000 metrov nad morom.

K absolútnemu tlaku pridáme číslo nadmorská výška/8,3. Táto konštanta pre našu výšku zaručí, že tlak, ktorý bude nameraný sa zobrazí (nahraje na webserver) už prepočítaný na relatívny tlak. Inými slovami je to náš tlak na hladine mora. Orientačná hodnota priemeru je 1013,25HPa. Počasie v televízii využíva dokonalejšie metódy, ale taktiež je tlak prevedený na relatívny, čo umožňuje lepšiu predstavivosť, ako keby sme mali uvažovať o tlaku 984HPa. Laik by si myslel, že takýto tlak je veľmi nízky, no po prepočte na relatívny tlak je táto hodnota 1016 HPa, čo znamená veľmi pekné počasie, s nízkou pravdepodobnosťou zmeny/zrážok.
Kód je zakomentovaný pre lepšiu predstavivosť čo a ako funguje.

Kód programu:

  1. #include                  //KNIZNICA ONEWIRE PRE VYUZITIE ONEWIRE ZBERNICE  
  2. #include        //KNIZNICA PRE TEPLOTNE CIDLA  
  3. #define ONE_WIRE_BUS 6               //DEFINICIA PINU AKO ZBERNICE PRE ONEWIRE ZARIADENIA  
  4. OneWire oneWire(ONE_WIRE_BUS);       //ONEWIRE ČÍTAŤ IBA NA PORTE DEFINOVANOM VYSSIE  
  5. DallasTemperature sensors(&oneWire); //PRIRADENIE SENZOROV DALLAS DS18B20 NA ONEWIRE ZBERNICU  
  6. #include                      //KNIZNICA SPI.H, PODPORUJE AJ I2C PRIPOJENIA  
  7. #include                    //KNIŽNICA NA SENZOR DHT12 PRE ZAZNAM VLHKOSTI  
  8. #include "Adafruit_BMP280.h"         //LOKALNA KNIZNICA SENZORA BMP  
  9. #include                 //KNIZNICA ETHERNET.H PRE MOZNOST VYUZITIA ETHERNET SHIELDU  
  10. #define Hostname "Arduino"            //DEFINICIA MENA V SIETI  
  11. Adafruit_BMP280 bmp;                 // BMP280 NA ZBERNICI I2C  
  12. byte mac[] = { 0x34, 0x64, 0xA9, 0x15, 0xFD, 0x04 };            //MAC ADRESA --> VOLITELNA  
  13. char server[] = "www.hostserver.domain";      //ADRESA WEBSERVERA (MOZE BYT AJ IP ADRESA)  
  14. IPAddress ip(192, 168, 2, 25);                               //IP ADRESA ZARIADENIA V SIETI V LOKALNEJ SIETI  
  15. EthernetClient client;                                          //SPUSTENIE ETHERNETU AKO CLIENTA  
  16. int ledpripojenie = 8;                                          //DIODA S MENOM LEDPRIPOJENIE NA PINE 8  
  17. int ledodosielanie = 9;                                         //DIODA S MENOM LEDODOSIELANIE NA PINE 8  
  18. DHT12 dht12;                                                    //INICIALIZACIA SENZORU DHT12  
  19. void setup() {                                                  //FUNKCIA NA DEFINICIU VSTUPOV A VYSTUPOV ZAPNUTIE  
  20.   pinMode(ledpripojenie, OUTPUT);                               //NASTAVENIE PINU NA VÝSTUP  
  21.   pinMode(ledodosielanie, OUTPUT);                              //NASTAVENIE PINU NA VÝSTUP  
  22.   sensors.begin();                                              //START SENZOROV POD ONEWIRE (DALLASTEMPERATURE)  
  23.   bmp.begin();                                                  //SPUSTENIE SNIMACA BMP280  
  24.   delay(2000);                                                  //POZDRZANIE PROGRAMU 2 SEKUNDY POKYM SA INICIALIZUJE BMP280 a SENZORY  
  25.   Serial.begin(9600);                                           //SPUSTENIE SERIOVEJ LINKY NA CITACIU RYCHLOST 9600  
  26.   while (!Serial) {  
  27.     ;                                                           //CAKA POKYM SA SERIOVY PORT NEZAPNE  
  28.   }  
  29.   
  30.   
  31.   
  32. }  
  33.   
  34. void loop() {                                      //ZACIATOK SLUCKY, FUNKCIA TYPU VOID, KTORÁ SA VYKONÁVA DONEKONECNA  
  35.   
  36.   if (Ethernet.begin(mac) == 0) {                  //V PRIPADE ZLYHANIA NASTAVENIA MAC ADRESY VYPIŠ  
  37.     Serial.println("Chyba konfiguracie cez DHCP"); //SERIOVY VYPIS CHYBY KONFIGURACIE DHCP  
  38.     Ethernet.begin(mac, ip);                       //NASTAVENIE IP A MAC ADRESY PRE ETHERNET MODUL  
  39.   }  
  40.   for (int i = 0; i < 4; i++) {                   //CYKLUS FOR, VYKONA SA 4-KRAT S BLIKANIM LED DIODY (IMITACIA PRIPAJANIA NA WEBSERVER)  
  41.     digitalWrite(ledpripojenie, HIGH);            // STAV 1 PRE LED DIODU (SVIETI)  
  42.     delay(150);                                   // POZDRZANIE STAVU NA 150ms  
  43.     digitalWrite(ledpripojenie, LOW);             // STAV 0 PRE LED DIODU (NESVIETI)  
  44.     delay(150);  
  45.   }                                               // POZDRZANIE STAVU NA 150ms  
  46.   if (client.connect(server, 80)) {               // AK SA NAPOJI NA SERVER NA PORTE 80 (HTTP)  
  47.     digitalWrite(ledpripojenie, HIGH);            // STAV 1 PRE LED DIODU - cervenu - indikacia pripojenia (SVIETI)-stav akivny  
  48.     sensors.requestTemperatures();                //VYZIADANIE HODNOT ZO SENZOROV  
  49.     Serial.println("Pripojenie uspesne na webserver"); //VYPIS NA SERIOVU LINKU  
  50.     client.print("GET /add.php?temp1=");         //ZAČIATOK HTTP REQUEST --> client.print GET METODOU s oznacenim premennej, do ktorej pridame hodnotu v URL  
  51.     client.print(sensors.getTempCByIndex(0));    // VYPIS HODNOTY 1. SENZORU NA INDEXE 0 DO URL  
  52.     client.print("&temp2=");                     //TEXTOVE DOPLNENIE DRUHEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL  
  53.     client.print(sensors.getTempCByIndex(1));    // VYPIS HODNOTY 2. SENZORU NA INDEXE 1 DO URL  
  54.     client.print("&hum1=");                      //TEXTOVE DOPLNENIE TRETEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL  
  55.     client.print(dht12.readHumidity());          // VYPIS VLHKOMERU DO LINKU, HODNOTA, KTOREJ SA ROVNA PREMENNA HUM1  
  56.     client.print("&pres1=");                     //TEXTOVE DOPLNENIE STVRTEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL  
  57.     client.print((bmp.readPressure() / 100) + 30, 120481927710843373493975903614); // VYPIS BAROMETRA DO LINKU + PRIPOCITANA KONSTANTA NA ZAKLADE NADMORSKEJ VYSKY PRE SPRAVNY PREPOCET NA RELATIVNY TLAK  
  58.     client.println(" HTTP/1.1");                 // UKONCENIE REQUESTU ZALOMENIM RIADKA A DOPLNENIM HLAVICKY HTTP S VERZIOU  
  59.     client.println("Host: www.hostserver.domain"); // ADRESA HOSTA, NA KTOREHO BOL MIERENY REQUEST (NIE PHP SUBOR)  
  60.     client.println("Connection: close");         //UKONCENIE PRIPOJENIA ZA HTTP HLAVICKOU  
  61.     client.println();                            //ZALOMENIE RIADKA KLIENTSKEHO ZAPISU  
  62.   
  63.     for (int i = 0; i < 3; i++) {                 //CYKLUS FOR, VYKONA SA 3-KRAT S BLIKANIM LED DIODY MODREJ (IMITACIA ODOSLANIA HTTP REQUESTU S HODNOTAMI)  
  64.       digitalWrite(ledodosielanie, HIGH);        // STAV 1 PRE LED DIODU (SVIETI)  
  65.       delay(400);                                // POZDRZANIE STAVU NA 400ms  
  66.       digitalWrite(ledodosielanie, LOW);         // STAV 0 PRE LED DIODU (NESVIETI)  
  67.       delay(150);  // POZDRZANIE STAVU NA 150ms  
  68.   
  69.     }  
  70.     client.stop();                                   // UKONCENIE PRIPOJENIA ETHERNET SHIELDU  
  71.     Serial.println("Odoslane hlavicky s datami: ");  //SERIOVY VYPIS O STAVE USPESNOSTI PRENOSU  
  72.     Serial.println("Teplota von: ");                 //SERIOVY VYPIS TEXT O TEPLOTE  
  73.     Serial.println(sensors.getTempCByIndex(0));      //SERIOVY VYPIS STAV TEPLOTY NA SENZORE EVIDOVANOM NA INDEXE 0  
  74.     Serial.println("Teplota dnu: ");                 //SERIOVY VYPIS TEXT O TEPLOTE  
  75.     Serial.println(sensors.getTempCByIndex(1));      //SERIOVY VYPIS STAV TEPLOTY NA SENZORE EVIDOVANOM NA INDEXE 1  
  76.     Serial.println("Vlhkost vzduchu: ");             //SERIOVY VYPIS TEXT O VLHKOSTI VZDUCHU  
  77.     Serial.println(dht12.readHumidity());            //SERIOVY VYPIS STAVU VLHKOSTI  
  78.     Serial.println("Atmosfericky tlak: ");           //SERIOVY VYPIS TEXT O TLAKU VZDUCHU  
  79.     Serial.println((bmp.readPressure() / 100) + 30, 120481927710843373493975903614); //SERIOVY VYPIS STAVU RELATIVNEHO TLAKU  
  80.     digitalWrite(ledpripojenie, LOW);                // STAV 0 PRE LED DIODU (NESVIETI) - stav sa prepne okamzite a je aktivny po dobu neurcitu, nie je definovany delay. --> cervena LED  
  81.     digitalWrite(ledodosielanie, LOW);               // STAV 0 PRE LED DIODU (NESVIETI) - stav sa prepne okamzite a je aktivny po dobu neurcitu, nie je definovany delay. --> modra LED  
  82.     Serial.println("Odpojenie uspesne.");            //SERIOVY VYPIS O STAVE USPESNOSTI PRENOSU  
  83.   } else {                                           // AK SA PRIPOJENIE NA SERVER NEPODARI  
  84.     Serial.println("Pripojenie zlyhalo");            //SERIOVY VYPIS O NEUSPESNOSTI PRIPOJENIA --> ŽIADNY HTTP REQUEST EBOL VYKONANY  
  85.   }  
  86.   
  87.   delay(15000); //20 SEKUND PAUZA POKYM NANOVO POBEZI SLUCKA PRE NOVE PRIPOJENIE  
  88. }  



Ako vidíte v kóde, teploty je možné monitorovať online, ale aj cez sériový port. Vidíte, aké údaje sa odosielajú a na základe toho je možné vedieť, či bol prenos úspešný. Nezabudnite na rýchlosť čítania 9600 Bd! Prenos je realizovaný cez PHP kód. PHP kód beží na webe a dokáže do databázy vložiť nami namerané údaje prostredníctvom vopred pripraveného súboru, ktorý očakáva vstup metódou GET priamo v linku stránky. Nižšie v obsahu súboru add.php môžete vidieť, že server očakáva hodnoty pre tieto premenné: temp1, temp2, pres1, hum1.

Pri metóde GET je požiadavka na stránku zadaná priamo do linku, čo má svoje výhody i nevýhody. Na jednu stranu vidíme, čo do databázy vkladáme, no na druhú je možné, že neoprávnená osoba/počítač začne stránku spúšťať, či zadávať klamlivé informácie. Stránku je teda nutné ošetriť tak, aby boli ošetrené všetky vstupy. Musíme očakávať číselné premenné s desatinnou čiarkou. Odporúčam doprogramovať aj kontrolu vstupu z hľadiska hodnoty. Senzory DS18B20 pri odpojení/poškodení/nesprávnom zapojení odosielajú na zbernicu hodnotu -127°C, čo má za následok to, že všetky grafy to veľmi pozmení, nehovoriac o ročných priemeroch, či vykreslených grafoch. Pri správnom zapojení, ale nedostatočnom vyčkaní na prečítanie hodnoty z čidla sa bude na server odosielať hodnota -85°C.

Na odosielanie informácii, teda nameraných hodnôt do internetu nám nepostačí klasické Arduino. Potrebujeme hardvérovú nadstavbu v podobe Ethernet Shieldu, v našom prípade Wiznet W5100, ktorý je vyhotovený veľkosťou, i pinmi priamo na Arduino UNO, Mega, jednoducho sa doň zasunie. Ako názov napovedá, bude to niečo, čo sa bude pripájať do internetu cez Ethernet rozhranie, teda cez RJ45 konektor. Ethernet shield vyzerá na prvý pohľad ako Arduino, no má na sebe iba čipy a konektory pre sieťovú komunikáciu. Podporuje plne TCP a UDP protokol, nehodí sa však na šifrovanie. Vôbec nepodporuje HTTPS protokol. Pozor nato pri napájaní na stránku.

Nakoľko HTTPS nepodporuje, tak ho samotný protokol odmietne cez (connection refused).  Všetky údaje s Ethernet shieldom začínajú v kóde premennou Ethernet, alebo priamo s Ethernetom súvisia. Ethernet Shield umožňuje zmeniť napríklad MAC adresu, IP adresu, meno Ethernet Shieldu v sieti. Všetky tieto informácie sú priamo v kóde. Všetky tieto informácie sú definované nad setupom. Mnoho poskytovateľov hostingu umožňuje si registrovať doménu III. radu úplne zdarma. Napríklad mojadomacnost.hostingspolocnost.sk. Medzi najznámejších poskytovateľov takéhoto hostingu patrí: PHP5.sk, hostinger.sk, studenthosting.sk, endora.cz.

Po registrácii webu môžete jeho obsah upravovať pridaním súborov priamo do neho. Toto sa realizuje cez FTP protokol. Musíte si nainštalovať FTP klienta, s ktorým budete môcť zadávať tieto informácie na internet. Najznámejšie sú: TotalCommander, Filezilla. Informácie o vašom webe, teda prihlasovacie meno a heslo nájdete najčastejšie vo vašom profile po registrácii domény u spoločnosti, ktorá poskytuje hosting. Po prihlásení s vašimi údajmi môžete nahrávať do vášho web priestoru súbory. Je to možné veľmi ľahko, po vytvorení súboru ho pretiahnete myšou do zložky webservera, automaticky sa za počkaním nahrá. Tieto súbory sú veľmi malé, teda sa nahrajú v priebehu pol sekundy i menej. Poďme sa teda pozrieť, ako bude vyzerať backend (časť, ktorú používateľ nevidí, spracúvávajú sa v nej dáta) PHP časť na webserveri.

Vytvoríme si súbor Add.php, bude vyzerať následovne(obsah):

 



Súbor connect.php slúži na pripojenie k databáze a vyzerá takto:

  include ("connect.php");
  $temp1 = mysqli_real_escape_string($con, $_GET['temp1']);
  $t2 = mysqli_real_escape_string($con, $_GET['tempinside']);
  $p = mysqli_real_escape_string($con, $_GET['pressure']);
  $h = mysqli_real_escape_string($con, $_GET['humidity']);
  if($temp1== "" || $t2=="" || $p=="" || $h=="" || $temp1== 0 || $t2==0 || $p==0 || $h==0 || $temp1< -40 || $t2< -40 || $temp1>50 || $t2>50 || $p>1050 || $p
  echo 'Zabránenie nesprávnemu typu/hodnote dát uložiť sa do databázy!';
  }
  else{
  $ins = mysqli_query($con,"INSERT INTO `TempOutside` (`temperature`) VALUES ('".$temp1."')") or die (mysqli_error($con));
  $ins2 = mysqli_query($con,"INSERT INTO `TempLivingRoom` (`temperature`) VALUES ('".$t2."')") or die (mysqli_error($con));
  $ins3 = mysqli_query($con,"INSERT INTO `PressureOutside` (`pressure`) VALUES ('".$p."')") or die (mysqli_error($con));
  $ins4 = mysqli_query($con,"INSERT INTO `Humidity` (`humidity`) VALUES ('".$h."')") or die (mysqli_error($con));
  }
  ?>

 

  1. header('Content-Type: text/html; charset=utf-8');   
  2. $con = mysqli_connect("localhost","pouzivatelskemeno","heslo","nazovdatabazy(nie tabulky)");  
  3.      mysqli_set_charset($con,"utf8");  
  4.        
  5. if (mysqli_connect_errno())  
  6.   {  
  7.   echo "Problém s napojením na MySQL: " . mysqli_connect_error();  
  8.   }  
  9. ?>  




    Teraz je nutné vytvoriť 4 tabuľky v MySQL databáze. Budú vyzerať takto:
    (čiarkou sú oddelené jednotlivé stĺpce tabuľky Nazov – polozka, polozka, polozka, polozka)
    Tabuľka TempOutside - ID (A_I & PRIMARY KEY), temperature, time (typu TIMESTAMP UPDATE ON REQUEST)
    Tabuľka TempLivingRoom - ID (A_I & PRIMARY KEY), temperature, time (typu TIMESTAMP UPDATE ON REQUEST)
    Tabuľka PressureOutside - ID (A_I & PRIMARY KEY), pressure, time (typu TIMESTAMP UPDATE ON REQUEST)
    Tabuľka Humidity - ID (A_I & PRIMARY KEY), humidity, time (typu TIMESTAMP UPDATE ON REQUEST)
    Tento postup vám zaručí kompletné odoslanie hodnôt z Arduina do MySQL databázy cez PHP súbor. Následne môžete navrhnúť stránku a hodnoty vypisovať a rátať medzi nimi prepočty pre maximálne teploty dňa, roka, priemerné záznamy, filtrovať záznamy a vykonávať s nimi rôzne ďalšie operácie. 


    Stránka môže vyzerať napríklad takto:
    Pri vytváraní webstránky by chcel každý používateľ vykresľovať namerané hodnoty do prehľadných grafov. Grafy je možné vytvoriť, ak nato máte znalosti, alebo použiť riešenie tretích strán. Odporúčam Google Graphs, Js Graphs, Charts.js či iné Javascriptové nástroje na tvorbu grafov. Grafy sú predpripravené a je nutné odovzdať im dáta z databázy a to PHP kódom, inými slovami vždy pri načítaní stránky sa údaje aktualizujú a na základe toho sa vykreslí graf. Ak raz za 10 sekúnd nahráte do databázy novú teplotu, pri otvorenej stránke túto teplotu v grafe neuvidíte. Pri opätovnom nainštalovaní stránky už áno, nakoľko sa všetky posledné údaje predali Javascriptu, ktorý ich vykreslil. 





    Vyhotovenie:
    Všetky meracie prístroje pre vonkajšie použitie môžete umiestniť do škatule, kde môžu byť chránené pred poveternostnými vplyvmi, respektíve je to aj vec, ktorá skryje kabeláž. Nechajte pracovať vašu fantáziu.


    Na záver (opakovanie):
    Arduino musí byť v režime Webclient! Pripája sa do internetu, nie je webserverom. Ethernet shield Wiznet W5100 nepodporuje HTTPS prenos, iba HTTP. Zvážiť to pri výbere hostingu. Pri použití freehostingu väčšinou nemôžete určiť, na akom protokole vaša doména tretieho radu funguje. V prípade, že sa dostanete na HTTPS musíte použiť nejaký iný shield, napríklad Wifi, ktorý HTTPS podporuje a taktiež aj HTTP. Je ho možné napojiť a web ale i na subdoménu webu. Potrebné knižnice pripájam v súbore, ktorý je na stránke uložto! LINK. Heslo na stiahnutie je: arduino.sk 
    V prípade, ak by ste mali záujem o stránku (template s predkódovanými PHP funkciami), kontaktujte ma prosím do SS, alebo do komentára.

    Nová verzia
    Po roku od tejto meteostanice som sa rozhodol vylepšiť a vytvoril som nové webové rozhranie, využil som iný systém pre grafickú reprezentáciu nameraných dát, zdokonalil som systém pre predikciu počasia (predpoveď). Využil som dynamické zmeny dát s využitím AJAX-ových volaní PHP scriptov, zvýšil som bezpečnosť preberaných dát.  Funkcionalitou je takmer totožná s pôvodnou verziou.

    Webaplikácia je dostupná pre Arduino, ESP8266, ESP32. Ako periférie je možné využiť dvojkombináciu BME280 + 2x DS18B20 na OneWire zbernici. Prípadne trojkombináciu BMP280 + DHT22 + DS18B20.

    Schéma zapojenia pre Arduino + Ethernet W5100/W5500 + DHT22 + BMP280 + DS18B20:

    Schéma zapojenia pre Arduino + Ethernet W5100/W5500 + BME280 + 2x DS18B20:

Meteostanica verzie 2 prešla koncom roka 2020 pod free verziu. Projekt je možné plne zdarma využívať v rámci MIT licencie. Repozitár projektu: https://github.com/martinius96/Meteostanica-Arduino-ESP



Prístupov 10604
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Oplatí sa teplovodivá pasta z Aliexpress...
[ 4.4.2024] (príspevkov 0)
Recenzia 3D podznačky BEZ KOMPRESE
[ 4.4.2024] (príspevkov 0)
GTA IV fix spustenia na Windowse 10 N
[ 24.3.2024] (príspevkov 0)
RFID DOMINATOR licencia na predaj
[ 4.1.2024] (príspevkov 0)
ATtiny85 Digispark - programovanie, použ...
[ 28.12.2023] (príspevkov 0)
Prečo by som si už nekúpil ESPD-35 2.0 /...
[ 26.12.2023] (príspevkov 0)
ATtiny85 - programovanie Arduino as ISP
[ 19.12.2023] (príspevkov 0)
MasterTherm - webscraper ESP32
[ 25.11.2023] (príspevkov 0)
RFID DOMINATOR 2.0 - rozdiely s 1.0
[ 15.11.2023] (príspevkov 0)
Rozšírená realita (AR) - IoT dashboard
[ 29.10.2023] (príspevkov 0)