[ Príspevok: 1 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.02.14
Prihlásený: 11.04.21
Príspevky: 436
Témy: 189 | 189
Bydlisko: Poprad

Keď potrebujeme využiť potenciál Arduina naplno v režime konektivity, máme 2 možnosti. Urobiť si webserver z Arduina, alebo odosielať dáta do internetu, čo nám Arduino značne odľahčí. Tento tutoriál obsahuje sketche, ktoré sa používajú na odosielanie dát do internetu cez HTTP, HTTPS protokol, režim odosielania môžeme nazvať Webclient mód, alebo jednoducho client, kedy sa pripájame k vzdialenému serveru. Všetky vzorové sketche budú konštruované pre odosielanie a spracovanie 2x teploty z čidiel DS18B20, vlhkosti z DHT12, atmosferický tlak pre BMP280. Na spracovanie výsledku na strane webservera použijeme jazyk PHP v procedurálnom prevedení.
Tutoriál pre Arduino (Ethernet shield Wiznet W5100 - podpora iba HTTP):
Odosielanie dát do internetu Ethernet a Wifi, spracovanie
Kód:
#include <OneWire.h>                 //KNIZNICA ONEWIRE PRE VYUZITIE ONEWIRE ZBERNICE
#include <DallasTemperature.h>       //KNIZNICA PRE TEPLOTNE CIDLA DS18B20
#define ONE_WIRE_BUS 6               //DEFINICIA PINU AKO ZBERNICE PRE ONEWIRE ZARIADENIA.. TU ZBIERAME UDAJE
OneWire oneWire(ONE_WIRE_BUS);       //ONEWIRE ČÍTAŤ IBA NA PORTE DEFINOVANOM VYSSIE
DallasTemperature sensors(&oneWire); //PRIRADENIE SENZOROV DALLAS DS18B20 NA ONEWIRE ZBERNICU
#include <SPI.h>                     //KNIZNICA SPI.H, PODPORUJE AJ I2C PRIPOJENIA PRE BMP280
#include <DHT12.h>                   //KNIŽNICA NA SENZOR DHT12 PRE ZAZNAM VLHKOSTI
#include <Ethernet.h>                //KNIZNICA ETHERNET.H PRE MOZNOST VYUZITIA ETHERNET SHIELDU
#define Hostname "Meno zariadenia v sieti"            //DEFINICIA MENA V SIETI
Adafruit_BMP280 bmp;                 // BMP280 NA ZBERNICI I2C
#include <Adafruit_Sensor.h>
#include "Adafruit_BMP280.h"         //LOKALNA KNIZNICA SENZORA BMP
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };            //MAC ADRESA --> VOLITELNA
char server[] = "www.mojastranka.sk";      //ADRESA WEBSERVERA (MOZE BYT AJ IP ADRESA, AK NEVYUZIVA DNS)
IPAddress ip(192, 168, 1, 100);                               //IP ADRESA ZARIADENIA V SIETI V LOKALNEJ SIETI
EthernetClient client;                                          //SPUSTENIE ETHERNETU AKO CLIENTA
DHT12 dht12;                                                    //INICIALIZACIA SENZORU DHT12
void setup() {                                                  //FUNKCIA NA DEFINICIU VSTUPOV A VYSTUPOV ZAPNUTIE
  sensors.begin();                                              //START SENZOROV POD ONEWIRE (DALLASTEMPERATURE)
  bmp.begin();                                                  //SPUSTENIE SNIMACA BMP280
  delay(2000);                                                  //POZDRZANIE PROGRAMU 2 SEKUNDY POKYM SA INICIALIZUJE BMP280 a SENZORY
  Serial.begin(9600);                                           //SPUSTENIE SERIOVEJ LINKY NA CITACIU RYCHLOST 9600
  while (!Serial) {
    ;                                                           //CAKA POKYM SA SERIOVY PORT NEZAPNE
  }



}

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("&tempinside=");                     //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("&humidity=");                      //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("&pressure=");                     //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 POKYM NANOVO POBEZI SLUCKA PRE NOVE PRIPOJENIE A ODOSLANIE DALSICH HODNOT
}

Pri pripojení prostredníctvom wifi môžeme použiť shield pre Arduino, alebo dosku s integrovaným čipom ESP8266 (NodeMCU), alebo samostatný ESP čip.

