Arduino - MySQL
O Arduino pode coletar dados de sensores e armazená-los em um banco de dados MySQL. O Arduino também pode obter dados (comandos) do banco de dados MySQL e controlar LED, motor, atuador, dispositivo...
Neste tutorial, vamos aprender:
- A melhor forma de o Arduino interagir com o banco de dados MySQL
- Como o Arduino insere dados no banco de dados MySQL
- Como o Arduino atualiza dados no banco de dados MySQL
- Como o Arduino obtém dados do banco de dados MySQL

O tutorial fornece o código Arduino para dois casos:
- Arduino Uno R4 WiFi
- Arduino Uno/Mega com Ethernet Shield
Hardware Necessário
| 1 | × | Arduino UNO R4 WiFi | |
| 1 | × | Alternatively, DIYables STEM V4 IoT | |
| 1 | × | Alternatively, DIYables STEM V4B IoT | |
| 1 | × | Cabo USB Tipo-A para Tipo-C (para PC com USB-A) | |
| 1 | × | Cabo USB Tipo-C para Tipo-C (para PC com USB-C) |
Alternatively if using Ethernet:
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Arduino - MySQL
Se você não tem muito conhecimento sobre a arquitetura do sistema, os dois termos MySQL Database e MySQL Server podem ser entendidos como a mesma coisa. Você vai descobrir as diferenças mais tarde, quando souber mais sobre a arquitetura do sistema.
Existem duas formas de o Arduino interagir com o banco de dados MySQL:
- O Arduino interage diretamente com o MySQL Server por meio de uma conexão MySQL (chamada de forma direta)
- O Arduino interage indiretamente com o MySQL Server por meio de uma conexão HTTP (chamada de forma indireta)
Vamos descobrir qual é a melhor.
O Arduino interage diretamente com o MySQL Server

Isso parece mais simples, mas há muitas desvantagens:
- Isso permite que uma conta de usuário MySQL acesse remotamente o banco de dados MySQL ⇒ Isso é perigoso do ponto de vista da segurança, mesmo que privilégios limitados tenham sido concedidos à conta de usuário.
- Os dados PRECISAM ser processados no Arduino e/ou no servidor MySQL ⇒ Isso aumenta a complexidade do código Arduino e do script MySQL. Principalmente, consome muitos recursos do Arduino (uso de memória e CPU).
- Em alguns casos, o servidor MySQL pode retornar uma quantidade muito grande de dados para o Arduino ⇒ Isso pode fazer o Arduino ficar sem memória.
- A maioria das bibliotecas MySQL disponíveis não suporta SSL/TLS. Os dados, incluindo usuário/senha, serão enviados em texto puro ⇒ outro problema de segurança.
O Arduino interage indiretamente com o MySQL Server via HTTP/HTTPS
Esta forma indireta resolve todos os problemas que a forma direta tem. Antes de ver como a forma indireta supera as desvantagens da forma direta, vamos ver primeiro como ela funciona
Como funciona
- Passo 1: O Arduino faz uma requisição HTTP para o servidor web
- Passo 2: O servidor web executa o script PHP
- Passo 3: O script PHP obtém os dados da requisição HTTP, processa os dados e depois interage com o banco de dados MySQL.
- Passo 4: O script PHP processa o resultado e retorna o resultado para o Arduino via resposta HTTP

Neste tutorial, o servidor web e o servidor MySQL serão instalados no PC.
Parece complicado, mas não é. Agora vamos ver como a forma indireta supera as desvantagens da forma direta.
- Instalando o servidor MySQL e o servidor HTTP no mesmo servidor físico, podemos limitar uma conta de usuário MySQL para acessar SOMENTE pelo localhost. Além disso, o usuário/senha da conta MySQL fica armazenado no servidor (passo 3), o que torna o sistema mais seguro.
- Os dados são processados por um script PHP (passo 3 e passo 4). Isso reduz o trabalho e a complexidade para o Arduino e os servidores MySQL. Processar dados com código PHP é muito mais fácil do que com código Arduino e script MySQL.
- O script PHP pode processar os dados e enviar apenas os dados necessários para o Arduino (passo 4), evitando que o Arduino fique sem memória.
- A maioria das bibliotecas Ethernet/WiFi suporta TLS/SSL, o que nos permite fazer requisições HTTPS. Usando HTTPS, os dados são criptografados e trocados com segurança pela Internet.
No passo 1, podemos usar outro usuário/senha para fazer a autenticação entre o Arduino e o servidor web. Observe que o usuário/senha HTTP deve ser diferente do usuário/senha do MySQL por motivos de segurança.
Com essas vantagens, o restante deste tutorial vai mostrar como usar o Arduino com MySQL pela forma indireta.
Arduino - MySQL via HTTP/HTTPS
Precisamos seguir os seguintes passos:
- Instalar o servidor MySQL, o servidor web e o PHP no seu PC
- Ativar o MySQL e o servidor web
- Criar uma conta de usuário MySQL
- Criar um banco de dados MySQL
- Criar uma tabela MySQL
- Escrever um ou mais arquivos de script PHP
- Escrever o código Arduino
Agora vamos fazer isso passo a passo.
1. Instalar o servidor MySQL, o servidor web e o PHP no seu PC
Felizmente, o pacote XAMPP inclui tudo isso. Só precisamos instalar uma vez
- Baixe o XAMPP neste link
- Instale-o.
Depois da instalação, você verá a pasta C:\xampp\htdocs no seu PC. É aqui que você coloca o código PHP (veja mais adiante).
2. Ativar o MySQL e o servidor web
- Abra o XAMPP Control Panel
- Clique no botão Start para ativar o MySQL e o servidor web (veja a imagem abaixo)

3. Criar uma conta de usuário MySQL
Vamos criar uma conta MySQL que só pode se conectar ao banco de dados MySQL a partir do localhost.
- Mesmo que o usuário/senha sejam revelados, os invasores ainda não conseguem acessar o seu banco de dados MySQL, a menos que tomem o controle do seu PC.
- Como o PHP e o MySQL estão instalados no mesmo PC, o PHP pode usar esse usuário/senha para se conectar ao banco de dados MySQL.
Vamos criar uma conta de usuário MySQL com o usuário Arduino e a senha ArduinoGetStarted.com:
- Abra o Prompt de Comando no seu PC. Não feche até o final do tutorial.
- Digite o seguinte comando no Prompt de Comando:
- Por padrão, o MySQL tem uma conta root sem senha. Você deve adicionar uma senha
(por exemplo, your-root-password) para a conta root digitando o seguinte comando no Prompt de Comando:
- Digite o seguinte comando no Prompt de Comando:
- Digite your-root-password e pressione Enter
- Crie uma conta de usuário MySQL com o usuário Arduino e a senha ArduinoGetStarted.com copiando os comandos abaixo e colando no Prompt de Comando:
Pronto, você criou com sucesso uma conta de usuário MySQL. Memorize o usuário/senha, eles serão usados no script PHP.
4. Criar um banco de dados MySQL
Vamos criar um banco de dados chamado db_arduino digitando o seguinte comando no Prompt de Comando:
5. Criar uma tabela MySQL
Vamos criar uma tabela chamada tbl_temp copiando os comandos abaixo e colando no Prompt de Comando:
6. Escrever um ou mais arquivos PHP
Crie um arquivo PHP chamado insert_temp.php que obtém a temperatura da requisição HTTP e a insere no banco de dados.
- Coloque este arquivo dentro da pasta C:\xampp\htdocs
- Descubra o endereço IP do seu PC. Se você não sabe como fazer isso, pesquise no Google.
- Teste o código PHP abrindo um navegador (por exemplo, o Chrome) e acessando este link: http://192.168.0.26/insert_temp.php?temperature=27.5 . Observe que você precisa substituir o endereço IP acima pelo endereço do seu PC.
- A saída no navegador

- Verifique se os dados foram armazenados no banco de dados digitando o seguinte comando no Prompt de Comando:
Como você pode ver, a temperatura de 27.5 está armazenada no banco de dados. O próximo passo é escrever o código Arduino que faz uma requisição HTTP parecida para o seu PC.
7. Escrever o código Arduino
Vamos usar o Arduino Uno e o Ethernet Shield ou o Arduino Uno R4 WiFi para o teste
O código Arduino abaixo faz uma requisição HTTP para o seu PC para inserir a temperatura de 29.1°C no banco de dados
Código Arduino para Arduino Uno R4 WiFi
Código Arduino para Arduino Uno/Mega e Ethernet Shield
Passos Rápidos
- Se estiver usando o Ethernet Shield, encaixe o Ethernet Shield no Arduino Uno
- Conecte o cabo Ethernet ao Ethernet Shield
- Conecte o Arduino Uno ao PC via cabo USB
- Troque o endereço IP no código pelo endereço IP do seu PC
- Compile e faça o upload do código para o Arduino
- Abra o Serial Monitor
- O resultado no Serial Monitor
- Verifique se os dados foram armazenados no banco de dados digitando o seguinte comando no Prompt de Comando:
Como você pode ver, a temperatura 29.1 está armazenada no banco de dados.
Como o Arduino insere, atualiza ou obtém dados no/do banco de dados MySQL
No exemplo acima, aprendemos como inserir dados no banco de dados MySQL. Para atualizar e obter dados do banco de dados, é parecido. Você só precisa alterar as consultas MySQL no script PHP. Você pode aprender mais no W3Schools
Uso Avançado
Para aumentar a segurança
- Você pode alterar o código Arduino para fazer HTTPS em vez de HTTP. Veja Arduino - HTTPS
- Você pode usar um usuário/senha para fazer a autenticação entre o Arduino e o servidor web. Veja Autenticação de acesso básica
※ Nota:
Para criar um sistema completo com o mais alto nível de segurança, precisamos fazer mais (como prevenção de MySQL injection, transformar o HTTPS em REST API, usar o formato Json para os dados ...). No entanto, este tutorial é dedicado a iniciantes que estão aprendendo Arduino. Nós o fizemos o mais simples possível. Depois de aprender este tutorial, os usuários podem expandi-lo.