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: