Fala Galera, vejam se podem me ajudar!

Estou tentando utilizar o arduino com o shield ethernet como um server, assim posso visualizar dados enviados pelo arduino em uma página web. Meu código é bem simples, segue abaixo:

#include <Ethernet.h>
#include <EthernetServer.h>
#include <EthernetClient.h>
#include <SPI.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {172,17,1,200};
byte gateway[] = {172,17,1,1};
byte subnet[] = {255,255,255,0};

EthernetServer server(80);

void setup(){
  Ethernet.begin(mac,ip,gateway,subnet);
  server.begin();
  Serial.begin(9600);
}

void loop(){
  EthernetClient client = server.available();
 
  if(client){
    boolean proxLinha = true;
    while(client.connected()){
      if(client.available()){
        char c = client.read();
        Serial.println(c);
        if (c == 10 && proxLinha){
          Serial.println("TO AQUI");
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
        }
        if(c == '\n'){
          proxLinha = false;
        }
        else if (c != '\r'){
          proxLinha = false;
        }
      }
    }
          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<TITLE>WEBINO</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");
          client.println("TESTE DO JOSE");
          client.println("</BODY>");
          client.println("</HTML>");
  }
  delay(1000);
  client.stop();
}

Mas ai vem o problema eu não consigo acessar através do navegador. Debugando o código eu notei o seguinte, coloquei um "Serial.println("TO AQUI");" dentro do if que verifica se o ultimo caractere da requisição é um '\n' e simplesmente não esta entrando no if, se eu tirar a comparação "c=='\n', ai funciona, minha teoria então é que esse '\n' não esta sendo entendido pelo código, alguem já passou por isso? como posso fazer pro código entender que a requisição do navegador chegou ao fim?

desde já agradeço

Josemar

Exibições: 476

As respostas para este tópico estão encerradas.

Respostas a este tópico

Ae rapaziada, consegui fazer funcionar! não alterei algumas coisas, segue abaixo o código que funcionou para quem quiser:

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

//SUBSTITUA os XXX pelo seu ip e seu gateway respectivamente
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {xxx,xxx,xxx,xxx}; // ip fixo
byte gw[] = {xxx,xxx,xxx,xxx}; // gateway
byte nm[] = {255,255,255,0}; //mascara de sub rede

EthernetServer server(80);

void setup() {
 //  Inicia comunicação serial
  Serial.begin(9600);

  // inicia o shield Ethernet
  Ethernet.begin(mac, ip, gw, nm);
  //iniciar o servidor
  server.begin();
  Serial.print("Server ON ");
  //printa o ip do server
  //Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    //Serial.println("new client");
    // an http request ends with a blank line
    //boolean currentLineIsBlank = true;
    boolean linhaEmBranco = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        //Serial.write(c); //Se descomentado é possivel ver o cabeçalho da requisição
        
        if (c == '\n' && linhaEmBranco) {
          // envia um header padrao para response
          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>");
          //client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          client.println("<head>");
          client.println("<title>");
          client.println("WEBINO");
          client.println("</title>");
          client.println("</head>");
          client.println("<body>");
          client.print("TESTE do JOSE ");
          client.print("<br />");
          client.print("<input type=\"button\" value=\"Clique\" onClick=\"window.alert('Josemar')\">");
          client.println("<br />");
          client.println("</body>");     
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          linhaEmBranco = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          linhaEmBranco = false;
        }
      }
    }
    //tempo para o arduino receber os dados
    delay(1);
    // fecha conexao
    client.stop();
    Serial.println("Conexao Encerrada");
  }
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço