Você está na página 1de 16

 Acesse nossa loja

Arduino + Banco de dados MySQL Apostilas Arduino

PUBLICADO POR  GUSTAVO NERY EM  30 DE JUNHO DE 2020

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. Categorias

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 A4988 (1)

muito interessante poder salvar todas as medidas para que seja fácil avaliar se o Adaptador (1)
medicamento está em boas condições.
Arduino (47)
Existem diversas soluções comerciais para o armazenamento de dados em longo
Arduino MEGA (1)
prazo, e essa é a função de um Datalogger. A principal desvantagem de um
datalogger comum é o acesso aos dados. Arduino Pro Mini (1)

Automação Residencial (3)


O acesso aos dados em um datalogger sem conexão sem �o se dá por uma
interface física, o que di�culta uma visualização em tempo real. Com o uso de um Bluetooth (1)
banco de dados em nuvem, temos a vantagem de reter dados como um Datalogger
Componentes eletrônicos
e a visualização em tempo real.
(2)

Controle Remoto IR (1)

Banco de Dados DHT11 (1)

Diagrama esquemático (1)

Display (1)
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. Display 7 segmentos (2)

Um banco de dados é um conjunto de dados relacionados entre si que são Display LCD (1)
organizados de forma extremamente otimizada para que seja rápido a busca, e de Display OLED (1)
forma compacta.
ESP-01 (4)
De forma muito simplista, podemos comparar o armazenamento de um banco de
ESP01 (2)
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 ESP12 (3)
várias tabelas) . O que chamamos no excel de colunas, no banco de dados ESP32 (2)
chamamos de campo. E o que no Excel chamamos de linha, no banco de dados
ESP8266 (4)
chamamos de registro.
GPS (1)
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 HC-06 (1)
através dela possamos incluir dados, consultar os dados e gerenciar todo o banco HX711 (1)
de dados. Recomendo fortemente que pesquise sobre o assunto caso tenha
IOT (1) 
interesse.
Keypad (1)

Servidor de Banco de Dados Laser (1)

LDR (1)

MAX7219 (1)
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 Mini Bomba (1)
diferentes: ou uma máquina local, ou em uma rede local, ou até mesmo em uma
Módulo Relé (1)
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. Motor de passo (2)

Multifunções Shield (1)


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 NFC (1)
interessantes para desenvolvedores e analista de dados, e que é grátis para até
NodeMCU (5)
10mb de uso.
PCF8574 (1)
Existem outros projetos na internet que utilizam o db4free.net, que é bom, mas em
Ponte H (3)
minha experiência achei uma ferramenta bastante instável, mas tem a vantagem de
poder ser utilizado até 200mb. Relé (2)

A linguagem de consulta de dados que vamos escolher é a MySQL, por ser simples, RFID (1)
possuir uma comunidade grande e uma boa biblioteca para Arduino. Sem categoria (8)

Sensor de chuva (1)

Projeto a ser desenvolvido Sensor de umidade do


solo (1)

Sensor obstáculo (1)


Tendo em vista todos estes conceitos aprendidos, iremos desenvolver um sistema
temperatura (1)
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 TM1637 (1)
dados online, e posteriormente possamos analisar. USB Host (1)

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.
Tudo sobre Arduino

Materiais Arduino + Banco de


dados MySQL
0

 30 de junho de 2020

Para este projeto escolhemos um Arduino Uno + o ESP-01 porque sabemos que
Guia completo do
grande parte de vocês possui um Arduino Uno, e dessa forma poderemos fazer o Arduino Pro Mini
0
projeto com os materiais que vocês já possuem.
 29 de abril de 2020

É possível facilmente adaptar o projeto para uma placa NodeMCU, e �ca a critério
Gravando
de vocês escolherem o melhor caminho.
programas no
0

Arduino Uno ESP-01 com o


Adaptador USB
ESP8266-01
 22 de abril de 2020
Adaptador para ESP-01 para protoboard
Dispensador
Proboard de 400 pontos
automático de
0
2 resistor 1K álcool líquido para
lavar as mãos
1 resistor 2K2
 16 de abril de 2020
2 resistor 4K7
Sinalizador para te
Sensores de temperatura DS18B20
lembrar de lavar as
0
Jumpers de ligação mãos

(Desejável) Adaptador USB para ESP-01  25 de março de 2020



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 �nalizar.

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 �rmware 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 �rmware 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
O EESSPP--0011 éé aalliim
meennttaaddoo eem
m 33..33VV