Sketch pre NodeMCU HTTPS varianta
Odosielanie dát do internetu Ethernet a Wifi, spracovanie
Kód:
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <OneWire.h>
Adafruit_BMP280 bmp;                 // BMP280 NA ZBERNICI I2C
#include <Adafruit_Sensor.h>
#include "Adafruit_BMP280.h"         //LOKALNA KNIZNICA SENZORA BMP
#include <DallasTemperature.h>       //KNIZNICA PRE TEPLOTNE CIDLA DS18B20
#define ONE_WIRE_BUS 14             //D5 DEFINICIA PINU AKO ZBERNICE PRE ONEWIRE ZARIADENIA.. TU ZBIERAME UDAJE
OneWire oneWire(ONE_WIRE_BUS);       //ONEWIRE ČÍTAŤ IBA NA PORTE DEFINOVANOM VYSSIE
DallasTemperature sensors(&oneWire); //PRIRADENIE SENZOROV DALLAS DS18B20 NA ONEWIRE ZBERNICU
#include <DHT12.h>
#include <Wire.h>     //The DHT12 uses I2C comunication.
DHT12 dht12;
#include <SPI.h>
const char* ssid = "wifimeno";
const char* password = "wifiheslo";
const char* host = "mojweb.sk"; //bez https a www
const int httpsPort = 443;
const char* fingerprint = "13 9f 87 1d b1 85 be e6 bd 73 c1 8d 04 63 58 99 f0 32 43 92"; //sha1 certifikat stranky
void setup() {
  Wire.begin();
  sensors.begin();
  bmp.begin(); 
  Serial.begin(115200);
  Serial.println();
  Serial.println("pripajam na wifi siet: ");
  Serial.println(ssid);
 
  }

void loop(){

 sensors.requestTemperatures();
  WiFiClientSecure client;
  if (!client.connect(host, httpsPort)) {
    return;
  }
  if (client.verify(fingerprint, host)) {
  }
  else {
  }
  String temp1 = String (sensors.getTempCByIndex(0));
 String tempinside = String (sensors.getTempCByIndex(1));
  String humidity = String (dht12.readHumidity());
 String pressure = String ((bmp.readPressure() / 100) + 30, 12); //30,12 konstanta, prepisat na: vasanadmorskavyska/8,3, vysledokom nahradit 30,12.


  String url = "/add.php?temp1=" + temp1+"&tempinside="+ tempinside+"&humidity="+ humidity+"&pressure="+ pressure; //
  client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
  Serial.println("Odoslane");
  delay(15000);
  }

Sketch pre NodeMCU HTTP varianta
Odosielanie dát do internetu Ethernet a Wifi, spracovanie
Kód:
#include <ESP8266WiFi.h>
#include <OneWire.h>
Adafruit_BMP280 bmp;                 // BMP280 NA ZBERNICI I2C
#include <Adafruit_Sensor.h>
#include "Adafruit_BMP280.h"         //LOKALNA KNIZNICA SENZORA BMP
#include <DallasTemperature.h>       //KNIZNICA PRE TEPLOTNE CIDLA DS18B20
#define ONE_WIRE_BUS 14             //D5 DEFINICIA PINU AKO ZBERNICE PRE ONEWIRE ZARIADENIA.. TU ZBIERAME UDAJE
OneWire oneWire(ONE_WIRE_BUS);       //ONEWIRE ČÍTAŤ IBA NA PORTE DEFINOVANOM VYSSIE
DallasTemperature sensors(&oneWire); //PRIRADENIE SENZOROV DALLAS DS18B20 NA ONEWIRE ZBERNICU
#include <DHT12.h>
#include <Wire.h>     //The DHT12 uses I2C comunication.
DHT12 dht12;
#include <SPI.h>
const char* ssid     = "wifimeno";
const char* password = "wifiheslo";

const char* host = "mojserver.sk";
void setup() {
  sensors.begin();                                              //START SENZOROV POD ONEWIRE (DALLASTEMPERATURE)
  bmp.begin();
  Serial.begin(115200);
  delay(10);

  Serial.println();
  Serial.println();
  Serial.print("Pripajam na wifi siet");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi pripojene"); 
  Serial.println("IP adresa: ");
  Serial.println(WiFi.localIP());
}


void loop() {
  delay(5000);

  Serial.print("Pripajam sa na web: ");
  Serial.println(host);
 sensors.requestTemperatures();   
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("pripojenie neuspesne");
    return;
  }
 
 
String temp1 = String (sensors.getTempCByIndex(0));
 String tempinside = String (sensors.getTempCByIndex(1));
  String humidity = String (dht12.readHumidity());
 String pressure = String ((bmp.readPressure() / 100) + 30, 12); //30,12 konstanta, prepisat na: vasanadmorskavyska/8,3, vysledokom nahradit 30,12.


  String url = "/add.php?temp1=" + temp1+"&tempinside="+ tempinside+"&humidity="+ humidity+"&pressure="+ pressure; //
 
  Serial.print("Request na URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
 

 
 
  Serial.println("Odoslane");
  delay(15000);
}

Knižnice ESP8266WiFi.h a WiFiClientSecure.h sú obsiahnuté v Arduino Core pre NodeMCU a iné ESP dosky.

Spracovanie výsledku online:
Keď už dáta dorazia na web, je nutné ich spracovať a uložiť do databázy. Databáza je skvelý nástroj na archiváciu dát aj o niekoľko tisíc záznamoch. S dátami sa dá následne ľahko pracovať, dajú sa využiť na grafy, interaktívne prehľady a rôzne iné akcie a vizualizácie podľa naprogramovania.
Najskôr je nutné si vytvoriť 4 tabuľky, do ktorých sa budú dáta odosielať:
TempOutside - id (Auto_increment, Primary Key) temperature (float), time (timestamp, on update CURRENT_TIMESTAMP)
TempLivingRoom - id (Auto_increment, Primary Key) temperature (float), time (timestamp, on update CURRENT_TIMESTAMP)
Humidity - id (Auto_increment, Primary Key) humidity(float), time (timestamp, on update CURRENT_TIMESTAMP)
PressureOutside- id (Auto_increment, Primary Key) pressure (float), time (timestamp, on update CURRENT_TIMESTAMP)

PHP kód spracovania dát:
Odosielanie dát do internetu Ethernet a Wifi, spracovanie
Kód:
    <?php
     include ("connect.php");
     $temp1 = $_GET["temp1"];
     $t2 = $_GET["tempinside"];
     $p = $_GET["pressure"];
     $h = $_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<950 || $h==0.01 || $h==0.02 || $h==0.03 || $h==95){
        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)); 
       }
    ?>

Tento tutoriál je plne kompatibilný s projektom Meteostanice, ktorá sa tiež nachádza v hotových riešeniach. Ukázali sme si, ako dvomi rôznymi technológiami Ethernet a Wifi je možné nahrať údaje do databázy cez HTTP aj HTTPS protokol s využitím PHP kódu, ktorému GET metódou predáme zaznamenané dáta.


 [ Príspevok: 1 ] 


Odosielanie dát do internetu Ethernet a Wifi, spracovanie



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Neustale odosielanie a prijmanie dat

v Bezpečnosť a firewally

3

767

09.06.2009 20:32

Peterw1

V tomto fóre nie sú ďalšie neprečítané témy.

Flexo Tlač a spracovanie dát

v Externé zariadenia

0

171

17.06.2014 16:45

reincarnate

V tomto fóre nie sú ďalšie neprečítané témy.

Nefunčknosť odosielanie dát z formulára od-do

v JavaScript, VBScript, Ajax

1

263

26.09.2011 14:34

camo

V tomto fóre nie sú ďalšie neprečítané témy.

Netradičné využitie PHP servera (čiastočná náhrada VPS). Stiahnutie, spracovanie, uloženie externých dát

v PHP, ASP

1

137

27.06.2020 22:02

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

Konverzia WIFI na Ethernet

v Siete

1

293

09.12.2010 13:48

Rauch

V tomto fóre nie sú ďalšie neprečítané témy.

Ethernet port do WiFi

v Sieťové a internetové programy

14

533

10.01.2017 22:58

4040

V tomto fóre nie sú ďalšie neprečítané témy.

pouzitie wifi routeru na zdielanie internetu z wifi

v Siete

2

489

28.12.2010 20:03

bart1251

V tomto fóre nie sú ďalšie neprečítané témy.

Prepojenie z wifi na ethernet

v Siete

1

174

22.06.2020 15:15

michalesku

V tomto fóre nie sú ďalšie neprečítané témy.

Wifi ide ale ethernet nie

v Poskytovatelia internetu

1

215

16.09.2019 8:35

4040

V tomto fóre nie sú ďalšie neprečítané témy.

WiFi router + ethernet DSL modem - problem

v Siete

0

2675

15.09.2006 9:55

exn

V tomto fóre nie sú ďalšie neprečítané témy.

DVD recorder + ethernet/wifi + hdmi/scart input

v TV

0

948

13.02.2010 22:37

wingss658

V tomto fóre nie sú ďalšie neprečítané témy.

4-Port Ethernet Switch HWIC with Power Over Ethernet, Cisco,

v Siete

2

416

06.01.2009 16:04

Cruel

V tomto fóre nie sú ďalšie neprečítané témy.

Ethernet a Wifi problém s Win 7-10

v Siete

2

232

24.02.2017 21:28

Zagitovaná Feldička

V tomto fóre nie sú ďalšie neprečítané témy.

Prepojenie dvoch budov 300m-400m cez Wifi / sirenie internetu cez Wifi

v Siete

1

614

10.01.2018 13:56

expresado

V tomto fóre nie sú ďalšie neprečítané témy.

DSL Ethernet modem Glitel GT-318RI a wifi AP D-Link DAP-1160

v Siete

3

1322

22.04.2009 6:07

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

Vypadavanie wifi(internetu?)

v Siete

5

1059

19.04.2010 20:47

viper1993



© 2005 - 2021 PCforum, edited by JanoF