Arduino UNO R4 - MySQL

Este tutorial ensina como usar o Arduino UNO R4 para coletar dados de sensores e salvá-los em um banco de dados MySQL. Em detalhes, vamos aprender:

Arduino UNO R4 MySQL

Arduino UNO R4 - MySQL

O Arduino UNO R4 pode se conectar ao banco de dados MySQL de dois métodos diferentes:

  • O Arduino UNO R4 se conecta diretamente ao Servidor MySQL usando um protocolo MySQL (este é o método direto).
  • O Arduino UNO R4 se conecta ao Servidor MySQL por meio de um protocolo HTTP (este é o método indireto).

Vamos ver qual deles é melhor.

O Arduino UNO R4 interage diretamente com o Servidor MySQL

arduino diretamente com o MySQL

Isso pode parecer fácil, mas há várias desvantagens:

  • Permitir que um Usuário MySQL acesse o banco de dados remotamente pode ser arriscado para a segurança, mesmo com privilégios limitados.
  • Processar dados no Arduino UNO R4 ou em um servidor MySQL deixa o código do Arduino e o script MySQL mais complexos e usa muito a memória e a CPU do Arduino.
  • O servidor MySQL pode enviar uma grande quantidade de dados ao Arduino UNO R4, o que pode fazer a memória dele acabar.
  • Muitas bibliotecas MySQL não oferecem suporte a SSL/TLS, o que significa que nomes de usuário e senhas são enviados sem criptografia, criando outro risco de segurança.

O Arduino UNO R4 interage indiretamente com o Servidor MySQL via HTTP/HTTPS

Este método indireto resolve todos os problemas do método direto. Primeiro, vamos ver como esse método indireto funciona, antes de explorar como ele evita os problemas do método direto.

Como funciona

  • Passo 1: O Arduino UNO R4 envia uma Requisição HTTP ao Servidor Web
  • Passo 2: O Servidor Web executa o script PHP
  • Passo 3: O script PHP recebe os dados da Requisição HTTP, processa-os e interage com o banco de dados MySQL.
  • Passo 4: O script PHP processa os resultados e os envia de volta ao Arduino UNO R4 por meio de uma Resposta HTTP
Arduino UNO R4 MySQL HTTP

Este guia também vai ensinar como instalar um Servidor Web e um servidor MySQL no seu PC. Parece complexo, mas não é.

Agora, vamos ver como o método indireto ajuda a evitar as desvantagens do método direto.

  • Ao colocar o servidor MySQL e o servidor HTTP na mesma máquina, você pode configurar a conta de usuário MySQL para acessar somente a partir dessa máquina. O nome de usuário e a senha dessa conta ficam salvos no servidor (mencionado no passo 3), o que ajuda a aumentar a segurança.
  • Um script PHP (passos 3 e 4) cuida do processamento dos dados. Isso deixa as coisas mais simples e menos complexas tanto para o Arduino UNO R4 quanto para os servidores MySQL. Usar PHP para processar dados é mais fácil do que usar o código do Arduino UNO R4 ou scripts MySQL.
  • O script PHP processa os dados e depois envia ao Arduino UNO R4 apenas o que é necessário (passo 4). Isso ajuda a evitar que a memória do Arduino UNO R4 acabe.
  • A maioria das bibliotecas Ethernet/WiFi oferece suporte a TLS/SSL, permitindo requisições HTTPS. Com o HTTPS, os dados são criptografados e transferidos com segurança pela Internet.

No passo 1, você pode usar um nome de usuário e uma senha diferentes para conectar o Arduino UNO R4 ao Servidor Web. É importante que o usuário e a senha HTTP não sejam iguais ao usuário e à senha do MySQL, para manter tudo seguro.

Este guia vai mostrar como conectar o Arduino UNO R4 ao MySQL de forma indireta.

Arduino UNO R4 - MySQL via HTTP/HTTPS

Precisamos seguir os seguintes passos:

  • Instalar o servidor MySQL, o Servidor Web e o PHP no seu computador
  • 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 scripts PHP
  • Programar o Arduino UNO R4

Agora, vamos ver um passo de cada vez.

Instale o servidor MySQL, o Servidor Web e o PHP no seu PC

O pacote XAMPP já traz tudo incluído. Só precisamos instalá-lo uma vez.

Após a instalação, a pasta chamada C:\xampp\htdocs vai aparecer no seu PC. Essa pasta vai conter o código PHP (explicado mais adiante).

Ative o MySQL e o Servidor Web

  • Abra o Painel de Controle do XAMPL
  • Clique no botão Start para ligar o MySQL e o Servidor Web (veja a imagem abaixo)
Arduino UNO R4 XAMPP

Crie uma conta de usuário MySQL

Vamos configurar uma conta MySQL que pode acessar o banco de dados MySQL somente a partir do computador local.

  • Mesmo que alguém saiba o seu nome de usuário e a sua senha, não conseguirá entrar no seu banco de dados MySQL remotamente.
  • Como o PHP e o MySQL estão no mesmo PC, o PHP pode usar o nome de usuário e a senha para se conectar ao banco de dados MySQL.

Vamos criar uma conta de usuário MySQL com o nome de usuário ArduinoUnoR4 e a senha newbiely.com.

  • Abra o Prompt de Comando no seu computador. Mantenha-o aberto até terminar o tutorial.
  • Digite este comando no Prompt de Comando:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\youruser>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • A configuração padrão do MySQL inclui uma conta root que não tem senha. Recomenda-se que você crie uma senha para essa conta.

Digite o seguinte comando no Prompt de Comando para definir a senha da conta root: (por exemplo, YOUR-ROOT-PASSWORD)

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 este comando no Prompt de Comando:
mysql.exe -u root -p
  • Digite a sua senha root 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)]>
  • Crie uma conta de usuário MySQL com o nome de usuário 'ArduinoUnoR4' e a senha 'newbiely.com'. Copie os comandos a seguir e cole-os no Prompt de Comando:
CREATE USER 'ArduinoUnoR4'@'localhost' IDENTIFIED BY 'newbiely.com'; GRANT ALL PRIVILEGES ON *.* TO 'ArduinoUnoR4'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ArduinoUnoR4'@'localhost' IDENTIFIED BY 'newbiely.com'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ArduinoUnoR4'@'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)]>

Agora você criou com sucesso uma conta de usuário MySQL. Lembre-se do nome de usuário e da senha, pois você vai precisar deles para o script PHP.

Crie um banco de dados MySQL

Crie um banco de dados chamado db_arduino digitando este comando no Prompt de Comando:

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

Crie uma tabela MySQL

Vamos criar uma tabela chamada tbl_temperature. Copie os comandos a seguir e cole-os no Prompt de Comando:

USE db_arduino; CREATE TABLE tbl_temperature ( temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, temp_value FLOAT DEFAULT 0.00, PRIMARY KEY (temp_id) );
Command Prompt
MariaDB [(none)]> USE db_arduino; Database changed MariaDB [db_arduino]> MariaDB [db_arduino]> CREATE TABLE tbl_temperature ( -> 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_arduino]>

Escreva um ou mais arquivos PHP

Crie um arquivo PHP chamado insert_temp.php em C:\xampp\htdocs

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "ArduinoUnoR4"; $password = "newbiely.com"; $dbname = "db_arduino"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "INSERT INTO tbl_temperature (temp_value) VALUES ($temperature)"; if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . " => " . $conn->error; } $conn->close(); } else { echo "temperature is not set"; } ?>

Este código PHP pega a temperatura da Requisição HTTP e a insere no banco de dados.

  • Descubra o endereço IP do seu computador. Pesquise no Google se você não souber como encontrá-lo.
  • Para verificar se o código PHP está funcionando, abra um navegador web (como o Chrome) e acesse este link: http://192.168.0.4/insert_temp.php?temperature=25.3. Lembre-se de usar o endereço IP do seu próprio computador no lugar de "192.168.0.4".
  • Você verá os resultados exibidos no seu navegador web.