OObbss:: O O RRXX eessttáá ccoom


m oo RRXX,, ee oo TTXX ccoom
m oo TTXX,, ee oo ppiinnoo G
GPPIIO
O__00 eessttáá lliiggaaddoo
ddiirreettaam
meennttee aaoo G GNND
D..

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

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:

Arduino
1 /*
2 * Programa para ESP-01
3 * Eletrogate
4 * Arduino IDE versão 1.8.12
5 */
6 #include <ESP8266WiFi.h>          
7 #include <MySQL_Connection.h>
8 #include <MySQL_Cursor.h>
9
10 IPAddress server_addr(54, 39, 75, 7); // O IP DO SERVIDOR DA CLEVER CLOUD
11 char user[] = ">USUARIO CLEVER CLOUD<";              // Usuario MySQL
12 char password[] = ">COLOQUE AQUI A SENHA<";        //   Senha MySQL
13
14 char ssid[] = ">SEU USUARIO WIFI<";         //  Nome de rede Wifi
15 char pass[] = ">SENHA_WIFI<";     //            Senha Wi-Fi
16
17 char INSERT_DATA[] = "INSERT INTO >NOME_DO_BANCO_DE_DADOS<.Temperatura (ID_SENSOR, Temperatura) VALUES (%
18 //   EXEMPLO ACIMA:  "INSERT INTO b3d3z8bggux9ngtdusfw.Temperatura (ID_SENSOR, Temperatura) VALUES (%d,%s
19
20 WiFiClient client;            
21 MySQL_Connection conn(&client);
22 MySQL_Cursor* cursor;
23
24 void sseettuupp() {
25   SSeerriiaall.begin(9600);
26   VerificaWiFi();
27 }
28
29 void lloooopp() {
30   int id;
31   float temp;
32
33   AguardaDados();
34   Leitura(&id, &temp);
35   ddeellaayy(100);
36   EnviaDados(id, temp);
37   SSeerriiaall.println();
38 }
39
40 void AguardaDados() {
41   wwhhiillee (!(SSeerriiaall.available() > 0)) {}
42 }
43 void Leitura(int *id, float *temp) {
44   char  mensagem[20];
45   byte atual, i = 0;
46   atual = 255;
47
48   iiff (SSeerriiaall.available() > 0) {
49     wwhhiillee (atual != 10) {
50       iiff (SSeerriiaall.available() > 0) {
51         atual = SSeerriiaall.read();
52         //     Serial.print((char)leitura);
53         mensagem[i] = (char)atual;
54         i++;
55       }
56     }
57     i = 0;
58     *id = atoi(strtok(mensagem, "|"));
59     *temp = atof(strtok(NULL, "|"));
60   }
61
62 }
63 void EnviaDados(int id, float temp) {
64
65   char query[128];
66   char temperatura[10];
67   VerificaWiFi();
68   iiff (conn.connect(server_addr, 3306, user, password)) {
69     ddeellaayy(1000);
70     MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
71     // Save
72     dtostrf(temp, 1, 1, temperatura);
73     sprintf(query, INSERT_DATA, id, temperatura);
74     // Execute the query
75     cur_mem->execute(query);
76     // Note: since there are no results, we do not need to read any data
77     // Deleting the cursor also frees up memory used
78     delete cur_mem;
79     SSeerriiaall.println(); SSeerriiaall.println("Data recorded."); //
80   }
81   eellssee
82     SSeerriiaall.println(); SSeerriiaall.println("Connection failed."); //
83   conn.close();
84 }
85
86 void VerificaWiFi() {
87   iiff (WiFi.status() != WL_CONNECTED) {
88     //Serial.println("Sem conexão"); //
89     WiFi.disconnect();
90     ddeellaayy(1000);
91     WiFi.begin(ssid, pass);
92     // Serial.println();Serial.println("Conectando ao WiFi."); //
93     wwhhiillee (WiFi.status() != WL_CONNECTED) {
94       ddeellaayy(500);
95     }
96     // Serial.println();Serial.println("Conectado a rede!"); // 
97   }
98 }

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.

