Arduino Nano ESP32 - MySQL

Este tutorial fornece instruções sobre como usar o Arduino Nano ESP32 para inserir/atualizar dados em um banco de dados MySQL, ou ler os dados do banco de dados MySQL

MySQL com Arduino Nano ESP32

Hardware Necessário

1×Arduino Nano ESP32
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)
1×(Opcional) Conector de Alimentação DC
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Arduino Nano ESP32 - MySQL

Existem dois termos no MySQL que os iniciantes costumam confundir: Banco de Dados MySQL e servidor MySQL. Eles são diferentes. No entanto, se você é iniciante, pode assumir que são a mesma coisa. Mais tarde, você vai perceber as diferenças durante o seu aprendizado.

O Arduino Nano ESP32 pode interagir com o banco de dados MySQL de duas maneiras:

  • Diretamente: O Arduino Nano ESP32 se conecta diretamente ao servidor MySQL e interage com o servidor MySQL usando o protocolo MySQL
  • Indiretamente: O Arduino Nano ESP32 se conecta indiretamente ao servidor MySQL por meio de um servidor web usando o protocolo HTTP/HTTPS.

Qual é a melhor para o ESP32? Vamos descobrir!

O Arduino Nano ESP32 interage diretamente com o Servidor MySQL

Arduino Nano ESP32 diretamente com o MySQL

Interagir diretamente com o MySQL parece simples, mas há muitas desvantagens:

  • Temos que conceder permissões de acesso remoto a uma conta de usuário do MySQL ⇒ Isso é arriscado do ponto de vista da segurança, mesmo que concedamos privilégios limitados à conta de usuário.
  • O Arduino Nano ESP32 DEVE armazenar e enviar consultas MySQL ao servidor MySQL ⇒ É necessário escrever muito código para o Arduino Nano ESP32, além de esgotar os recursos do Arduino Nano ESP32 (uso de memória e CPU).
  • O Arduino Nano ESP32 DEVE processar uma resposta MySQL complexa (de tamanho muito grande em alguns casos) ⇒ Isso pode fazer o Arduino Nano ESP32 ficar sem memória
  • O servidor MySQL precisa processar os dados brutos ⇒ aumenta a complexidade do script MySQL.
  • A maioria das bibliotecas MySQL para o Arduino Nano ESP32 não suporta SSL/TLS ⇒ Os dados e o usuário/senha são enviados sem criptografia ⇒ outro problema de segurança.

O Arduino Nano ESP32 interage indiretamente com o Servidor MySQL via HTTP/HTTPS

Interagir com o MySQL indiretamente via HTTP/HTTPS resolve todos os problemas do acesso direto.

Como funciona

  • Passo 1: O Arduino Nano ESP32 inclui os dados na requisição HTTP/HTTPS e envia a requisição ao servidor Web
  • Passo 2: O servidor Web executa um script PHP que trata a requisição do Arduino Nano ESP32
  • Passo 3: O script PHP extrai 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 apenas o resultado necessário ao Arduino Nano ESP32 por meio da resposta HTTP
MySQL HTTP com Arduino Nano ESP32

Vamos instalar o servidor MySQL, o servidor Web e o PHP no PC. Na verdade, podemos instalá-los em um servidor dedicado ou em um serviço de nuvem, como o AWS EC2.

Abaixo está como a forma indireta resolve os problemas da forma direta.

  • Podemos instalar o servidor HTTP e o servidor MySQL no mesmo servidor físico, e podemos dar acesso limitado a uma conta de usuário do MySQL (por exemplo, acesso SOMENTE via localhost) ⇒ seguro
  • O usuário/senha da conta MySQL é armazenado no servidor ⇒ seguro.
  • Os dados são processados por um script PHP ⇒ Isso reduz a carga e a complexidade para o Arduino Nano ESP32 e para o servidor MySQL.
  • O script PHP consegue processar os dados com muito mais facilidade do que o código do Arduino Nano ESP32 e o script MySQL ⇒ Simplifica o código do Arduino Nano ESP32 e o script MySQL
  • O script PHP pode processar os dados e enviar apenas os dados necessários ao Arduino Nano ESP32 (Passo 4) para evitar que o Arduino Nano ESP32 fique sem memória.
  • O Arduino Nano ESP32 consegue fazer requisições HTTPS facilmente ⇒ os dados são criptografados.

Observe que a autenticação entre o Arduino Nano ESP32 e o Servidor Web deve ser independente da autenticação do MySQL. Por exemplo, o usuário/senha HTTP deve ser diferente do usuário/senha do MySQL.

Por causa dessas vantagens, este tutorial usará a forma indireta.

Arduino Nano ESP32 para MySQL via HTTP/HTTPS

Abaixo estão os passos que precisamos seguir:

  • Instalar o pacote XAMPP, que inclui servidor MySQL, servidor Web e PHP no seu PC
  • Criar uma conta de usuário do MySQL
  • Criar um banco de dados MySQL
  • Criar uma tabela MySQL
  • Escrever um ou mais arquivos de script PHP
  • Escrever o código do Arduino Nano ESP32

1. Instalando o servidor MySQL, o servidor Web e o PHP no seu PC

  • Baixe e instale o XAMPP neste link. Após a instalação, verifique a pasta C:\xampp\htdocs no seu PC. É onde você coloca o código PHP (veja mais adiante).
  • Abra o XAMPP Control Panel
  • Clique nos botões Start para ativar o MySQL e o servidor Web (como na imagem abaixo)
XAMPP com Arduino Nano ESP32

2. Criando uma conta de usuário do MySQL

Vamos criar uma conta MySQL com permissões de acesso somente via localhost.

  • Mesmo que invasores saibam o usuário/senha, eles não conseguem acessar o seu banco de dados MySQL, a menos que assumam o controle do seu PC.
  • Este usuário/senha será usado pelo PHP para se conectar ao banco de dados MySQL.

Este tutorial cria uma conta de usuário MySQL com usuário e senha ESP32 e newbiely.com, respectivamente:

  • Abra o Prompt de Comando no seu PC. Não o feche até o final do tutorial.
  • Digite o seguinte comando no Prompt de Comando:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\YOUR_USER>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • Por padrão, o MySQL tem a conta root sem senha. É altamente recomendado definir uma senha para a conta root (por exemplo, YOUR_ROOT_PASSWORD) por motivos de segurança. Digite o comando abaixo no Prompt de Comando:
mysqladmin -u root password YOUR_ROOT_PASSWORD
Command Prompt
C:\xampp\mysql\bin>mysqladmin -u root password YOUR_ROOT_PASSWORD C:\xampp\mysql\bin>
  • Digite o comando abaixo no Prompt de Comando para fazer login no servidor MySQL:
mysql.exe -u root -p
  • Digite YOUR_ROOT_PASSWORD e pressione Enter
Command Prompt
C:\xampp\mysql\bin>mysql.exe -u root -p Enter password: ****************** Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.4.6-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
  • Vamos criar uma conta de usuário MySQL com usuário e senha ESP32 e newbiely.com, respectivamente, copiando os comandos abaixo e colando no Prompt de Comando:
CREATE USER 'ESP32'@'localhost' IDENTIFIED BY 'newbiely.com'; GRANT ALL PRIVILEGES ON *.* TO 'ESP32'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ESP32'@'localhost' IDENTIFIED BY 'newbiely.com'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ESP32'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]>

Você criou uma conta de usuário MySQL com sucesso. Anote o usuário/senha. Eles serão usados no script PHP.

3. Criando um banco de dados MySQL

Crie um banco de dados db_nano_esp32 digitando o seguinte comando no Prompt de Comando:

CREATE DATABASE db_nano_esp32 CHARACTER SET = 'utf8' COLLATE = 'utf8_general_ci';
Command Prompt
MariaDB [(none)]> CREATE DATABASE db_nano_esp32 CHARACTER SET = 'utf8' COLLATE = 'utf8_general_ci'; Query OK, 1 row affected (0.003 sec) MariaDB [(none)]>

4. Criando uma tabela MySQL

Crie uma tabela tbl_temp copiando os comandos abaixo e colando no Prompt de Comando:

USE db_nano_esp32; CREATE TABLE tbl_temp ( temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, temp_value FLOAT DEFAULT 0.00, PRIMARY KEY (temp_id) );
Command Prompt
MariaDB [(none)]> USE db_nano_esp32; Database changed MariaDB [db_nano_esp32]> MariaDB [db_nano_esp32]> CREATE TABLE tbl_temp ( -> temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, -> temp_value FLOAT DEFAULT 0.00, -> PRIMARY KEY (temp_id) -> ); Query OK, 0 rows affected (0.044 sec) MariaDB [db_nano_esp32]>

6. Escreva os arquivos de script PHP

Crie um arquivo insert_temp.php usando qualquer editor de texto (por exemplo, Notepad/Notepad++). Vamos escrever o script neste arquivo para extrair o valor da temperatura da requisição HTTP e inserir o valor da temperatura no banco de dados.

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "ESP32"; $password = "newbiely.com"; $database_name = "db_nano_esp32"; // Create MySQL connection fom PHP to MySQL server $connection = new mysqli($servername, $username, $password, $database_name); // Check connection if ($connection->connect_error) { die("MySQL connection failed: " . $connection->connect_error); } $sql = "INSERT INTO tbl_temp (temp_value) VALUES ($temperature)"; if ($connection->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . " => " . $connection->error; } $connection->close(); } else { echo "temperature is not set in the HTTP request"; } ?>
  • Coloque este arquivo dentro da pasta C:\xampp\htdocs
  • Descubra o endereço IP do seu PC. Se você não sabe como, pesquise no Google.
  • Teste o código PHP abrindo um navegador (por exemplo, Chrome) e acessando este link: http://192.168.0.19/insert_temp.php?temperature=26.2. Observe que você precisa substituir o endereço IP acima pelo endereço do seu PC.
  • O navegador mostra como abaixo:
Teste do MySQL
  • Verifique se os dados foram armazenados no banco de dados digitando o seguinte comando no Prompt de Comando:
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_nano_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_nano_esp32]>

Como você pode ver, a temperatura de 26.2 está armazenada no banco de dados. O próximo passo é escrever o código do Arduino Nano ESP32 que faz uma requisição HTTP ao servidor web no seu PC.

7. Escreva o código do Arduino Nano ESP32

O código do Arduino Nano ESP32 abaixo faz uma requisição HTTP ao seu PC para inserir uma temperatura de 30.5°C no banco de dados

/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-mysql */ #include <WiFi.h> #include <HTTPClient.h> const char* WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE IT const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE IT String HOST_NAME = "http://192.168.0.19"; // change to your PC's IP address String PATH_NAME = "/insert_temp.php"; String queryString = "?temperature=30.5"; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); HTTPClient http; http.begin(HOST_NAME + PATH_NAME + queryString); //HTTP int httpCode = http.GET(); // httpCode will be negative on error if(httpCode > 0) { // file found at server if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { }

Passos Rápidos

  • Se esta é a primeira vez que você usa o Arduino Nano ESP32, veja como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
  • Faça a ligação como na imagem acima.
  • Conecte a placa Arduino Nano ESP32 ao seu PC por meio de um cabo USB
  • Altere o endereço IP no código pelo endereço IP do seu PC
  • Compile e envie o código para o Arduino Nano ESP32
  • Abra o Serial Monitor na Arduino IDE
Como abrir o serial monitor na Arduino IDE
  • O resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Connected to server HTTP/1.1 200 OK Date: Tue, 12 Jan 2021 07:52:22 GMT Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1c PHP/7.3.8 X-Powered-By: PHP/7.3.8 Content-Length: 31 Connection: close Content-Type: text/html; charset=UTF-8 New record created successfully disconnected
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
  • Verifique se os dados foram armazenados no banco de dados usando o seguinte comando no Prompt de Comando:
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_nano_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_nano_esp32]>

Como você pode ver, a temperatura 30.5 está armazenada no banco de dados.

Como o Arduino Nano ESP32 insere, atualiza ou obtém dados de/para o banco de dados MySQL

O exemplo acima mostra como inserir dados no banco de dados MySQL. É semelhante para atualizar e ler dados do banco de dados. Você só precisa modificar a consulta MySQL no código PHP. Você pode aprender mais no W3Schools.com

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!