Arduino: Ethernet: mudanças entre as edições
Sem resumo de edição |
|||
Linha 179: | Linha 179: | ||
*O programa não faz checagem do '''método''' (GET, PUT, POST, ... ) recebido na mensagem de requisição (aceita qualquer coisa, mesmo mensagem vazia). | *O programa não faz checagem do '''método''' (GET, PUT, POST, ... ) recebido na mensagem de requisição (aceita qualquer coisa, mesmo mensagem vazia). | ||
===Laboratório | ===Laboratório 3: Análise do Web Server com Wireshark=== | ||
Ativar análise de pacotes com '''Wireshark''' utilizando filtro para IP e TCP porta 80: | Ativar análise de pacotes com '''Wireshark''' utilizando filtro para IP e TCP porta 80: | ||
ip.addr == 192.168.71.2xx and tcp.port == 80 | ip.addr == 192.168.71.2xx and tcp.port == 80 | ||
Linha 217: | Linha 217: | ||
curl 192.168.71.2xx | curl 192.168.71.2xx | ||
===Laboratório | ===Laboratório 4: DHCP Address Print=== | ||
Este laboratório mostra como configurar o arduíno para obter endereço IP dinamicamente com DHCP. O endereço obtido é impresso no monitor serial. <ref>https://www.arduino.cc/en/Tutorial/LibraryExamples/DhcpAddressPrinter</ref>. | Este laboratório mostra como configurar o arduíno para obter endereço IP dinamicamente com DHCP. O endereço obtido é impresso no monitor serial. <ref>https://www.arduino.cc/en/Tutorial/LibraryExamples/DhcpAddressPrinter</ref>. | ||
Linha 226: | Linha 226: | ||
#Testar a conectividade com o aplicativo de rede '''ping'''. | #Testar a conectividade com o aplicativo de rede '''ping'''. | ||
===Laboratório | ===Laboratório 5: Consulta a Servidor de Data/Hora=== | ||
Este laboratório mostra como utilizar um '''Ethernet ''Shield''''' para o '''Arduíno''' obter. por meio de uma requisição '''UDP''', a '''dada e hora''' de um servidor da Internet por meio do '''protocolo NTP''' (''Network Time Protocol'') <ref>https://www.arduino.cc/en/Tutorial/LibraryExamples/WebServer</ref>. Neste exemplo o Arduíno recebe endereço IP dinamicamente de um servidor '''DHCP'''. | Este laboratório mostra como utilizar um '''Ethernet ''Shield''''' para o '''Arduíno''' obter. por meio de uma requisição '''UDP''', a '''dada e hora''' de um servidor da Internet por meio do '''protocolo NTP''' (''Network Time Protocol'') <ref>https://www.arduino.cc/en/Tutorial/LibraryExamples/WebServer</ref>. Neste exemplo o Arduíno recebe endereço IP dinamicamente de um servidor '''DHCP'''. | ||
Linha 241: | Linha 241: | ||
A comunicação entre o microcontrolador e o cartão SD usa o barramento SPI, que faz uso dos pinos 10, 11, 12 e 13 do Arduíno. O pino 4 é usado também para controlar a seleção do cartão SD. | A comunicação entre o microcontrolador e o cartão SD usa o barramento SPI, que faz uso dos pinos 10, 11, 12 e 13 do Arduíno. O pino 4 é usado também para controlar a seleção do cartão SD. | ||
===Laboratório | ===Laboratório 6: Escrita e litura no cartão SD=== | ||
Este laboratório mostra como utilizar o '''cartão SD''' para escrita e leitura de dados em um arquivo. | Este laboratório mostra como utilizar o '''cartão SD''' para escrita e leitura de dados em um arquivo. | ||
Linha 249: | Linha 249: | ||
#Testar o programa e acompanhar pelo '''monitor serial''' o processo de escrita e leitura. | #Testar o programa e acompanhar pelo '''monitor serial''' o processo de escrita e leitura. | ||
===Laboratório | ===Laboratório 7: Armazenamento de dados de sensores em cartão SD=== | ||
Este laboratório mostra como utilizar o '''cartão SD''' para armazenamento de dados de sensores em um arquivo. | Este laboratório mostra como utilizar o '''cartão SD''' para armazenamento de dados de sensores em um arquivo. | ||
Linha 302: | Linha 302: | ||
R1=470 Ω, R2=1 KΩ -> V<sub>Rxd</sub> = 3,4 V | R1=470 Ω, R2=1 KΩ -> V<sub>Rxd</sub> = 3,4 V | ||
===Laboratório | ===Laboratório 8: Comunicação serial entre Arduíno com módulo Bluetooth e Android=== | ||
Permite acender e apagar led a partir de aplicativo '''Android''' pareado com módulo '''Bluetooth''' rodando em um Arduíno: | Permite acender e apagar led a partir de aplicativo '''Android''' pareado com módulo '''Bluetooth''' rodando em um Arduíno: | ||
Linha 313: | Linha 313: | ||
#Enviar a partir do '''Bluetooth Terminal''' os caracteres '''H''' e '''L''' para acender a apagar o led 13 do Arduíno. | #Enviar a partir do '''Bluetooth Terminal''' os caracteres '''H''' e '''L''' para acender a apagar o led 13 do Arduíno. | ||
===Laboratório | ===Laboratório 9: Comunicação serial entre Arduíno com módulo Bluetooth e Android=== | ||
Permite enviar uma string ao '''Arduíno''' via Bluetooth e receber de volta a mesma string no '''monitor serial''' <ref>http://www.instructables.com/id/Add-bluetooth-to-your-Arduino-project-ArduinoHC-06</ref>. | Permite enviar uma string ao '''Arduíno''' via Bluetooth e receber de volta a mesma string no '''monitor serial''' <ref>http://www.instructables.com/id/Add-bluetooth-to-your-Arduino-project-ArduinoHC-06</ref>. |
Edição das 12h26min de 12 de junho de 2023
Arduíno: Comunicação e Rede
Comunicação Serial
Conceitos sobre comunicação serial e paralela
Comunicação Serial no Arduíno
O Arduíno UNO possui uma porta serial (Serial) (também referida como UART) e se comunica através dos pinos 0 (RX) e 1 (TX), assim como com o computador via USB. Se você utiliza a comunicação serial não pode utilizar os pinos 0 e 1 como entradas e saídas.
Também é possível utilizar o monitor serial, disponível na IDE do Arduíno, para comunicação bidirecional com uma placa Arduíno conectada em uma porta USB.
Não é possível utilizar as portas seriais do Arduíno diretamente em uma comunicação com uma interface RS232, pois esta usa tensões de -12 V e 12 V.
- Outras placas Arduíno
- O Arduíno Leonardo usa a Serial exclusivamente para comunicação com a porta USB. Para comunicação serial nos pinos 0 (RX) and 1 (TX) deve-se utilizar a Serial1.
- O Arduíno Mega tem três portas de comunicação serial adicionais: Serial1, Serial3 e Serial3.
Laboratório 1: Comunicação serial entre dois Arduínos
- Monitor Serial
- O monitor serial permite enviar dados do computador ao Arduíno pela interface serial USB.
Procedimentos:
- Carregar programa exemplo Arquivo/Exemplos/Communication/PhysicalPixel e acionar o led do pino 13 a partir de comandos H e L enviados pelo monitor serial.
- Comunicação entre dois Arduínos
Procedimentos:
- Conectar com um par de fios os dois Arduínos através das portas seriais de ambos os microcontroladores: TX->RX e RX<-TX;
- Carregar no receptor o programa exemplo Arquivo/Exemplos/Communication/PhysicalPixel;
- Carregar no emissor o código abaixo;
- Observar a comunicação serial a partir do led piscando no receptor e também monitorar a troca de mensagens a partir do monitor serial.
//emissor
int num = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write('H');
delay(2000);
Serial.write('L');
delay(2000);
}
}
Configuração do SimulIDE para comunicação serial com Arduíno
É possível realizar comunicação serial entre um Arduíno rodando no SinulIDE e um Arduíno conectado a porta USB do computador.
- No Arduíno conectado a USB, verificar a partir da IDE a porta de comunicação que está sendo utilizada: ttyACM0 (p.ex.);
- No Arduíno no SimulIDE, clicar com o botão direito do mouse sobre a placa e selecionar Open Serial Port;
- No bloco Uart que vai abrir, clicar com o botão direito do mouse e selecionar properties;
- Escrever em port name o nome da porta serial;
- Clicar em Open para ativar a porta (deve indicar sucesso com o botão vermelho).
Comunicação usando módulo Ethernet
O módulo Ethernet (Ethernet Shield), juntamente com a biblioteca Ethernet.h, permite que um Arduíno se conecte a Internet. Esta biblioteca provê funcionalidades tanto para cliente quanto par servidor, além de permitir a conexão com a rede local tanto usando IP fixo, DHCP e também usando DNS.
O Ethernet Shield 2 permite conectar o Arduíno a rede local e a Internet com conector RJ45 e velocidade de 10/100 Mbps. A conexão do shield com o Arduíno é realizada pelo barramento SPI (Serial Peripheral Interface), que faz uso dos pinos 10, 11, 12 e 13 do Arduíno para comunicação e necessita da biblioteca SPI.h. O SPI é uma interface de comunicação serial síncrona usada para comunicação em distâncias curtas. O Ethernet Shield possui ainda um slot para cartão SD e usa o pino 4 para controlar o pino de seleção do cartão SD.
Para uso do módulo Ethernet há uma serie de exemplos prontos (Examples from Libraries).
Laboratório 2: Web Server
Este laboratório mostra como utilizar um Ethernet Shield juntamente com o Arduíno para criar um Web Server que forneça informações sobre sensores conectados a entradas analógicas [1].
- Procedimentos
- Conectar o Shield Ethernet a placa Arduíno e a rede local (usando cabos de rede CAT 5/6 e conector RJ45);
- Conectar alguns sensores as entradas analógicas do Arduíno para monitorar via Web (Pode Modificar o programa exemplo em função dos sensores que utilizar);
- Carregar o programa exemplo: Arquivo/Exemplos/Ethernet/WebServer;
- Atenção:
- Configurar IP de acordo com a Rede Acadêmica do Campus;
- Configurar MAC único para a rede local.
- Sugestão: Configurar último byte MAC com o número do Kit utilizado e o IP com 2xx, onde xx é o número do Kit utilizado.
- Atenção:
- Testar a conectividade com o servidor Web com o aplicativo de rede ping;
- Testar o acesso ao servidor Web a partir de um navegador.
Análise do funcionamento do programa Web Server
- Código exemplo
- [2] Comentários traduzidos.
/*
Web Server
Servidor Web simples que mostra os valores das entradas analógicas.
*/
#include <SPI.h>
#include <Ethernet.h>
// Definição do endereço MAC:
// São 6 bytes em hexadecimal e deve ser único para a rede local.
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
// Definição do endereço IP fixo:
IPAddress ip(192, 168, 71, 2xx);
// Inicialização do servidor e definição da porta para escuta
// (porta 80 é default para HTTP):
EthernetServer server(80);
void setup() {
// Inicialização da serial
Serial.begin(9600);
while (!Serial) {
; // Espera serial conectar.
}
Serial.println("Ethernet WebServer Example");
// Inicialização da conexão Ethernet e do servidor:
Ethernet.begin(mac, ip);
// Checa se o hardware Ethernet está presente:
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found:(");
while (true) {
delay(1); // Nada a fazer sem hardware Ethernet
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// Inicialização do servidor
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Escuta por clientes
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// Requisições HTTP terminam com uma linha em branco
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// Se chegou no final da linha (recebeu caractere: newline)
// e a linha é vazia, a requisição HTTP terminou,
// portando, envia resposta:
if (c == '\n' && currentLineIsBlank) {
// Envia cabeçalho da resposta HTTP
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // fecha a conexão após resposta
client.println("Refresh: 5"); // atualiza página a cada 5 s
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// Imprime a saída de cada porta analógica
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// Se está iniciando nova linha
currentLineIsBlank = true;
} else if (c != '\r') {
// Se recebeu novo caractere na nova linha
currentLineIsBlank = false;
}
}
}
// Tempo para processar o dado
delay(1);
// Fecha a conexão:
client.stop();
Serial.println("client disconnected");
}
}
- Comentários e complementos sobre a requisição HTTP
- Protocolo HTTP: Veja formato da mensagem de requisição HTTP;
- O programa não faz checagem do método (GET, PUT, POST, ... ) recebido na mensagem de requisição (aceita qualquer coisa, mesmo mensagem vazia).
Laboratório 3: Análise do Web Server com Wireshark
Ativar análise de pacotes com Wireshark utilizando filtro para IP e TCP porta 80:
ip.addr == 192.168.71.2xx and tcp.port == 80
Obs: Fechar outras janelas de navegador que estejam ativas no computador;
- Análise de interação com navegador
Utilizar navegador para acessar servidor Web rodando no Arduíno e analisar pacotes com Wireshark.
Procedimentos:
- Abrir navegador a acessar IP do Servidor Web;
- Acompanhar mensagens no monitor serial do Arduíno;
- Acompanhar dados recebidos pelo no navegador;
- Identificar no Wireshark as mensagens de abertura e fechamento de conexão TCP;
- Identificar no Wireshark as mensagens HTTP com troca de informações e os reconhecimentos enviados pelo TCP.
- Análise de interação com telnet
Iniciar uma nova captura de pacotes com o Wiewshark.
Acessar servidor Web rodando no Arduíno com telnet na porta 80 e analisar pacotes com Wireshark:
telnet 192.168.71.2xx 80
Procedimentos:
- Acompanhar mensagens no monitor serial do Arduíno;
- Acompanhar dados recebidos pelo terminal telnet;
- Identificar no Wireshark as mensagens de abertura de conexão TCP;
- Digitar uma sequência de caracteres: GET (ou outra qualquer);
- Acompanhar mensagens no monitor serial do Arduíno;
- Acompanhar dados recebidos pelo telnet;
- Identificar no Wireshark as mensagens trocadas;
- Enviar linha vazia CRLF (Enter):
- Acompanhar mensagens no monitor serial do Arduíno;
- Acompanhar dados recebidos pelo telnet;
- Identificar no Wireshark as mensagens trocadas e o encerramento da conexão TCP.
- Análise de interação com curl
Repetir procedimentos acessando servidor Web rodando no Arduíno com curl e analisar pacotes com Wireshark:
curl 192.168.71.2xx
Laboratório 4: DHCP Address Print
Este laboratório mostra como configurar o arduíno para obter endereço IP dinamicamente com DHCP. O endereço obtido é impresso no monitor serial. [3].
- Procedimentos
- Conectar o Shield Ethernet a placa Arduíno e a rede local (usando cabos de rede CAT 5/6 e conector RJ45);
- Carregar o programa exemplo: Arquivo/Exemplos/Ethernet/DhcpAddressPrinter;
- Rodar o programa e observar no monitor serial o endereço IP obtido por DCHP;
- Testar a conectividade com o aplicativo de rede ping.
Laboratório 5: Consulta a Servidor de Data/Hora
Este laboratório mostra como utilizar um Ethernet Shield para o Arduíno obter. por meio de uma requisição UDP, a dada e hora de um servidor da Internet por meio do protocolo NTP (Network Time Protocol) [4]. Neste exemplo o Arduíno recebe endereço IP dinamicamente de um servidor DHCP.
- Procedimentos
- Conectar o Shield Ethernet a placa Arduíno e a rede local (usando cabos de rede CAT 5/6 e conector RJ45);
- Carregar o programa exemplo: Arquivo/Exemplos/Ethernet/UdpNtpClient;
- Testar o programa e acompanhar pelo monitor serial a data e hora obtida.
- Pesquisar e testar consulta a servidores NTP no Brasil.
Cartão SD do módulo Ethernet
O Ethernet Shield 2 possui um slot para cartão SD que pode ser utilizado para gravação e leitura de dados com ajuda da biblioteca SD. A biblioteca usa nomes curtos 8.3 para arquivos (8 caracteres para o nome do arquivo e 3 para extensão) e o diretório de trabalho é sempre a raiz do cartão SD.
A comunicação entre o microcontrolador e o cartão SD usa o barramento SPI, que faz uso dos pinos 10, 11, 12 e 13 do Arduíno. O pino 4 é usado também para controlar a seleção do cartão SD.
Laboratório 6: Escrita e litura no cartão SD
Este laboratório mostra como utilizar o cartão SD para escrita e leitura de dados em um arquivo.
- Procedimentos
- Conectar o Shield Ethernet a placa Arduíno e inserir um cartão SD no módulo;
- Carregar o programa exemplo: Arquivo/Exemplos/SD/ReadWrite;
- Testar o programa e acompanhar pelo monitor serial o processo de escrita e leitura.
Laboratório 7: Armazenamento de dados de sensores em cartão SD
Este laboratório mostra como utilizar o cartão SD para armazenamento de dados de sensores em um arquivo.
- Procedimentos
- Conectar o Shield Ethernet a placa Arduíno e inserir um cartão SD no módulo;
- Conectar ao Arduíno três sensores para leitura pelas entradas analógicas;
- Carregar o programa exemplo: Arquivo/Exemplos/SD/Datalogger;
- Adaptar o programa exemplo para os sensores conectados.
Projeto: Servidor Web com armazenamento de dados em cartão SD
Construa um servidor Web rodando em um Arduíno, capaz de ler periodicamente um sensor de temperatura e, a cada leitura, armazenar os dados como uma linha de um arquivo em cartão SD. Os dados de cada leitura do sensor devem ser acompanhados da data e hora consultadas em um servidor NTP.
A cada acesso ao servidor Web através de um navegador, o servidor deve fornecer as leituras dos dados do sensor de temperatura.
Obs:
- O programa para o servidor Web pode combinar vários dos exemplos vistos nos laboratórios.
- Consulte outros programas exemplos das bibliotecas Ethernet e SD.
Comunicação com Módulo Bluetooth
O módulo Bluetooth permite interagir com o Arduíno, por exemplo, utilizando um aplicativo em um smartphone.
Dois módulos Bluetooth bastante utilizados são o HC05 e o HC06. O HC05 pode funcionar como mestre ou escravo. O HC06 somente como escravo. Isto significa que o HC05 pode iniciar conexões com outros dispositivos e o HC06 pode somente aceitar conexões de outros dispositivos [5].
Pinagem e conexão com o Arduíno
Estes módulos apresentam 6 pinos, mas com apenas 4 pinos é possível colocar o mesmo para funcionar e fazer o Arduíno interagir dispositivos Bluetooth (o HC06 tem conexões apenas com estes 4 pinos).
_________ | | | | | | |Bleutooth| | | | HC06 | | | | | |_________| | | | | Vcc ----+ | | +---- Txd Gnd ------+ +------ Rxd
- O pino EN, quando colocado em 0V desabilita o módulo;
- O pino Status pode ser lido e indica de esta desconectado (LOW) ou conectado (HIGH).
- Cuidados com a conexão do módulo Bluetooth HC06 com o Arduíno
- Os módulos HC05 e HC06 funcionam com alimentação (Vcc) de 3,3V, mas possuem regulador interno e podem ser alimentados com tensão de 5 V;
- A comunicação serial, entretanto, opera somente com 3,3V, Como o Arduíno opera com 5V, é necessário utilizar um divisor de tensão na entrada Rxd do módulo, conforme exemplo abaixo:
VRxd = R2/(R1 + R2).5
- Exemplo:
R1=470 Ω, R2=1 KΩ -> VRxd = 3,4 V
Laboratório 8: Comunicação serial entre Arduíno com módulo Bluetooth e Android
Permite acender e apagar led a partir de aplicativo Android pareado com módulo Bluetooth rodando em um Arduíno:
- Procedimentos
- Conectar hardware Bluetooth no Arduíno, utilizando divisor de tensão para adaptar as tensões de comunicação serial;
- Carregar programa exemplo Arquivo/Exemplos/Communication/PhysicalPixel;
- Instalar em um dispositivo Android o aplicativo Bluetooth Terminal;
- Abrir aplicativo Bluetooth Terminal e parear com módulo Bluetooth;
- Enviar a partir do Bluetooth Terminal os caracteres H e L para acender a apagar o led 13 do Arduíno.
Laboratório 9: Comunicação serial entre Arduíno com módulo Bluetooth e Android
Permite enviar uma string ao Arduíno via Bluetooth e receber de volta a mesma string no monitor serial [6].
- Procedimentos
- Carregarno Arduíno o programa exemplo abaixo;
- Enviar strings pelo Bluetooth Terminal no Android e visualizar o retorno do dado no monitor do terminal.
String message; //string that stores the incoming message
void setup()
{
Serial.begin(9600); //set baud rate
}
void loop()
{
while(Serial.available())
{//while there is data available on the serial monitor
message+=char(Serial.read());//store string from serial command
}
if(!Serial.available())
{
if(message!="")
{//if data is available
Serial.println(message); //show the data
message=""; //clear the data
}
}
delay(1000); //delay
}
Smartphone Android
Para enviar caracteres de um Smartphone Android para o módulo Bluetooth pode-se utilizar aplicativos como o Bluetooth Serial Port Terminal ou Bluetooth V2.1 SPP Terminal
Referências
- ↑ https://www.arduino.cc/en/Tutorial/LibraryExamples/WebServer
- ↑ https://www.arduino.cc/en/Tutorial/LibraryExamples
- ↑ https://www.arduino.cc/en/Tutorial/LibraryExamples/DhcpAddressPrinter
- ↑ https://www.arduino.cc/en/Tutorial/LibraryExamples/WebServer
- ↑ 5,0 5,1 http://www.martyncurrey.com/hc-05-and-hc-06-zs-040-bluetooth-modules-first-look/
- ↑ http://www.instructables.com/id/Add-bluetooth-to-your-Arduino-project-ArduinoHC-06
Evandro.cantu (discussão) 19h13min de 29 de outubro de 2021 (-03)