Arduino: Ethernet: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Linha 323: Linha 323:
----
----


[[Categoria:Arduíno]]
[[Categoria:Arduíno]] [[Categoria:IoT]]

Edição das 13h50min de 8 de maio de 2020

Comunicação e Shields para Arduíno

Controlando Leds pelo Monitor Serial

Componentes necessários
  • Placa Arduino;
  • Conector Arduino
  • Protoboard;
  • 5 fios com conectores macho;
  • 2 resistores de 220 ohm(Vermelho, vermelho, marrom);
  • 2 Leds.
Montagem
Primeiramente, faça as ligações como mostra a imagem abaixo:

Agora, abra a IDE do Arduino e passe a seguinte programação
char c;
void setup(){
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
Serial.begin(9600);
}
void loop()
{
   if (Serial.available() > 0)
   {
   c = Serial.read() - '0';
   Serial.flush();
   digitalWrite(c,!digitalRead(c));
   }
}
Instruções
Conecte o Arduino no PC, selecione a versão do seu Arduino e a porta e clique em UPLOAD. Abra o Serial Monitor, ao digitar o número 2 no Serial Monitor, irá acender o LED conectado na porta digital 2 do Arduino, e ao digitar novamente o número 2, o LED apagará. Agora se digitar o número 3, irá acender o LED da porta digital 3 e se digitar novamente o número 3, o LED apagará.
Autoria
Igor Matheus B. Quintana / CST Análise e Desenvolvimento de Sistemas - IFPR - Câmpus Foz do Iguaçu.

Comunicação Serial

Informações sobre comunicação serial e paralela
Comunicação Serial entre dois Arduínos
Emissor
Insere na porta serial os valores 0 e 1 de maneira alternada a cada dois segundos.
Receptor
Faz a leitura dos valores escritos pelo emissor e controla o LED.
0 -> LED apagado.
1 -> LED aceso.

Código do Arduíno emissor

//emissor  
int num = 0;
void setup(){
 Serial.begin(9600);
}
void loop(){
 num = 0;
 Serial.write(num);
 delay(2000);
 num = 1;
 Serial.write(num);
 delay(2000);
}

Código do Arduíno receptor

//receptor
int recByte;
int led = 13;
void setup(){
 Serial.begin(9600);
 pinMode(led,OUTPUT);
}
void loop(){
 if (Serial.available ()> 0)
   {
       recByte = Serial.parseInt();
       //parseInt() retorna o primeiro número inteiro válido do buffer serial.
       //Caracteres e não inteiros são ignorados.
   }
 if(recByte == 0){
   digitalWrite(led,LOW);
 }else if(recByte == 1){
   digitalWrite(led,HIGH);
 }
}

Arduíno Leonardo

O Arduíno Leonardo usa a Serial exclusivamente para comunicação com a porta USB. Para comunicação serial TTL (5V) nos pinos 0 (RX) and 1 (TX) deve-se utilizar a Serial1.

Autoria
Matheus Marques / CST Análise e Desenvolvimento de Sistemas - IFPR - Câmpus Foz do Iguaçu

Comunicação sem fio com Wireless Shield e Xbee

O Wireless Shield permite a comunicação serial sem fio baseado no módulo Xbee da Digi.

Configuração do Wireless Shield

