Teste do Servidor Web com Arduino


Projeto Piloto
Introdução à Robótica Educacional com Software e Hardware Livres

Tendo em vista nossa aquisição de um Shield Ethernet da Empresa Empretecnet ENC28J60, imagem abaixo: 



Estamos agora partindo para testes e em seguida para a idealização de nosso primeiro projeto de automação residencial via internet.

Com base neste código, acabamos de colocar no ar, para testes de conexão, nosso servidor (Arduino+Shield+LEDs), nesse momento se encontra ativo e com 2 LEDs ligados a ele nas portas 6 e 7.

Solicitamos aos visitantes, que tiverem um tempinho livre, que usem o link abaixo, cliquem nos botões e se possível nos retornem, via comentários, se deu tudo certo, críticas ou ainda sugestões para que possamos caminhar com o desenvolvimento de mais este projeto.

Link para testar o Servidor: aqui

Observação: claro que vocês não poderão ver os LEDs apagando e acendendo, pois os mesmos estão aqui, mas com a ajuda de vocês saberemos se os botões estão funcionando bem e nós ainda podermos saber daqui quantos estão acessando ao mesmo tempo nosso Servidor de testes.

Se alguém se interessar pelo código fonte usado no Arduino, segue abaixo:

/* Programa para acender e apagar LEDs ou Lampadas, com o ETHERNET SHIELD ENC28J60
*/

// Estamos incluindo aqui as bibliotecas que vao nos ajudar no controle do Shield
#include "etherShield.h"
#include "ETHER_28J60.h"

int luz1 = 6; // LED ou Lampada ligados no pino 6
int luz2 = 7; // LED ou Lampada ligados no pino 7

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // Aqui fica o MAC do SHIELD, nao precisamos mexer 
static uint8_t ip[4] = {10, 0, 0, 181}; // Esse e o endereco IP do nosso SHIELD 
static uint16_t port = 80; // Porta padrao de acesso a WEB, em nosso caso a 80

// Esse "vrlivre" sera o nome que nosso SHIELD tera daqui para baixo
ETHER_28J60 vrlivre;

void setup(){

vrlivre.setup(mac, ip, port); // Setando o MAC, IP e PORTA
pinMode(luz1, OUTPUT); // Informando que o pino e de saida
pinMode(luz2, OUTPUT); // Informando que o pino e de saida

}

void loop(){
  
char* params;
if (params = vrlivre.serviceRequest()){

//Agora o param recebe o que o serviceRequest retornar das requisições do navegador
vrlivre.print("<center><br><h1><a href='/?led1=off&led2=off'>Acendendo e apagando a LUZ via Web</a></h1>");

if (strcmp(params, "?led1=on&led2=off") == 0)
    {
      digitalWrite(luz1, HIGH);
      digitalWrite(luz2, LOW);
      vrlivre.print("<a href='?led1=off&led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Luz1 Acesa</button></a><a href='?led1=on&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Luz2 Apagada</button></a>");
    }
    else if (strcmp(params, "?led1=off&led2=on") == 0)
    {
      digitalWrite(luz1, LOW);
      digitalWrite(luz2, HIGH);
      vrlivre.print("<a href='?led1=on&led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Luz1 Apagada</button></a><a href='?led1=off&led2=off'><br/><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Luz2 Acesa</button></a>");
    }
    else if (strcmp(params, "?led1=off&led2=off") == 0)
    {
      digitalWrite(luz1, LOW);
      digitalWrite(luz2, LOW);
      vrlivre.print("<a href='?led1=on&led2=off'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Luz1 Apagada</button></a><a href='?led1=off&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Luz2 Apagada</button></a>");
    }
    else if (strcmp(params, "?led1=on&led2=on") == 0)
    {
      digitalWrite(luz1, HIGH);
      digitalWrite(luz2, HIGH);
      vrlivre.print("<a href='?led1=off&led2=on'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Luz1 Acesa</button></a><a href='?led1=on&led2=off'><br/><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Luz2 Acesa</button></a>");
    }
    vrlivre.respond();
  }
}

Deixem suas dúvidas ou sugestões nos comentários.

3 comentários:

  1. Pessoal segue o http://LinkDuino.com, com ele você pode controlar vários dispositivos e sensores remotamente em tempo real. O LinkDuino é um webservice free para Arduino.

    ResponderExcluir
  2. Preciso de uma ajuda com essa pergunta. Obrigado

    Que endereços devem ser configurados por software para conectar um módulo ENC28J60 em uma rede IP.

    ResponderExcluir
  3. Basta seguir o exemplo da postagem, trocando os endereços do post pelos da sua rede, por exemplo.....

    ResponderExcluir

O conteúdo deste blog/site pode e deve ser divulgado, conforme lei a 9.610/98 meus direitos estão assegurados, portanto eu permito a copia e reprodução gratuita, seja total ou parcial, não acarretando qualquer onûs financeiro aos interessados, porém, vedo o uso para fins lucrativos, toda reprodução para o público deve citar a fonte extraída, no caso o Técnico Linux - Espaço dos Implementadores de Informática e seja citada junto com um link para a postagem original, onde a referência deve estar numa fonte de tamanho igual ou maior a do texto, obviamente que os links citados não estão sujeitos ao mesmo termo. O conteúdo textual original desta página está disponível sob a licença GNU FDL 1.2.

Todas as marcas citadas pertencem aos seus respectivos proprietários. Os direitos autorais de todas as ilustrações pertencem aos respectivos autores, e elas são reproduzidas na intenção de atender ao disposto no art. 46 da Lei 9.610 - se ainda assim alguma delas infringe direito seu, entre em contato para que possamos removê-la imediatamente ou ainda lhe dar os devidos créditos.

Copyright © 2016 Espaço dos Implementadores de Informática