Arduino
1 #include <OneWire.h> // Biblioteca para o protocolo de comunicação
2 #include <DallasTemperature.h> //Biblioteca das funções do sensor de temperatura
3 #include <SoftwareSerial.h> // A biblioteca para comunicar o Arduino com o ESP-01
4
5 SoftwareSerial SoftSerial(8,9); // RX Arduino 8, TX Arduino 9.
6
7 class Sensor { // Criando uma classe para ficar mais fácil usar os sensores
8     uint8_t ID_num ;
9     OneWire _Wire;
10     DallasTemperature sensor;
11   public:
12     void SetPin(uint8_t pin1) {
13         _Wire.begin(pin1);
14         sensor.setOneWire(&_Wire);
15         sensor.setResolution(12);
16         sensor.begin(); //INICIA O SENSOR
17         sensor.requestTemperatures(); }
18     float Temp() {
19         sensor.requestTemperatures();
20         rreettuurrnn (sensor.getTempCByIndex(0)); }
21     void SetID(uint8_t n) {
22         ID_num = n;}
23     uint8_t ID() {
24         rreettuurrnn (ID_num);}
25 };
26 Sensor TempAmbiente; // Crio um tipo de sensor de temperatura que é para medir o ambiente
27
28 void sseettuupp() {
29   ddeellaayy(7000); // Aguarda um tempo para inicialização do ESP
30   TempAmbiente.SetPin(2); // Defino o pino 2 como o pino do sensor de temperatura
31   TempAmbiente.SetID(1);  // Seto o ID como o sensor de temperatura do ambiente como 1
32 SSeerriiaall begin(9600) //INICIALIZA A SERIAL

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ê de�nir o pino de conexão desse sensor e o
ID dele. Exemplo:

Arduino
1 // (...)
2 Sensor TempAmbiente, TempExterna;
3
4 void sseettuupp() {
5   ddeellaayy(5000);
6   TempAmbiente.SetPin(2);
7   TempAmbiente.SetID(1);
8   TempExterna.SetPin(3);
9   TempExterna.SetID(2);
10   SSeerriiaall.begin(9600); //INICIALIZA A SERIAL
11   SoftSerial.begin(9600);
12 }
13
14 void lloooopp() {
15
16   EnviaESP(TempAmbiente.ID(),TempAmbiente.Temp());
17   EscutandoESP(8000);
18   EnviaESP(TempExterna.ID(),TempExterna.Temp());
19   EscutandoESP(8000);
20 }
21
22 // (...)

Inicie a conexão serial para veri�car 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.

Manipulando os dados para gerar um grá�co

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

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á�co de dispersão linear selecionando todos os pontos.


E o resultado será este:

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

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

É possível usar o próprio Clever Cloud para gerar o grá�co, 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á�cos.

Algumas decisões de projeto e informações

O ESP-01 não foi usado para receber comandos AT porque nessa con�guraçã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 �ca muito di�cil 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 �sica 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.

sssss
No votes yet.
Voting is currently disabled, data maintenance in progress.

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.

Artigos Relacionados

15 de maio de 2020 7 de maio de 2020

Criando uma Rele Automação 29 de abril de 2020

Shield ESP-01 com residencial com a Guia completo do

alimentação de 100 Alexa (Amazon) e Arduino Pro Mini

– 240V ESP-01
 Leia mais

 Leia mais  Leia mais


TAMBÉM NO ELETROGATE

Guia básico dos Guia completo do Automação Residencial Dispensador


Módulos TX / RX ARDUINO MEGA com Alexa … de
há 2 anos • 68 COMENTÁRIOS há 2 anos • 21 COMENTÁRIOS há 3 meses • 67 COMENTÁRI… há 2 meses

Just another WordPress site Just another WordPress site Introdução   O conceito da Introdução   Se você leu
automação residencial, ou nosso post do Sinalizad
domótica, surgiu na França para te lembrar de lavar

0 COMENTÁRIOS eletrogate 🔒 Disqus' Privacy Policy 


1 Iniciar sessão

 Recomendar t Tweet f Partilhar Mostrar primeiro os mais votados

Escreva o seu comentário...


INICIE SESSÃO COM O
OU REGISTE-SE NO DISQUS ?

Nome

Seja o primeiro a comentar!

✉ Subscrever d Acerca do DisqusAdicionar o DisqusAdicionar ⚠ Do Not Sell My Data

Redes sociais

 

Eletrogate Atendimento
 Acesse nossa loja  (31) 3142-3800
 Sobre nós  (31) 99451-3800
 Apostilas  contato@eletrogate.com
 Contato  Segunda a Sexta das 08:00
às 17:00

Eletrogate © 2020 Todos direitos reservados.

Você também pode gostar