A placa Wireless Shield possui uma chave de configuração da comunicação serial entre o módulo Xbee e o microcontrolador do Arduino e o conversor serial USB (ver: https://www.arduino.cc/en/Main/ArduinoWirelessShield):

  • Posição micro: O pino Dout do módulo Wireless é conectado ao pino RX do microcontrolador do Arduino e o pino Din ao pino TX do microcontrolador. O módulo sem fio se comunica de forma serial com o microcontrolador do Arduino. Destaca-se que os pinos TX e RX do microcontrolador também continuam conectados aos pinos RX e TX do conversor serial USB. Desta forma, dados transmitidos pelo microcontrolador serão enviados simultaneamente ao módulo sem fio e a serial USB. Neste modo o microcontrolador do Arduino não pode ser programado via USB.
  • Posição USB: O pino Dout do módulo Wireless é conectado ao pino RX do conversor serial USB e o pino Din ao pino TX do conversor serial USB. O módulo sem fio se comunica diretamente com o computador. Para usar este modo o microcontrolador do Arduíno deve ser programado com um sketch vazio:
void setup() { }
void loop() { }
Xbee Explorer USB
A placa Wireless Shield com a chave na posição USB e o microcontrolador do Arduíno programado com sketch vazio se comporta como um módulo Xbee Explorer USB, com o Xbee se comunicando diretamente com o computador.

Exemplo de utilização

Exemplo de comunicação usando a configuração padrão dos módulos Xbee, apresentado em https://www.arduino.cc/en/Guide/ArduinoWirelessShield:

  • Para fazer a carga de programas no microcontrolador do Arduíno, colocar a chave do módulo wireless na posição USB.
  • Em um dos Arduínos com módulo Wireless carregar o programa
Exemples->Communication->Physical Pixel
Este programa faz o Arduíno acender ou apagar o led da porta 13 a partir do envio do caracter H ou L a partir do monitor serial. Testar o funcionamento do programa com a chave do módulo wireless na posição USB. Em seguida desconectar o Arduíno da interface USB e mudar a chave do módulo wireless para a posição micro.
//  Physical Pixel
const int ledPin = 13; // the pin that the LED is attached to
int incomingByte;      // a variable to read incoming serial data into
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
} 
void loop() {
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    if (incomingByte == 'H') {
      digitalWrite(ledPin, HIGH);
    } 
    if (incomingByte == 'L') {
      digitalWrite(ledPin, LOW);
    }
  }
}

  • Em outro Arduíno com módulo wireless, carregar o programa abaixo com chave do módulo wireless na posição USB. Verificar o funcionamento do programa no monitor serial. Depois de carregado o programa mudar a chave do módulo wireless para a posição micro.
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  Serial.print('H');
  delay(1000);
  Serial.print('L');
  delay(1000);
}
  • Para testar a comunicação serial sem fio, conectar o primeiro Arduíno na fonte de alimentação e verificar se a comunicação entre os Arduínos acontece, fazendo o led piscar.
    • Caso não haja comunicação, tente restabelecer a configuração padrão (default) nos módulos Xbee (veja abaixo).

Arduíno Leonardo

O Arduíno Leonardo usa a Serial exclusivamente para comunicação com a porta USB. Para comunicação serial TTL (5V) nos pinos 0 (RX) and 1 (TX) deve-se utilizar a Serial1.

Endereçamento dos módulos Xbee

Vários parâmetros precisam ser configurados para que os módulos Xbee possam se comunicar:

  1. Os dispositivos precisam estar na mesma rede, definida pelo parâmetro ID;
  2. Os dispositivos precisam usar o mesmo canal, definido pelo parâmetro CH;
  3. O endereço destino (DH e DL) determina qual módulo da rede receberá os dados:
    • Se o DH = 0 e o DL < 0xFFFF (i.e. 16 bits), o dado transmitido pelo módulo será recebido por qualquer módulo cujo endereço de 16-bit MY é igual a DL;
    • Se o DH = 0 e o DL = 0xFFFF, o dado transmitido será recebido por todos os módulos (broadcast);
    • Se o DH ≠ 0 e o DL > 0xFFFF, o dado transmitido será recebido somente pelo módulo cujo número serial seja igual ao endereço destino (i.e. SH = DH e SL = DL).

Síntese de alguns parâmetros:

Parâmetro Descrição Valor default
ID Identificador de rede 3332
CH Canal C
SH SL Numero de série Diferente para cada módulo
MY Endereço do módulo 0
DH DL Endereço destino 0
BD Vazão da comunicação serial (bps) 3 (9600 bps)

Configuração do módulo Xbee

Para a configuração do módulo Xbee é interessante utilizar o software XCTU da Digi ou o moltosenso Network Manager, os quais apresentam facilidades para configuração e atualização dos módulos wireless.

