Guardar datos desde esp8266 en MySQL de NAS Synology


          Tengo un NAS desde hace muchos años. Todo han sido satisfacciones por variedad de opciones y posibilidades que proporciona. Por supuesto compartir tus videos, películas, fotos, ficheros desde cualquier parte en tu casa y fuera de ella, comprando un dominio por pocos euros anuales puedes poner tu página web en él, servicio DDNS gratuito, etc. Mi NAS es un Synology.

          Y como no, permite php y MySQL (instalando el paquete Mariadb) y su control con phpMyAdmin.
          Este tutorial es lo más simplificado posible. Enviar dos variables desde un esp8266 Nodemcu conectado por wifi a una base de datos alojada en nuestro NAS.

          Lo primero es instalar en el NAS los paquetes Mariadb 5, PHP 7 y phpMyAdmin. También Web Station que nos permitirá entrar en la configuración de PHP y activar las opciones curl y mysqli.

          Lo siguiente fue crear una base de datos con phpMyAdmin "example_esp_data" y dentro de ella una tabla "ramdon" con la siguiente estructura.
         Muy importante, a la tabla debemos darle un nombre de usuario (Que no sea root) y un password.

         Seguidamente creamos un fichero php (insertar-ram.php) que recoge los datos que envía el esp8266 y los inserta en la tabla. Este fichero lo ponemos en raíz del NAS o en la carpeta que queramos (el mio en /SQL)

<?php
$servername = "192.168.1.100";   //IP del NAS

// REPLACE with your Database name
$dbname = "example_esp_data";
// REPLACE with Database user
$username = "Jopapa";
// REPLACE with Database user password
$password = "11ximojpp";

$ra = $_GET['ram'];   //captura los valores enviados por esp8266
$re = $_GET['rem'];

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

//Inserta los valores recibidos en la tabla ramdon
$sql = "INSERT INTO `ramdon` (`id`, `aleatorio`, `aleatorio2`, `fecha`) VALUES (NULL, '$ra', '$re', NULL)";
       
if ($conn->query($sql) === TRUE) {
        echo "new record created successfully";
    }
    else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

$conn->close();

?>


        
          Podemos ver que todo funciona lanzando una URL desde nuestro navegador tal que así

          http://192.168.1.100/SQL/insertar-ram.php?ram=249&rem=250

        
          Seguidamente el código del esp8266. Conecta con nuestra wifi y cada 10'' envía dos números aleatorios a insertar-ram.php

         Nada más fácil que sustituir estos datos por otros auténticos de temperatura, humedad, voltajes, etc




#include <ESP8266WiFi.h>
const char* ssid     = "Jopapa";
const char* password = "xxxxxxxxxxxxx";
const char* host = "192.168.1.100";
unsigned long previousMillis = 0;      
const long interval = 10000;           // intervalo de 10''
int valor=0; int valor2=0;

WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);
  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  IPAddress ip(192, 168, 1, 167);
  IPAddress gateway(192,168,1,1);
  IPAddress subnet (255,255,255,0);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  WiFi.config(ip,gateway,subnet); 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected"); 
  server.begin();

}


void loop() {
  unsigned long currentMillis = millis(); 
  if (currentMillis - previousMillis >= interval) { //Llama 10''
    previousMillis = currentMillis;
    //Generar dos valores aleatorios
    valor = random(999);
    delay(10);
    valor2 = random(999);

    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
   }   
    // Creamos una URL
    String url = "";
    url +="/SQL/insertar-ram.php?";
    url += "ram=";
    url += valor;
    url += "&rem=";
    url += valor2;   
   // This will send the request to the server
   client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n"); 
}
}

          Por último podemos ver los datos guardados desde phpMyAdmin y con este otro php en el navegador.


<!DOCTYPE html>
<html><body>
<?php

$servername = "192.168.1.100";  //IP de mi NAS Synology

// REPLACE with your Database name
$dbname = "example_esp_data";
// REPLACE with Database user
$username = "Jopapa";
// REPLACE with Database user password
$password = "11ximojpp";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, aleatorio, aleatorio2, fecha FROM ramdon ORDER BY id DESC";

echo '<table cellspacing="5" cellpadding="5">
      <tr>
        <td>ID</td>
        <td>Aleatorio</td>
       <td>Aleatorio2</td>
        <td>Fecha</td>
      </tr>';

if ($result = $conn->query($sql)) {
    while ($row = $result->fetch_assoc()) {
        $row_id = $row["id"];
        $row_aleatorio = $row["aleatorio"];
$row_aleatorio2 = $row["aleatorio2"];
        $row_fecha = $row["fecha"];

     
        echo '<tr>
                <td>' . $row_id . '</td>
                <td>' . $row_aleatorio . '</td>
   <td>' . $row_aleatorio2 . '</td>
                <td>' . $row_fecha . '</td>
              </tr>';
    }
    $result->free();
}

$conn->close();
?>
</table>
</body>
</html>
Menu