Teste do MySQL
  • Para ver se os dados foram salvos no banco de dados, digite este comando no Prompt de Comando:
SELECT * from tbl_temperature;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temperature; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 25.3 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_arduino]>

A temperatura 25.3 foi salva no banco de dados. Em seguida, precisamos programar o Arduino UNO R4 para enviar uma requisição HTTP semelhante ao seu computador.

Escreva o código do Arduino UNO R4

Este código do Arduino UNO R4 envia uma requisição HTTP ao seu computador para adicionar uma temperatura de 30,5°C ao banco de dados.

Código Arduino UNO R4 para Arduino UNO R4 R4 WiFi

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-mysql */ #include <WiFiS3.h> const char ssid[] = "YOUR_WIFI_SSID"; // change your network SSID (name) const char pass[] = "YOUR_WIFI_PASSWORD"; // change your network password (use for WPA, or use as key for WEP) WiFiClient client; int status = WL_IDLE_STATUS; int HTTP_PORT = 80; String HTTP_METHOD = "GET"; char HOST_NAME[] = "192.168.0.4"; // change to your PC's IP address String PATH_NAME = "/insert_temp.php"; String queryString = "?temperature=30.5"; void setup() { Serial.begin(9600); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } // attempt to connect to WiFi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); // connect to web server on port 80: if (client.connect(HOST_NAME, HTTP_PORT)) { // if connected: Serial.println("Connected to server"); // make a HTTP request: // send HTTP header client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1"); client.println("Host: " + String(HOST_NAME)); client.println("Connection: close"); client.println(); // end HTTP header while (client.connected()) { if (client.available()) { // read an incoming byte from the server and print it to serial monitor: char c = client.read(); Serial.print(c); } } // the server's disconnected, stop the client: client.stop(); Serial.println(); Serial.println("disconnected"); } else { // if not connected: Serial.println("connection failed"); } } void loop() { }

Passos Rápidos

Siga estas instruções passo a passo:

  • Se esta é a primeira vez que você usa o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para o Arduino Uno R4 WiFi/Minima no Arduino IDE.
  • Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
  • Substitua o endereço IP no código pelo endereço IP do seu computador.
  • Compile e faça o upload do código para o Arduino UNO R4.
  • Abra o Serial Monitor.
  • Veja a saída no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' 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 Uno R4 WiFi on COM15
2
  • Para ver se a informação foi salva no banco de dados, digite este comando no Prompt de Comando:
SELECT * from tbl_temperature;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temperature; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 25.3 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_arduino]>

A temperatura 30.5 foi salva no banco de dados.

Como o Arduino UNO R4 insere, atualiza ou obtém dados do/no banco de dados MySQL

No exemplo, aprendemos a adicionar dados ao banco de dados MySQL. Para atualizar ou recuperar dados, o processo é parecido. Basta alterar as consultas MySQL no script PHP. Para mais informações, visite o W3Schools.

Uso Avançado

Para melhorar a segurança,

  • Você pode modificar o código do Arduino UNO R4 para usar HTTPS em vez de HTTP. Para saber como fazer isso, visite Arduino UNO R4 - HTTPS.
  • Você pode se autenticar com um nome de usuário e uma senha ao conectar o Arduino UNO R4 a um Servidor Web. Saiba mais em Autenticação básica de acesso.

※ Nota:

Para criar um sistema completo com segurança máxima, precisamos adicionar mais recursos (como evitar injeção de MySQL, transformar o HTTPS em uma API REST e usar o formato JSON para os dados). No entanto, este guia é voltado para iniciantes que estão aprendendo o Arduino UNO R4. Mantivemos tudo muito simples. Depois de terminar este guia, você pode aprender tópicos mais avançados.

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!