DHT 11 a odesílání dat do MySQL
Napsal: 12 kvě 2020, 20:06
Ahoj, řeším nyní odesílání dat z DHT 11 senzoru do MySQL...
NodeMCU:
na adrese www serveru :
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...
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);
}
}
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;
}
?>
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...