DHT 11 a odesílání dat do MySQL

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

DHT 11 a odesílání dat do MySQL

Příspěvek od Kony » 12 kvě 2020, 20:06

Ahoj, řeším nyní odesílání dat z DHT 11 senzoru do MySQL...

NodeMCU:

Kód: Vybrat vše

#include <ESP8266WiFi.h>
#include <DHT.h>


//Def
const int myPeriodic = 300; // Time to sleep (in seconds):
#define DHTPIN D1     // what pin we're connected to
#define DHTTYPE DHT11   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);

// Nazev Wi-Fi site, do ktere se mam pripojit
const char* ssid = "Kony";
// Heslo Wi-Fi site, do ktere se mam pripojit
const char* password = "xxxxxxxx";
char server[] = "xxxxxx.eu"; //URL adresa serveru
WiFiClient client;

void setup() {
 // Nastartuj seriovou linku, do ktere budu vypisovat provozni informace
 Serial.begin(9600);

 // Na pin D1 je pripojene rele, nastavim jej tedy na vystup
 // Zaroven nastavim nizkée napeti, aby se rele po startu nesepnulo
 pinMode(D1, OUTPUT);

 // Pripojeni k Wi-Fi
 Serial.println();
 Serial.print("Pripojuji k ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

 // Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
 while (WiFi.status() != WL_CONNECTED) {
 delay(100);
 Serial.print(".");
 }

 // Jsem pripojeny k Wi-Fi a mohu pokracovat
 Serial.println();
 Serial.println("WiFi pripojena!");

 // Napis IP adresu, kterou mikropocitac dostal
 Serial.print("Pouzij k pripojeni tuto adresu: ");
 Serial.print("http://");
 Serial.println(WiFi.localIP());
}

// Smycka loop se opakuje stale dokola

void loop() {
    if(client.connect(server, 80)){
        delay(1000);
        Serial.println("OK");
        delay(100);
       float temp = dht.readTemperature();
         delay(100);
        float hum = dht.readHumidity();
          Serial.print(" Temperature: ");
        Serial.println(temp);
          Serial.print(" Humidity: ");
        Serial.println(hum);
        client.print("GET http://xxxxxx.eu/aaaaaa/logger_venku_teplota.php?hodnota=");
        client.println(temp);
        client.println("Host: xxxxxx.eu");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        client.stop();
        delay(60000);
        client.print("GET http://xxxxxx.eu/aaaaaa/logger_venku_vlhkost.php?hodnota=");
        client.println(hum);
        client.println("Host: xxxxxx.eu");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        client.stop();
        delay(10000);
    }
}
na adrese www serveru :

Kód: Vybrat vše

<?php
        $server = "localhost";
        $user = "kony";
        $pass = "xxxxxxxx";
        $db = "Domacnost";

        $mysqli = mysqli_connect($server, $user, $pass, $db); //připojení k MySQL

        if($mysqli and isset($_GET['hodnota'])){ //pokud GET obsahuje 'hodnota', pokračuj
                $hodnota = sanitize($_GET['hodnota']);

                $sql = "INSERT INTO dht_venku_vlhkost (hodnota) VALUES (".$hodnota.")"; //sestavení SQL
                $doSql = $mysqli->query($sql); //vykonání SQL

                if($doSql){ //test úspěchu
                        echo 'Zápis byl úspěšný';
                }
                else{
                        echo 'Něco se nepovedlo';
                }

        }
        else{
                echo "Neco je špatně";
        }

        function sanitize($input){ //ořízne řetězec
                $input = htmlspecialchars($input);
                $input = htmlentities($input);
                $input = strip_tags($input);
                $input = trim($input);
                return $input;
        }
?>
Pokud to mám takto, tak se mi do databáze zapisuje pouze teplota, ale vlhkost ani prd....když hodnoty přehodím v pořádí odesílaní, tak se zase odešle vlhkost, ale ne teplota, takže to vždy odešle pouze první hodnutu..
V konzole, to krásně ukazuje obě hodnoty. Jestliže manuálně zapíšu do řádku na odeslání hodnotu, tak se do DB zapíše, ale Arduino ani prd...

Dále bych se chtěl zeptat, jestli lze udělat to, aby byla jedna databáze z tabulkou s hodnotama ID|timestemp|teplota|vlhkost
a aby se ty hodnoty zapisovali podle toho, takto jak to mám já, mám dvě tabulky s hodnotama ID/timestemp|hodnota, ale pro další práci a tvoření grafů by bylo určitě lepší to mít v jedné tabulce...

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: DHT 11 a odesílání dat do MySQL

Příspěvek od martinius96 » 12 kvě 2020, 20:53

Funkciou client.stop(); si ukončíš spojenie.
musíš opäť zavolať if(client.connect(server, 80)){

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: DHT 11 a odesílání dat do MySQL

Příspěvek od Kony » 12 kvě 2020, 21:00

UUUUUplne presne ono. uz to fici... :roll: :roll: :roll: :roll:

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: DHT 11 a odesílání dat do MySQL

Příspěvek od pavel1tu » 12 kvě 2020, 21:02

Kdyby se ti stávalo, že se sem tam nějaká data nezapíší,
dej před řádek "klient.stop" nějaký delay() mne pomohlo 500ms u pomalejších free hostingů
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: DHT 11 a odesílání dat do MySQL

Příspěvek od Kony » 12 kvě 2020, 21:20

Ted nějak zkouším ještě pořešit ten zápopis obou hodnot do jedné tabulky

Nyní to mám zvlášť

Kód: Vybrat vše

http://konycz.eu/doma/graf_teplota.php

Kód: Vybrat vše

http://konycz.eu/doma/graf_vlhkost.php
Ale chtěl bych to dostat do jednoho grafu

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: DHT 11 a odesílání dat do MySQL

Příspěvek od KamilV » 12 kvě 2020, 22:05

A v čem je problém?

V ardu:

Kód: Vybrat vše

client.print("GET http://xxxxxx.eu/aaaaaa/logger_venku.php?teplora=");
client.print(temp);
client.print("&vlhkost=");
client.println(hum);
V php:

Kód: Vybrat vše

if($mysqli && isset($_GET['teplota']) && isset($_GET['vlhkost'])){ //pokud GET obsahuje 'hodnota', pokračuj
                $teplota = sanitize($_GET['teplota']);
                $vlhkost = sanitize($_GET['vlhkost']);
                
                $sql = "INSERT INTO dht_venku (teplota, vlhkost) VALUES (".$teplota.", ".$vlhkost.")"; //sestavení SQL

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: DHT 11 a odesílání dat do MySQL

Příspěvek od Kony » 13 kvě 2020, 16:43

Jsi jednička, funguje krásně...

A mohl bych jen info o tom jak vypsat hodnotu posledniho zaznamu ??? Abych si udělal graf a nad něj vypisoval přímo hodnoty...

Zkouším :

Kód: Vybrat vše

<?php
//index.php
$connect = mysqli_connect("localhost", "kony", "xxxxxxxxxx", "Domacnost");
$query = "SELECT * FROM dht_venku ORDER BY ID DESC LIMIT 0, 1";
$result = mysqli_query($connect, $query);
$chart_data = '';
while($row = mysqli_fetch_array($result))
{
 $chart_data .= "{ teplota:'".$row["teplota"]."', vlhost:".$row["vlhkost"].", tlak:".$row["tlak"]."}, ";
}
$chart_data = substr($chart_data, 0, -2);
 echo ($teplota);
 echo ($vlhkost);
 echo ($tlak);
?>

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: DHT 11 a odesílání dat do MySQL

Příspěvek od martinius96 » 13 kvě 2020, 17:14

LIMIT musí byť 1, pričom sa ide od ID s maximálnou hodnotou, ak je order DESC. V prípade, že by si chcel opačne od minimálnej hodnoty (najstarší záznam) tak by si používal ASC v tom dopyte.

Kód: Vybrat vše

<?php
//index.php
$connect = mysqli_connect("localhost", "kony", "xxxxxxxxxx", "Domacnost");
$query = "SELECT * FROM dht_venku ORDER BY ID DESC LIMIT 1"; // v tabuľke dht_venku sa nachádza riadok s názvom ID
$result = mysqli_query($connect, $query );
$line = mysqli_fetch_assoc($result);
echo htmlspecialchars($line['teplota'])." °C";
echo htmlspecialchars($line['vlhkost'])." %";
echo htmlspecialchars($line['tlak'])." hPa";
?>
Môžeš to rozšíriť o ten substring a ten JSON formát, ktorý tam máš použitý... Tu som ho nepoužíval, iba vzorový výpis dát.

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: DHT 11 a odesílání dat do MySQL

Příspěvek od Kony » 13 kvě 2020, 18:35

Díky moc....

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů