Arduino – Odesílaní hodnot do databáze – NodeMCU #3

Vítejte u dalšího dílu ze série o NodeMCU. Dnes si ukážeme jak jednoduchým způsobem lze z NodeMCU odesílat data do databáze. Využijeme k tomu WiFi modul NodeMCU a vytvoříme si jednoduchou webovou aplikaci pro ukládání přijatých dat.

Pro ukládání dat do databáze potřebujete nějaký web – svůj server, hosting, VPS nebo podobně. Stačí schopnost provozu PHP a MySQL. Osobně využiji svého hostingu u Wedosu.

Takže nyní vstoupíme do administačního rozhraní MySQL, u každého to bude pravděpodobně phpMyAdmin. Zde vytvoříme jednoduchou tabulku:

  • Sloupec ID – int, AUTO_INCREMENT, PRIMARY
  • Sloupec Hodnota – hodláme zapisovat teplotu, tedy -> int, výchozí hodnota – null
  • Sloupec Datum – datetime, výchozí hodnota – CURRENT_TIMESTAMP

Pokud databázím neholdujete, jednoduše okopírujte tento příkaz do záložky SQL.

CREATE TABLE `//jmeno_vasi_databáze//`.`hodnoty` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `hodnoty` INT NULL , `datum` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`id`)) ENGINE = MyISAM;

Tabulku máme, nyní stačí jen jednoduchý kód na ukládání přijatých dat.

$server = "server"; // Datanázový server
$user = "jmeni"; // Jméno uživatele
$pass = "heslo"; // Heslo uživatele
$db = "databaze"; // Jméno databáze

$mysqli = mysqli_connect($server, $user, $pass, $db);

if($mysqli and isset($_GET['hodnota'])){
$hodnota = $_GET['hodnota'];

$sql = "INSERT INTO jmeno_tabulky (hodnota) VALUES (".$hodnota.")";
$doSql = $mysqli->query($sql);

if($doSql){
echo 'Zapis byl uspesny';
}
else{
echo 'Neco se nepovedlo';
}

}
else{
echo "Neco je spatne";
}

Tento soubor můžete stáhnout zde – https://mega.nz/#!Zxd0BbDZ!o_fMNcVpN11CTt5D2jpYuz3RgVcmN2h27ti7cZrK6Ng.

Soubor umístěte na svůj server (přes FTP). Adresa by měla být adresa.neco/logovani.php.

Nyní k samotnému NodeMCU.

const char* ssid = "ESP_AP";
const char* password = "heslojetajne";

const char* host = "esp8266.dr-zelenka.cz";

Zde nastavíme připojení k vaší WiFi – jméno sítě a heslo. Dále nastavíme kam na web se chceme připojit, tedy adresu webu.

V void setup() následuje připojení k WiFi.

delay(5000);
++value;
Serial.println("Pripojuji se na ");
Serial.println(host);

WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("Pripojeni selhalo!");
return;
}

Zde nastavíme zpoždění, výpis informací do konzole, port pro připojení a zkoužku připojení k webu.

String url = "/logovani.php?hodnota=";

Jméno PHP souboru a jméno odesílaných dat.

Serial.print("Pozadavek na URL: ");
Serial.println(url);

client.print(String("GET ") + url + value + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Casovy limit klienta vyprsel!");
client.stop();
return;
}
}

Nyní vytvoříme HTTP Header a odešleme.

while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}

Serial.println();
Serial.println("closing connection");

Zobrazení odpovědi webu s ořízlím HTTP Headerem.

Celý soubor můžete stáhnout zde – https://mega.nz/#!4oUHnaYB!yGKOev1iTHjl2eolU6Gv1i2TXDBrVW1QQvEPtj8pAsQ.

To je pro tento díl všechno. Tento díl opět naleznete na YouTube:

Pokud jste nalezli nějakou chybu, prosím, upozorněte nás označením textu a zmáčknutím zkratky Ctrl+Enter.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *