blog-eletrogate-logo-desktop blog-eletrogate-logo-mobile
  • Categorias
    • Voltar
    • INICIANTES
    • INTERMEDIÁRIOS
    • AVANÇADOS
    • divide
    • Automação Residencial
    • Componentes Eletrônicos
    • Impressão 3D
    • IoT
    • Modelagem 3D
    • Módulos Wifi
    • Por trás da tecnologia
    • Projetos
    • Raspberry Pi
    • Robótica
    • Sensores
    • Shields
    • Sistemas Operacionais
    • Tipos de Arduino
    • Tutoriais
  • Apostilas
  • Quem Somos
  • Seja um redator
  • Trabalhe Conosco
    • Categorias
      • Voltar
      • INICIANTES
      • INTERMEDIÁRIOS
      • AVANÇADOS
      • divide
      • Automação Residencial
      • Componentes Eletrônicos
      • Impressão 3D
      • IoT
      • Modelagem 3D
      • Módulos Wifi
      • Por trás da tecnologia
      • Projetos
      • Raspberry Pi
      • Robótica
      • Sensores
      • Shields
      • Sistemas Operacionais
      • Tipos de Arduino
      • Tutoriais
    • Apostilas
    • Quem Somos
    • Seja um redator
    • Trabalhe Conosco
Loja Eletrogate
voltar
  • Introdução
  • Banco de Dados
  • Servidor de Banco de Dados
  • Projeto a ser Desenvolvido
  • Materiais Necessários para o Projeto com Arduino + Banco de Dados MySQL
  • Desenvolvimento
  • Gerando um Gráfico
  • Conclusões
  • Sobre o Autor
Módulos Wifi

Arduino + Banco de Dados MySQL

Eletrogate 30 de junho de 2020Atualizado em: 15 set 2022

Introdução

O Arduino é bastante interessante para projetos onde é necessário monitorar temperaturas, som, luminosidade, vazão de um liquido e as mais diversas variáveis do nosso dia a dia.

Na maioria dos projetos nós utilizamos um display para monitorar as variáveis, e alguns projetos de controle a grandeza de interesse não é monitorada. Isso gera problemas ao longo prazo, pois, em casos de erros no projeto, ou possíveis problemas, é desejável saber em qual condição ocorreu o defeito.

Vamos pensar no caso de um sistema de armazenamento de medicamentos como a insulina, onde a temperatura sempre deve estar entre 2°C a 8°C no máximo. Seria muito interessante poder salvar todas as medidas para que seja fácil avaliar se o medicamento está em boas condições.

Existem diversas soluções comerciais para o armazenamento de dados em longo prazo, e essa é a função de um Datalogger. A principal desvantagem de um datalogger comum é o acesso aos dados.

O acesso aos dados em um datalogger sem conexão sem fio se dá por uma interface física, o que dificulta uma visualização em tempo real. Com o uso de um banco de dados em nuvem, temos a vantagem de reter dados como um Datalogger e a visualização em tempo real.


Banco de Dados

Se caso você não sabe o que é um banco de dados, não se preocupe, aqui vou te explicar um pouco sobre esse conceito de forma simples.

Um banco de dados é um conjunto de dados relacionados entre si que são organizados de forma extremamente otimizada para que seja rápido a busca, e de forma compacta.

De forma muito simplista, podemos comparar o armazenamento de um banco de dados a várias tabelas de um Excel, onde no Excel o que chamamos de planilha, no banco de dados chamamos de tabelas (um banco de dados pode ser composto por várias tabelas) . O que chamamos no excel de colunas, no banco de dados chamamos de campo. E o que no Excel chamamos de linha, no banco de dados chamamos de registro.

Diferente do Excel, a principal vantagem de um banco de dados está no sistema que gerencia esses dados, que utiliza uma linguagem de consulta própria, onde através dela possamos incluir dados, consultar os dados e gerenciar todo o banco de dados. Recomendo fortemente que pesquise sobre o assunto caso tenha interesse.


Servidor de Banco de Dados

Existem vários tipos de bancos de dados, no qual a linguagem de consulta pode mudar, e que o banco de dados em si podem estar armazenados em vários locais diferentes: ou uma máquina local, ou em uma rede local, ou até mesmo em uma máquina na internet que está a vários quilômetros de distância. Essa última opção que é a mais interessante para a gente.

Existem várias empresas que fornecem esse serviço de cloud de banco de dados, e para esse post escolhemos a Clever Cloud, que possui diversas ferramentas interessantes para desenvolvedores e analista de dados, e que é grátis para até 10mb de uso.

Existem outros projetos na internet que utilizam o db4free.net, que é bom, mas em minha experiência achei uma ferramenta bastante instável, mas tem a vantagem de poder ser utilizado até 200mb.

A linguagem de consulta de dados que vamos escolher é a MySQL, por ser simples, possuir uma comunidade grande e uma boa biblioteca para Arduino.


Projeto a ser Desenvolvido

Tendo em vista todos estes conceitos aprendidos, iremos desenvolver um sistema que através do Arduino Uno faça a leitura de vários sensores de temperatura, e envie esse dado para um ESP-01, para que ele envie a medida para o banco de dados online, e posteriormente possamos analisar.

Este projeto pode ser bastante útil para diversos tipos de aplicação onde seja necessário registrar dados em nuvens e apresentar ele através da Web.


Materiais Necessários para o Projeto com Arduino + Banco de Dados MySQL

Para este projeto escolhemos um Arduino Uno + o ESP-01 porque sabemos que grande parte de vocês possui um Arduino Uno, e dessa forma poderemos fazer o projeto com os materiais que vocês já possuem.

É possível facilmente adaptar o projeto para uma placa NodeMCU, e fica a critério de vocês escolherem o melhor caminho.

  • 1x Uno R3 + Cabo Usb para Arduino
  • 1x Módulo WiFi Serial ESP8266 ESP-01s – S Series
  • 1x Adaptador DIP para ESP8266 ESP-01
  • 1x Protoboard 400 Pontos
  • 1x Resistor 1K 1/4W (10 Unidades)
  • 1x Resistor 2K2 1/4W (10 Unidades)
  • 1x Resistor 4K7 1/4W (10 Unidades)
  • 2x Sensor de Temperatura DS18B20 a Prova D’água
  • 1x Jumpers – Macho/Macho – 20 Unidades de 20cm
  • 1x Adaptador USB para Módulo WiFi ESP8266 ESP-01

cta_cart


Desenvolvimento

Criando o banco de dados

O primeiro passo para o desenvolvimento do projeto é criar uma conta na Clever Cloud (clique aqui), e vá em Sign Up Free.

Coloque o seu e-mail pessoal que exista, e crie sua conta.

Vá no seu e-mail e ative a sua conta clicando no link onde está o campo em vermelho.

Preencha seus dados para finalizar.

E assim sua conta estará criada.

No canto esquerdo, clique em “Personal space” e vá em clique em “Create… an add-on”

E selecione a opção MySQL.

Escolha o plano DEV, que é grátis para até 10MB.

Depois de tudo criado, você terá as credenciais para o seu banco de dados. As do meu banco de dado são estas, as suas são diferentes.

Não passe essas credenciais a ninguém.

Para conferir sua senha, basta clicar na parte destacada abaixo.

E assim o seu banco de dados já estará criado e pronto para ser usado, mas ainda é necessário criar uma tabela para inserirmos os dados.

Vá em Datalogger(nome do projeto)>Addon dashboard>PHPMyAdmin.

Vá em “Databases”.

Clique na primeira planilha (a sua deve possuir um nome diferente).

Coloque o nome “Temperatura” (Se atente a primeira letra ser maiúscula), e selecione 3 colunas. Após isso clique em GO.

Nomeie exatamente como na imagem abaixo, e coloque os mesmos tipos de variáveis. E no “DATA_HORA”, é muito importante colocar ela do tipo CURRENT_TIMESTAMP. Clique em save depois de concluido.

Assim a sua tabela e o seu banco de dados foram criados com sucesso.

O código para o ESP-01

Para este projeto, precisamos ter em mente que utilizaremos o módulo ESP-01 em Standalone, isso é, gravaremos nele nosso próprio firmware personalizado que será disponibilizado aqui nesse post.

Como sabemos, gravar as placas ESP precisa de alguns macetes, que podem ser vistos nesse post (clique aqui). 

Aqui nesse post ensinaremos também a gravar o firmware utilizando o próprio Arduino Uno (Se caso você possuir um adaptador USB, você pode pular essa parte).

Para gravar o seu programa no ESP-01 utilizando o Arduino Uno se caso você não possuir um adaptador USB,  ou um conversor USB/Serial, primeiramente abra a Arduino IDE (Se não possuir ou não sabe o que é, recomendo ler este post)  e carregue um código em branco para a sua placa.

Depois faça a seguinte montagem com o Arduino e o ESP-01:

O ESP-01 é alimentado em 3.3V

Obs: O RX está com o RX, e o TX com o TX, e o pino GPIO_0 está ligado diretamente ao GND.

Com essa ligação feita, abra a Arduino IDE já configurada para enviar programas para ESP-8266. Se caso você não realizou essa configuração, clique aqui e aprenda como configurar.

Você irá precisar instalar a seguinte biblioteca (Vá em ferramentas > Gerenciador de bibliotecas):

Depois de instalada, preencha o código abaixo com as informações das credenciais da Clever Cloud que está disponível no ultimo passo que vimos do tópico anterior, insira também as informações do seu Wi-Fi.

Coloquei um > < nas informação que você deve alterar.

Envie o seguinte código:

/* 
 * Programa para ESP-01
 * Eletrogate
 * Arduino IDE versão 1.8.12
 */
#include <ESP8266WiFi.h>          
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

IPAddress server_addr(54, 39, 75, 7); // O IP DO SERVIDOR DA CLEVER CLOUD
char user[] = ">USUARIO CLEVER CLOUD<";              // Usuario MySQL
char password[] = ">COLOQUE AQUI A SENHA<";        //   Senha MySQL

char ssid[] = ">SEU USUARIO WIFI<";         //  Nome de rede Wifi
char pass[] = ">SENHA_WIFI<";     //            Senha Wi-Fi

char INSERT_DATA[] = "INSERT INTO >NOME_DO_BANCO_DE_DADOS<.Temperatura (ID_SENSOR, Temperatura) VALUES (%d,%s)"; 
//   EXEMPLO ACIMA:  "INSERT INTO b3d3z8bggux9ngtdusfw.Temperatura (ID_SENSOR, Temperatura) VALUES (%d,%s)"; 

WiFiClient client;             
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;

void setup() {
  Serial.begin(9600);
  VerificaWiFi();
}

void loop() {
  int id;
  float temp;

  AguardaDados();
  Leitura(&id, &temp);
  delay(100);
  EnviaDados(id, temp);
  Serial.println();
}

void AguardaDados() {
  while (!(Serial.available() > 0)) {}
}
void Leitura(int *id, float *temp) {
  char  mensagem[20];
  byte atual, i = 0;
  atual = 255;

  if (Serial.available() > 0) {
    while (atual != 10) {
      if (Serial.available() > 0) {
        atual = Serial.read();
        //     Serial.print((char)leitura);
        mensagem[i] = (char)atual;
        i++;
      }
    }
    i = 0;
    *id = atoi(strtok(mensagem, "|"));
    *temp = atof(strtok(NULL, "|"));
  }

}
void EnviaDados(int id, float temp) {

  char query[128];
  char temperatura[10];
  VerificaWiFi();
  if (conn.connect(server_addr, 3306, user, password)) {
    delay(1000);
    MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
    // Save
    dtostrf(temp, 1, 1, temperatura);
    sprintf(query, INSERT_DATA, id, temperatura);
    // Execute the query
    cur_mem->execute(query);
    // Note: since there are no results, we do not need to read any data
    // Deleting the cursor also frees up memory used
    delete cur_mem;
    Serial.println(); Serial.println("Data recorded."); //
  }
  else
    Serial.println(); Serial.println("Connection failed."); //
  conn.close();
}

void VerificaWiFi() {
  if (WiFi.status() != WL_CONNECTED) {
    //Serial.println("Sem conexão"); //
    WiFi.disconnect();
    delay(1000);
    WiFi.begin(ssid, pass);
    // Serial.println();Serial.println("Conectando ao WiFi."); //
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
    }
    // Serial.println();Serial.println("Conectado a rede!"); //
  }
}

E aguarde a mensagem “Hard resetting via RTS pin” aparecer, que é o sinal de que sua placa já foi gravada.

O código para o Arduino

Agora faça a seguinte montagem com sua placa Arduino e sensores DS18B20.

Observe bem que foi mudado a posição dos jumpers RX e TX, em relação ao diagrama anterior.

Se você quiser utilizar mais sensores de temperatura, você pode utilizar quantos quiser nesse projeto.

Instale estas bibliotecas em sua Arduino IDE:

E carregue o seguinte código para o Arduino.

#include <OneWire.h> // Biblioteca para o protocolo de comunicação 
#include <DallasTemperature.h> //Biblioteca das funções do sensor de temperatura
#include <SoftwareSerial.h> // A biblioteca para comunicar o Arduino com o ESP-01

SoftwareSerial SoftSerial(8,9); // RX Arduino 8, TX Arduino 9.

class Sensor { // Criando uma classe para ficar mais fácil usar os sensores
    uint8_t ID_num ;
    OneWire _Wire;
    DallasTemperature sensor;
  public:
    void SetPin(uint8_t pin1) {
        _Wire.begin(pin1);
        sensor.setOneWire(&_Wire);
        sensor.setResolution(12);
        sensor.begin(); //INICIA O SENSOR
        sensor.requestTemperatures(); }
    float Temp() {
        sensor.requestTemperatures();
        return (sensor.getTempCByIndex(0)); }
    void SetID(uint8_t n) {
        ID_num = n;}
    uint8_t ID() {
        return (ID_num);}
};
Sensor TempAmbiente; // Crio um tipo de sensor de temperatura que é para medir o ambiente

void setup() {
  delay(7000); // Aguarda um tempo para inicialização do ESP
  TempAmbiente.SetPin(2); // Defino o pino 2 como o pino do sensor de temperatura
  TempAmbiente.SetID(1);  // Seto o ID como o sensor de temperatura do ambiente como 1
  Serial.begin(9600); //INICIALIZA A SERIAL
  SoftSerial.begin(9600);
}

void loop() {

  
  EnviaESP(TempAmbiente.ID(),TempAmbiente.Temp()); // Envio para o ESP os dados do ID e da temperatura
  EscutandoESP(8000); // O Arduino ouve o ESP-01 por 8 segundos, para imprimir as mensagens seriais.
  
}

void EnviaESP(uint8_t ID, float Temperatura){
  
   SoftSerial.print(ID);SoftSerial.print("|");
   SoftSerial.print(Temperatura);SoftSerial.println("|");
}

void EscutandoESP(int tempo){
  unsigned long time1;
  char check[2];
  char resposta[25] = {"         "};
  byte leitura, i=0;

  time1 = millis();
while(abs((millis()-time1)<tempo)){   
  leitura=255;
    
if(SoftSerial.available()>0){
  while(leitura != 10){
    if(SoftSerial.available()>0){
      leitura = SoftSerial.read();
 //     Serial.print((char)leitura);
      
      resposta[i]= (char)leitura;
      i++; 
    }
  }
  i=0;

  for(int j=0; (int)resposta[j] != 10; j++)
  Serial.print(resposta[j]);
  Serial.println(); 
}
}
}

Com o código carregado, tudo já está funcionando se os dados foram colocados corretamente.

Note que por este código só estamos utilizando um sensor, mas para utilizar outros é bem simples, basta no loop setup você definir o pino de conexão desse sensor e o ID dele. Exemplo:

// (...)
Sensor TempAmbiente, TempExterna;

void setup() {
  delay(5000);
  TempAmbiente.SetPin(2);
  TempAmbiente.SetID(1);
  TempExterna.SetPin(3);
  TempExterna.SetID(2);
  Serial.begin(9600); //INICIALIZA A SERIAL
  SoftSerial.begin(9600);
}

void loop() {

  EnviaESP(TempAmbiente.ID(),TempAmbiente.Temp());
  EscutandoESP(8000); 
  EnviaESP(TempExterna.ID(),TempExterna.Temp());
  EscutandoESP(8000); 
}

// (...)

Inicie a conexão serial para verificar se está funcionando corretamente. Se caso tiver, você vera mensagens como esta:

Um possível erro

Um possível erro pode estar no endereço do host. No nosso código para ESP-01 o endereço do host foi colocado direto como

IPAddress server_addr(54, 39, 75, 7); // O IP DO SERVIDOR DA CLEVER CLOUD

Se caso não estiver funcionando, pode ser que o seu servidor seja outro. Para descobrir o IP do seu HOST, copie o endereço http dele, e vá no Prompt de comandos

Digite: ping (endereço do host)

E assim você receberá o endereço do seu servidor de banco de dados.


Gerando um Gráfico

Uma das vantagens do Clever Cloud é que ele permite manipular os dados em uma interface gráfica. 

Para fazer o download de todo a tabela de dados das temperaturas registradas é bem simples. Entre na planilha em “PHPMyAdmin > Databases > (nome do banco de dados) > Temperatura”

Clique em export, .

Escolha o melhor formato para que você possa manipular esses dados (eu escolhi CSV do Excel)

Em seguida clique em Go.

Abra o arquivo no Excel, pressione Ctrl + L (ou Ctrl + F se for a versão em inglês), e substitua todo o ponto por vírgula, se caso seus números forem com a notação de decimais com vírgula.

Inverta de lugar as colunas DATA_HORA e Temperatura.

Gere um gráfico de dispersão linear selecionando todos os pontos.

E o resultado será este:

Onde esta é a medição da temperatura no meu quarto no fim de semana.

Usando o próprio Clever Cloud para gerar o gráfico.

É possível usar o próprio Clever Cloud para gerar o gráfico, clicando em “Display Chart”

E você deverá selecionar o número máximo de colunas. Não achei muito viável porque demora bastante para gerar os gráficos.

Algumas decisões de projeto e informações

  • O ESP-01 não foi usado para receber comandos AT porque nessa configuração ele deu problemas com o banco de dados, que sempre retornava erros na conexão (motivo desconhecido)
  • Poderia ligar diretamente o ESP-01 a porta serial nativa do Arduino Uno, mas isso não pareceu uma boa escolha por causa do excesso de informação no Monitor Serial.
  • o Arduino envia uma informação ao ESP-01 e aguardo 8 segundos para enviar outra, para garantir que não haverá colisões de dados, já que com o uso do Software Serial fica muito dificil fazer uma lógica para o envio de informações bem rápidas e sem colisão. Por sorte o tempo de espera não é um fator crítico para essa aplicação.
  • Para aprender mais sobre as bibliotecas usadas, recomendo sempre consultar a guia “Arquivo > Exemplos”, ou visitar o github dos autores.
  • O horário do timestamp é gravado no horário UTC 0, por isso, se caso precisar do horário UTC -3, faça um script ou fórmula do excel para manipular essa informação da maneira que desejar.

Conclusões

Então assim aprendemos como criar um sistema de Datalogger sem a necessidade de uma mídia fisica ou local para gravar os dados.

Se caso você dominar tecnologias como PHP e outras, é bem interessante apresentar os dados em tempo real para serem visíveis.

É altamente recomendado que se você altere o código e deixe do melhor jeito para a sua aplicação, pois ele é livre.

Espero que você tenha tido um bom aprendizado. Se você montou e curtiu muito o resultado, nos marque lá no instagram: @eletrogate

Gostou? Deixe um curtir. Se caso quiser deixar uma dúvida, ou um elogio, deixe um comentário!

Obrigado por ter lido até aqui.

Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.


Sobre o Autor


Gustavo Nery

Cursando Engenharia de Controle e Automação pela UFMG. Apaixonado por eletrônica, computação e tecnologias na área de sistemas embarcados. Nos tempos livres me divido entre desenvolver pesquisa na universidade, adquirir novos conhecimentos e estar com a família.


Eletrogate

30 de junho de 2020 Atualizado em: 15 set 2022

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Componentes Eletronicos

Conceitos Básicos sobre Solda Eletrônica

Eletrogate26 de janeiro de 2023

Este post aborda os tipos de ferro de solda, tipos de solda, acessórios para o processo e procedimentos para manutenção do ferro de solda.

Componentes Eletronicos

Conceitos Básicos sobre Solda Eletrônica

Eletrogate26 de janeiro de 2023

Este post aborda os tipos de ferro de solda, tipos de solda, acessórios para o processo e procedimentos para manutenção do ferro de solda.

Sensores

MPU6050 com BluePill e STM32CubeIDE

Eletrogate19 de janeiro de 2023

Neste post, veremos como medir aceleração e velocidade angular utilizando o MPU6050 junto de uma BluePill programada pelo STM32CubeIDE.

Sensores

MPU6050 com BluePill e STM32CubeIDE

Eletrogate19 de janeiro de 2023

Neste post, veremos como medir aceleração e velocidade angular utilizando o MPU6050 junto de uma BluePill programada pelo STM32CubeIDE.

Robótica

Controle de Corrente em Servomotores

Eletrogate12 de janeiro de 2023

Este post trata acerca de um simples sistema que visa ajustar o período do pulso de controle de um servomotor evitando que este permaneça em um estado de alto consumo de corrente.

Robótica

Controle de Corrente em Servomotores

Eletrogate12 de janeiro de 2023

Este post trata acerca de um simples sistema que visa ajustar o período do pulso de controle de um servomotor evitando que este permaneça em um estado de alto consumo de corrente.

Tipos de Arduino

BluePill com STM32CubeIDE

Eletrogate6 de janeiro de 2023 Atualizado em: 09 jan 2023

Neste post, desenvolveremos, utilizando recursos do STM32CubeIDE, um simples piscaLED para a placa BluePill.

Tipos de Arduino

BluePill com STM32CubeIDE

Eletrogate6 de janeiro de 2023 Atualizado em: 09 jan 2023

Neste post, desenvolveremos, utilizando recursos do STM32CubeIDE, um simples piscaLED para a placa BluePill.

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!

blog-eletrogate-logo-footer

Rua Rio de Janeiro, 441 - Sala 1301
Centro - Belo Horizonte/MG
CEP 30160-041
*Não temos atendimento físico

ANWAR SLEIMAN HACHOUCHE - ME
CNPJ: 18.917.521/0001-73

Atendimento

(31) 3142-3800

contato@eletrogate.com


Seg a Sex - das 8h às 17h

Institucional

  • Apostilas
  • Quem Somos
  • Privacidade
  • Seja um Redator
  • Trabalhe Conosco

Nos acompanhe

Facebook Instagram Youtube

© ELETROGATE 2023 - Todos os direitos reservados. Termos de uso e Política de privacidade.