ENERGY MONITOR Part 1 – ESP8266 send data to mysql-php

Olá,

Vamos dar inicio a um projecto interessante para AVR, trata-se de Energy Monitor, como quem diz controlar o consumo energetico da nossa habitação.

Este topico esta em fase desenvolvimento por estar aguardar componentes encomendados para o projecto.

No entanto o core de software ja esta quase implementado no qual fez-se um video demonstrativo.

Damos inicio ao desafio, começamos por inunciar os componentes necessarios para o projecto ( PARTE 1 ).



O objectivo será programar o ESP8266 ESP01 de modo que este se conecte ao router e por sua vez transmita a informação para um servidor MYSQL-PHP.
O modo como foi programado o ESP8266 ESP01 com recurso a Arduino IDE, simplifica muito o codigo desem«nvolvido para este projecto.

Vejamos, vamos precisar de um USB Adapter CH340: 

Para que seja possivel programar este USB Adapter CH340, não vem com interruptor de programação, teremos de colocar um shunt entre 2 pinos,GND e o GPIO0, ou seja pino 1 e pino3 conforme este artigo e imagem anexa:

Shunt para modo de programação do ESP8266

Utilizando o Arduino IDE, na opção menu FIcheiro->Preferências->(URL adicionais de Gestor de Placas) colocamos os seguintes links conforme imagem:

http://arduino.esp8266.com/versions/2.4.2/package_esp8266com_index.json

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Colocado estes links no gestor de placas podemos então selecionar o ESP8266 ESP01 no menu Ferramentas conforme imagem anexa:

Inserimos USB Adapter CH340 no USB do Computador e  instalamos os Drivers CH340 verificamos se foi reconhecido:

Agora sim estará pronto para programar o ESP8266, se existir dificuldades nas bibliotecas <ESP8266WiFi.h> podem encontrar a versão mais recente neste site, coloca-se aqui o codigo do Arduino e explica-se em pormenor o seu funcionamento, algumas duvidas de programação do arduino-ESP8266 leiam este artigo!

O resultado final da compilação e Upload do codigo será como imagem anexa:

Arduino Code For ESP8266 ESP01
#include <ESP8266WiFi.h> // import ESP8266 WiFi library
#include <WiFiClientSecure.h> //import client library
const char* ssid     = "MEO-SSID";
const char* password = "PASSWIFI";
const char* host = "maquina.96.lt";
 
String hostString = "Connection: keep-alive\r\nCache-Control: max-age=0\r\n\r\n\r\n";
String hostClose = "Connection: close\r\n\r\n";

String str = "";
const char separator = ':';
const int dataLength = 4;
float data[dataLength];
void setup() {
  Serial.begin(115200);
  delay(10);
 
  // We start by connecting to a WiFi network
 
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
   WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  
}//end setup
  
void loop() {
  if (Serial.available())
  {
    str = Serial.readStringUntil('\n');
    Serial.println(str);
    for (int i = 0; i < dataLength ; i++)
    {
      int index = str.indexOf(separator);
      //data[i] = str.substring(0, index).toInt();
      data[i] = str.substring(0, index).toFloat();
      str = str.substring(index + 1);
    }
    //DEBUG_ARRAY(data);
    Serial.print("Connecting to ");
  Serial.println(host);
  
  // Use WiFiClient class to create TCP connections
  WiFiClient Client;
  const int httpPort = 80;
  if (!Client.connect(host, httpPort)) {
    Serial.println("Connection failed");
    return;
  }
  String url = "/save_energy.php?volt=";
  Serial.print("Requesting URL: ");
  Serial.println(host + url);
  Serial.println(String("TRY: ") + data[0] + ".");
  
 Client.print(String("GET ") + url + data[0] + 
                       "&amp="    + data[1] + 
                       "&wat="    + data[2] + 
                       "&energy=" + data[3] + 
                       " HTTP/1.1\r\n" + 
                       "Host: " + host + "\r\n" + hostString);
 delay(500);
 // Read all the lines of the reply from server and print them to Serial
  while(Client.available()){
  String line = Client.readStringUntil('\r');
  Serial.println(line);
 }
  Serial.println("");
  Serial.println(String("Try nr. ") + data[0] + data[1] + data[2] + data[3] +" is finished.");
  Serial.println("Waiting for next try...");
  Serial.println("");
  delay(2000);
  }
}

 

Explicação do codigo:

const char* ssid = “MEO-SSID”;                      //coloca-se entre apas o SSID do seu WIFI router
const char* password = “PASSWIFI”;         //coloca-se entre apas a password do seu WIFI
const char* host = “maquina.96.lt”;            //coloca-se o endereço do servidor onde consta o MYSQL-PHP, se não possuir um servidor podera usar um gratuito https://www.000webhost.com

