Arduino LED Server


Olá pessoal,

Hoje vou passar para vocês um exemplo bem simples de um código Arduino, que pode ser utilizado em diversas aplicações IoT. Vamos lá!!

Projeto: Arduino LED Server.



Funcionamento:

O Arduino irá funcionar como um servidor, que irá receber comandos pela internet. E com isso irá ativar seus pinos, no código exemplo é utilizado 1 LED para identificar os comandos.

Com esse código estou utilizando:

-Arduino UNO
-Shield  Ethernet
-1 LED
-1 Resistor

Lembrando que pode ser adaptador para shield Wifi, ou Yun. Apenas alterando as configurações de inicialização com a internet.

Vamos ao Código comentado:

--------------------------------------------------------------------------------------------------------------------------
#include <SPI.h>
#include <Ethernet.h>

// Coloque o MAC de sua placa Ethernet, e as configurações de IP
byte mac[] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA };

// O IP depende das suas configurações de internet.
// o IP (172.22.59.193) é onde o Arduino será alocado.

IPAddress ip(172,22,59,193);
IPAddress gateway(172,22,63,254);
IPAddress subnet(255, 255, 240, 0);

// Inicializa o servidor
EthernetServer server(8081);
String readString;


// Declarando o pino 8 como o Led.

int led = 8;

void setup()
{
pinMode(led, OUTPUT); //pin selected to control

  Serial.begin(9600);

  //Inicializar a conexão com internet.

  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("Server está em: ");
  Serial.println(Ethernet.localIP());
  Serial.println("Servidor LED V 1.0 :D");
}


void loop()
{
 
  EthernetClient client = server.available();
  if (client)

  {
    Serial.println("new client");

    while (client.connected())
    {
      if (client.available())

      {
        char c = client.read();

        // aqui tem-se uma string que ficará lendo as requisições feitas no IP do servidor.
        if (readString.length() < 100)

        {

          readString += c;
         
          Serial.write(c);
          if (c == '\n') {
            Serial.println(readString); //mostra no monitor para debuggar.

//--------------------------------------------------------------------------------------------------------
// necessário para mostrar o servidor.

client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println();
            client.println("<HTML>");
            client.println("<HEAD>");

//--------------------------------------------------------------------------------------------------------
//-------------------------------------------------

// Aqui o que será mostrado no site.
// Cria 2 botões para ligar e desligar.
       
            client.println("<TITLE>Automação Residencial</TITLE>");
            client.println("<center>");
            client.println("</HEAD>");
            client.println("<BODY>");
            client.println("<H1>Automação Residencial</H1>");
            client.println("<hr />");
            client.println("<center>");

            client.println("<a href=\"/?cmd=1\"\">Acende</a>");
            client.println("<br />");
            client.println("<br />");
            client.println("<a href=\"/?cmd=2\"\">Apaga</a><br />");    

            client.println("</BODY>");
            client.println("</HTML>");

            delay(1);
            //para o client
            client.stop();

            //-------------------------------------------------
            // Aqui é onde o código deve ser implementado:

            if(readString.indexOf("?cmd=1") >0)//checa se está ligado
            {
              digitalWrite(8, HIGH);    // seta pino 8 para HIGH
              Serial.println("Led On");
            }
            else{
              if(readString.indexOf("?cmd=2") >0)//checha se está desligado
              {
                digitalWrite(8, LOW);    // seta pino 8 para LOW
                Serial.println("Led Off");
              }
            }
            //limpa a string para a próxima leitura
            readString="";

            //dá tempo para o browser receber uma nova informação
            delay(1);
            // fecha conexão
            client.stop();
            Serial.println("client disonnected");

          }
        }
      }
    }
  }
}
--------------------------------------------------------------------------------------------------------------------------

OBS: Utilizando o código desta forma, você poderá apenas acessá-lo na rede onde ele está, e não de qualquer local do mundo visto que o endereço de IP só pode ser encontrado se estiver sendo acessado na mesma rede.

Para que você consiga acessar o Arduino de qualquer parte do mundo, você terá que alocá-lo em um servidor nuvem, ou redirecionando o IP com um roteador.

Outra forma de utilizar este código, é criando um APP Android para enviar essas requisições através da WEB, podendo assim fazer uma automação residencial via Mobile de baixo custo. Irei criar outro post mais a frente explicando como pode ser feito.

Deixo aqui um servidor nuvem que pode ser utilizado, e que uso até hoje sem problemas. 
www.Yaler.net

dúvidas podem ser deixadas em forma de comentários.
forte abraço ! (:

Comentários

Postagens mais visitadas deste blog

Conectando Arduino na Nuvem com Yaler

Arduino