ESP8266 - MySQL

Este tutorial ensina você a usar o ESP8266 para inserir/atualizar dados em um banco de dados MySQL, ou ler os dados de um banco de dados MySQL

ESP8266 NodeMCU MySQL

Hardware Necessário

1×ESP8266 NodeMCU ESP-12F
1×Alternatively, ESP8266 D1 Mini NodeMCU ESP-12F
1×Alternatively, ESP8266 NodeMCU ESP-12E (Uno-form)
1×Micro USB Cable
1×Alternatively, ESP8266 NodeMCU ESP-12F (SMD-form)
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×Protoboard
1×Fios Jumper
1×(Opcional) Conector de Alimentação DC
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para ESP8266

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.

ESP8266 - MySQL

Há 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 descobrir as diferenças durante o seu aprendizado.

O ESP8266 pode interagir com o banco de dados MySQL de duas maneiras:

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

Qual é a melhor para o ESP8266? Vamos descobrir!

O ESP8266 interage diretamente com o Servidor MySQL

ESP8266 NodeMCU diretamente com o MySQL

Interagir com o MySQL diretamente 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 ESP8266 DEVE armazenar e enviar consultas MySQL ao servidor MySQL ⇒ É preciso escrever muito código para o ESP8266 e, além disso, esgota os recursos do ESP8266 (uso de memória e de CPU).
  • O ESP8266 DEVE processar uma resposta complexa do MySQL (em alguns casos, uma quantidade muito grande de dados) ⇒ Isso pode fazer o ESP8266 ficar sem memória
  • O servidor MySQL deve processar os dados brutos ⇒ aumenta a complexidade do script MySQL.
  • A maioria das bibliotecas MySQL para ESP8266 não suporta SSL/TLS ⇒ Os dados e o usuário/senha são enviados sem criptografia ⇒ outro problema de segurança.

O ESP8266 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 ESP8266 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 ESP8266
  • 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 ao ESP8266, via resposta HTTP, apenas o resultado necessário
ESP8266 NodeMCU MySQL HTTP

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 um acesso limitado a uma conta de usuário do MySQL (por exemplo, acesso SOMENTE via localhost) ⇒ seguro
  • O usuário/senha da conta MySQL fica armazenado no servidor ⇒ seguro.
  • Os dados são processados por um script PHP ⇒ Isso reduz a carga e a complexidade para o ESP8266 e para o servidor MySQL.
  • O script PHP consegue processar os dados com muito mais facilidade do que o código do ESP8266 e o script MySQL ⇒ Simplifica o código do ESP8266 e o script MySQL
  • O script PHP pode processar os dados e enviar ao ESP8266 apenas os dados necessários (Passo 4) para evitar que o ESP8266 fique sem memória.
  • O ESP8266 consegue fazer requisições HTTPS facilmente ⇒ os dados são criptografados.

Observe que a autenticação entre o ESP8266 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.

ESP8266 para MySQL via HTTP/HTTPS

Abaixo estão os passos que precisamos seguir:

  • Instalar o pacote XAMPP, que inclui o servidor MySQL, o servidor Web e o 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 ESP8266

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

  • Baixe e instale o XAMPP a partir deste link. Após a instalação, verifique a pasta C:\xampp\htdocs no seu PC. É nela que 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)
ESP8266 NodeMCU XAMPP

2. Criando uma conta de Usuário do MySQL

Vamos criar uma conta MySQL com permissão de acesso somente via localhost.

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

Este tutorial cria uma conta de usuário do MySQL cujo usuário e senha são ESP8266 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 recomendável definir a senha da 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 do MySQL cujo usuário e senha são ESP8266 e newbiely.com, respectivamente, copiando os comandos abaixo e colando no Prompt de Comando:
CREATE USER 'ESP8266'@'localhost' IDENTIFIED BY 'newbiely.com'; GRANT ALL PRIVILEGES ON *.* TO 'ESP8266'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ESP8266'@'localhost' IDENTIFIED BY 'newbiely.com'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ESP8266'@'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 do 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_esp8266 digitando o seguinte comando no Prompt de Comando:

CREATE DATABASE db_esp8266 CHARACTER SET = 'utf8' COLLATE = 'utf8_general_ci';
Command Prompt
MariaDB [(none)]> CREATE DATABASE db_esp8266 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_esp8266; 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_esp8266; Database changed MariaDB [db_esp8266]> MariaDB [db_esp8266]> 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_esp8266]>

6. Escreva os arquivos de script PHP

Crie um arquivo insert_temp.php usando qualquer editor de texto (por exemplo, Bloco de Notas/Notepad++). Vamos escrever o script nesse 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 = "ESP8266"; $password = "newbiely.com"; $database_name = "db_esp8266"; // 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 web (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 web mostra o seguinte:
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_esp8266]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_esp8266]>

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

7. Escreva o código do ESP8266

O código ESP8266 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 ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-mysql */ #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.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()); WiFiClient client; // Create a WiFiClient object HTTPClient http; // Use ::begin(WiFiClient, url) method http.begin(client, 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 sent 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() { // Your loop code here (if needed) }

Passos Rápidos

  • Se esta é a primeira vez que você usa o ESP8266, veja como configurar o ambiente para o ESP8266 no Arduino IDE.
  • Faça a ligação como na imagem acima.
  • Conecte a placa ESP8266 ao seu PC por meio de um cabo micro USB
  • Altere o endereço IP no código para o endereço IP do seu PC
  • Compile e faça o upload do código para o ESP8266
  • Abra o Serial Monitor no Arduino IDE
  • O resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' 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
Nodemcu 1.0 (ESP-12E Module) 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_esp8266]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_esp8266]>

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

Como o ESP8266 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 em 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!