Exemplo de configuração com o software moltosenso Network Manager
Baixar e instalar o software moltosenso Network Manager IRON 1.0 (Free):
  • Na guia Port Setup é possível verificar a configuração da porta, clique em Open Port e verifique se o dispositivo foi detectado;
  • Clique no dispositivo e verifique as informações do mesmo em Current Device;

  • Na guia Node Settings é possível selecionar o módulo e verificar seus parâmetos de configuração;

  • Para restaurar os parâmetros default do dispositivo clique em Restore All e depois em Write Permanently;
Adaptação e autoria
--Evandro.cantu (discussão) 20h19min de 12 de julho de 2015 (BRT)

Comunicação com o Ethernet Shield

Este exemplo mostra como utilizar o Ethernet Shield juntamente com o Arduíno para criar um Web Server que forneça informações sobre sensores conectados a entradas analógicas (Ver: https://www.arduino.cc/en/Tutorial/WebServer).

Usando a biblioteca Ethernet.h, o Arduíno pode responder a requisições HTTP através do Ethernet Sheild.

O Ethernet Shield permite conectar o controlador Ethernet WizNet ao Arduíno usando o barramento SPI. O barramento SPI (Serial Peripheral Interface) é um interface de comunicação serial síncrona usada para comunicação em distâncias curtas, e usa a biblioteca SPI.h. O barramento SPI usa os pinos 10, 11, 12 e 13 do Arduíno para implementar a conexão SPI com o WizNet. 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.

Exemplo

/*
 Web Server para fornecer a temperatura usando sensor LM35
 O sensor de temperatura (LM35) é conectado a entrada analógica 0 do Arduino.
 Based in Sketche: Arduino -> Ethernet -> BarometricPressureWebServer
 by Tom Igoe (2010)
*/
#include <Ethernet.h>
#include <SPI.h>
// assign a MAC address for the ethernet controller.
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// assign an IP address for the controller:
IPAddress ip(192,168,1,20);
IPAddress gateway(192,168,1,1);	
IPAddress subnet(255, 255, 255, 0); 
// Initialize the Ethernet server library
EthernetServer server(80);
//Sensor de temperatura LM35
//ConversaoGrausCelcius = 5 / 1023 * 100 = 0,488758553
const float ConversaoGrausCelcius = 0.488758553;
float  SensorLM35;
void setup() {
   Serial.begin(9600);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  delay(1000); 
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
void loop() { 
  // Faz a leitura do sensor periodicamente.
  Serial.print('.');
  SensorLM35 = analogRead(A0) * ConversaoGrausCelcius;
  // listen for incoming Ethernet connections:
  listenForEthernetClients();
  delay(1000);
}
void listenForEthernetClients() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("Got a client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);   
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html"); 
          client.println("Connection: close");  
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");         
          // output the value of temperature          
          client.print("Temperatura interna (oC) = ");
          client.print(SensorLM35);
          client.println("</html>"); 
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");    
  }
} 

Comunicação Serial via Bluetooth

Pinagem e conexão com o Arduíno
Será utilizado o módulo Bluetooth HC06 [1], que possui 4 pinos para conexão com o Arduíno, como mostrado na figura:
            _________
           |         |
           |         |
           |         |
           |Bleutooth|
           |         |
           |   HC06  |
           |         |
           |         |
           |_________|
             | | | |
     Vcc ----+ | | +---- Rxd
     Gnd ------+ +------ Txd
Cuidados com a conexão do módulo Bluetooth HC06 com o Arduíno:
  • O HC06 funciona com alimentação Vcc=3,3V, a qual também é fornecida pelo Arduino ao lado da alimentação de 5V;
  • Na comunicação serial, como o Arduíno fornece 5V, é necessário utilizar um divisor de tensão na entrada Rxd do HC06, conforme exemplo abaixo:

VRxd = R2/(R1 + R2).5
Exemplo:
R1=470 Ω, R2=1 KΩ -> VRxd = 3,4 V

Arduíno Mega Multi Serial

O Arduíno MEGA usa a Serial exclusivamente para comunicação com a porta USB. Para comunicação serial TTL (5V) nos pinos 0 (RX) and 1 (TX), como a que será utilizada com o módulo Bluetooth, deve-se utilizar a Serial1, Serial2 ou Serial3 [2].

Referências


Adaptação e autoria
--Evandro.cantu (discussão) 19h00min de 12 de agosto de 2015 (BRT)