Tag arduino

Acendendo um LED via Internet com Arduino e o Ethernet Shield

08 de setembro de 2013, 17:09, por Renato Tags:

Com o Ethernet Shield, é possível conectar o Arduino a uma rede ethernet e montar projetos que envolvam o envio ou recebimento de informações via rede ou internet. O dispositivo, juntamente com a biblioteca de controle, permite o projeto de aplicações para rede de forma fácil. Não é necessário se preocupar com os esquemas complicados de sinalização em redes ethernet já que todo o controle e conexão são feitos por rotinas da biblioteca. Após estabelecida a conexão, basta ler ou escrever dados através dela, de forma semelhante à uma conexão serial convencional.

Segue um exemplo de um projeto para a disponibilização de uma página web que permite ligar ou desligar uma porta digital do Arduino através da rede local ou da internet. Em uma aplicação prática, o projeto poderia ser utilizado para controlar uma lâmpada, servindo como uma boa aplicação “Hello World” de automação residencial com Arduino. Aqui, a ideia é se concentrar no projeto de software necessário para tal aplicação. Por isso, vamos considerar a ligação de um led à porta do Arduino e mostrar uma das formas mais caras de acender um led que podem ser propostas.

Neste projeto, foi utilizado o Ethernet Shield baseado no chip Wiznet W5100. Esse chip provê toda a pilha TCP/IP de forma transparente, facilitando o projeto, já que não é necessário se preocupar com os esquemas de sinalização e controles do TCP/IP. Vale lembrar que existem outros shields ethernet, mais simples e mais baratos, que utilizam chips que exigem que os controles e a sinalização TCP/IP sejam implementados no sketch Arduino.

A configuração de harware para este projeto é muito simples: basta conectar o Ethernet Shield ao Arduino e ligar um led em série com um resistor de 1KOhm entre o pino 6 do Shield e o terra (GND).

A ideia é acessar o endereço IP associado ao Arduino pelo navegador e receber uma página com um link para ligar o led e outro para desligá-lo. Para isso, foi utilizado o seguinte código:

#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 235 };
    
EthernetServer server(80);
 
String readString;
int Pin = 6;
 
void setup(){
 
  pinMode(Pin, OUTPUT);
  Ethernet.begin(mac, ip);
  server.begin();
}
 
void loop(){
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
 
        if (readString.length() < 100) {
          readString += c;              
        }

        if (c == '\n') {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          
          client.println("<HTML>");
          client.println("<BODY>");
          client.println("<H1>Acende LED</H1>");
          client.println("<hr />");
          client.println("<br />");
          
          client.println("<a href=\"/?ledon\"\">Ligar o led</a>");
          client.println("<a href=\"/?ledoff\"\">Desligar o led</a><br />");    
          
          client.println("</BODY>");
          client.println("</HTML>");
          
          delay(1);
          client.stop();
          
          if(readString.indexOf("?ledon") > 0)
          {
            digitalWrite(Pin, HIGH);
          }
          else {
            if(readString.indexOf("?ledoff") > 0)
            {
              digitalWrite(Pin, LOW);
            }
          }
          readString="";     
        }
      }
    }
  }
}

Para controlar o Ethernet Shield, é utilizada a biblioteca Ethernet. A comunicação entre o Arduino e o Shield é feita utilizando o protocolo SPI, daí a necessidade da importação da biblioteca SPI também. Vale lembrar que a comunicação via SPI se dá através dos pinos 10, 11, 12 e 13 no Arduino Uno, o que impossibilita a utilização destes pinos no projeto.

A configuração do servidor funcionando na porta 80 é feita pelas linhas

EthernetServer server(80);
Ethernet.begin(mac, ip);
server.begin();

sendo o endereço MAC e o endereço IP definidos pelos vetores mac e ip criados nas linhas 4 e 5.

Após a configuração inicial, o programa espera pela conexão de um cliente e, quando detectada, lê os caracteres enviados ao servidor relativos à requisição GET feita pelo cliente através do acesso pelo navegador.

Os caracteres são recebidos um a um e são guardados em sequência na variável readString. É utilizada uma condicional para limitar o número de caracteres recebidos em 100. A cada caractere recebido, é feito um teste para verificar se trata-se de um fim de linha (\n, um “ENTER”). Nesse caso, é enviada a resposta ao cliente, que é uma resposta bem sucedida à requisição (HTTP/1.1 200 OK), contendo uma página HTML com links para ligar e desligar o led.