const char separator = ‘:’;                                // os carateres ” : ”  São necessario para enviar uma trama de dados com valores do tipo float (.) separados por “:” enviados pela porta serie.
exemplo:  230.4:12.5:3456.45:98.2 resultantado pelo codigo seria 230.4 12.5 3456.45 98.2.

A função que separa os valores por “:” é esta:

if (Serial.available())
  {
    str = Serial.readStringUntil('\n');
    Serial.println(str);
    for (int i = 0; i < dataLength ; i++)
    {
      int index = str.indexOf(separator);
      data[i] = str.substring(0, index).toFloat();
      str = str.substring(index + 1);
    }
}

Após a separação destes valores, será enviada pelo metodo POST para uma pagina web que esta em PHP, a string que se pretende enviar será do tipo: sprintf(msgData,”GET save_energy.php?volt=%d&amp=%d&wat=%d&energy=%d HTTP/1.1\r\nHost: maquina.96.lt\r\n%s”,data[0], data[1], data[2], data[3],hostString);

resultado a enviar seria:

GET save_energy.php?volt=230.4&amp=12.5&wat=3456.45&energy=98.2 HTTP/1.1\r\nHost: maquina.96.lt\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\n\r\n\r\n”;

seria o mesmo que carregar no browser o seguinte link:

http://maquina.96.lt/save_energy.php?volt=230.4&amp=12.5&wat=3456.45&energy=98.2

va alterando os valores e veja o resultado

Toda a informação que consta como Serial.println é apenas para diagnostico ligando directamente o ESP8266 pela usb ao computador e com o Monitor serie do arduino aberto verificamos o Debug.

PHP – MYSQL

Como tudo acontece? Vamos precisar de um servidor com PHP e MYSQL, no exemplo usa-se o servidor https://www.hostinger.pt/  criamos uma conta e fazemos login no servidor , vejam o video:

para os script de php precisamos de conectar a base de dados:

link_db.php
<?php
function Conection(){
   if (!($link=mysql_connect('localhost','u492211433_user','1234')))  {
   	  exit();
   }
   if (!mysql_select_db('u492211433_bd',$link)){
	    exit();
   }
   return $link;
   
}
?>

em seguida precisamos de colectar os dados na tabela:

save_energy.php
<?php
   include("link_db.php");
   $link=Conection();
   $dia=date('Y-m-d');
   $hora = date('H:i:s');
   $valor=$_GET['energy'];
   $custo=($valor*0.1641);
   $Sql="insert into EnergyMonitor (dia,hora,volt,amp,wat,energy,custo)  values ( '$dia','$hora', '".$_GET["volt"]."','".$_GET["ampere"]."','".$_GET["wats"]."','".$_GET["energia"]."','$custo')"; 
   mysql_query($Sql,$link) or die (mysql_error());
   header("Location: energy.php");
?>

Falta detalhar o resto do artigo aqui: Fiquem Atentos BREVEMENTE…

Site onde são enviado os dados MYSQL-PHP com graficos de google charts -> Energy Monitor MYSQL-PHP

Video demosntrativo do projecto PART1:

6 comentários

Passar directamente para o formulário dos comentários,

    • Fellipe on 19 Novembro, 2018 at 10:32
    • Responder

    Olá, esse sim é um projeto incrível ! Eu pretendo realizar um projeto de monitoramento semelhante ao seu mas com outras variáveis e gostaria de montar um gráfico como no vídeo você poderia me enviar seu arquivo (graphic.php). Agradeço desde já.

    1. Viva,

      Foi enviado para o e-mail a explicação do funcionamento grafico.

      • shirley on 11 Abril, 2019 at 15:04
      • Responder

      Gostaria de montar um gráfico como no vídeo você poderia me enviar seu arquivo (graphic.php). Agradeço desde já.

      1. Olá Felipe,
        Por favor lê o conteudo da Pagina Principal (Colaboração Entre Parceiros || Código Fonte Livre).
        Contamos contigo!

    • Deiverson on 29 Novembro, 2018 at 2:37
    • Responder

    Projeto muito interessante ! Eu já vi um semelhante mas este aqui é mais completo, estou ansioso pra postagem do restante do artigo pra testar em casa. Abraços

    • Deiverson on 29 Novembro, 2018 at 4:05
    • Responder

    Saudações, admirável esse projeto é de longe o mais completo e barato que já vi, estou ansioso para ver a continuação e o restante da postagem.

Deixe uma resposta

Your email address will not be published.

www.000webhost.com