Os links para ligar e desligar o led utilizam as query strings ?ledon e ?ledoff para que o servidor consiga identificar o comando vindo do cliente. Após a resposta à requisição, é feito um teste para verificar se o endereço requisitado pelo cliente possui uma destas query strings, através da verificação da variável readString pela presença das sequências ?ledon ou ?ledoff. A partir dessa informação, o led é ligado ou desligado e, por fim, a variável readString é reiniciada.

Desta forma, é possível controlar o led a partir de um ponto de acesso à rede local. Também é possível controlá-lo via internet, configurando o roteador para fazer um redirecionamento da porta 80 para o IP associado ao Arduino e acessando a página utilizando o IP público, fornecido pelo provedor de internet. No entanto, vale comentar que esta configuração não leva em conta a segurança, permitindo que qualquer um que possua o IP controle o led via internet.

Hello World com Arduino

07 de outubro de 2011, 04:05, por Renato Tags:

Em 2005, fiquei sabendo de um projeto chamado Arduino, que chamou muito minha atenção pois se tratava de um projeto de hardware livre. No mesmo ano, tentei montar um mas não tive muito sucesso e acabei deixando o projeto parado por causa das atividades da faculdade. Hoje me arrependo de não ter dedicado mais tempo para o projeto na época, dado o crescimento do universo do Arduino.

Para quem não sabe o que é, o Arduino é um projeto composto por hardware e software para desenvolvimento de aplicações que interajam com o mundo real usando sensores e atuadores. Ele foi desenvolvido para permitir a criação de projetos por pessoas que não tenham muito conhecimento em hardware ou eletrônica como hobistas, artistas e designers.

Existem muitas versões de Arduino disponíveis, desde a versão mais comum, chamada de Arduino Uno até uma versão para ser costurada em roupas, o LilyPad Arduino. Além disso, uma das coisas mais legais do projeto é a possibilidade de instalação de shields, que são placas de expansão que possibilitam aplicações para as quais o Arduino não vem preparado por padrão como ethernet, bluetooth, controle de motores, etc.

As aplicações ficam por conta da criatividade do desenvolvedor :-) Veja alguns exemplos:

Demorei mas comecei a aprender um pouco sobre a plataforma. Hoje em dia é bem fácil conseguir um Arduino. No site do projeto, estão listadas lojas que vendem o Arduino “original” mas como trata-se de um projeto aberto, existem outros fabricantes que vendem placas do tipo Arduino, podendo ser encontrados no Mercado Livre ou no eBay. Vale destacar o Brasuíno, vendido pela Holoscópio, uma empresa brasileira, de Belo Horizonte. Eles pegaram os esquemáticos do Arduino, que são livres mas foram feitos no software Eagle, que é proprietário e projetaram o Brasuíno no Kicad, que é um software livre :-)

Como disse antes, o Arduino também inclui um projeto de software, composto por um ambiente de desenvolvimento que serve para facilitar a programação do microcontrolador. No ambiente, você digita seu programa e faz o upload para o Arduino através do cabo USB de maneira muito simples.

Ainda não desenvolvi muita coisa com Arduino mas só para ter uma ideia de como é um programa, segue um exemplo que faz piscar um LED na porta 13, também conhecido como “Hello Word” do Arduino:

int ledPin = 13;                 // LED conectado no pino 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // configura o pino digital como saída
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // liga o led
  delay(1000);                  // aguarda 1 segundo
  digitalWrite(ledPin, LOW);    // desliga o led
  delay(1000);                  // aguarda um segundo
}

A linguagem é baseada na Wiring Language, que é baseada no Processing e tem sintaxe parecida com o C. Basicamente, todo programa é composto por duas funções: setup e loop. Na função setup é feita a configuração da placa, nesse caso a configuração do pino do LED como pino de saída. Na função loop é inserido o código que será executado repetidamente pelo microcontrolador. Nesse caso, o LED será aceso seguido por uma pausa de um segundo e depois será apagado, seguido por uma pausa de um segundo.

Para um primeiro contato com a linguagem do Arduino, recomendo o livro “Getting started with Arduino“, do Massimo Banzi, que criou o projeto. Nesse livro, são descritas as funções básicas do projeto para interagir com sensores, atuadores e a porta serial. Além disso, vale a pena dar uma olhada nas Webinars do Laboratório de Garagem e nos eventos do Garoa Hacker Clube, onde frequentemente aparecem coisas legais sobre o assunto.