Ajuda-me no meu projecto

Boa tarde pessoal!! :slight_smile:
Como eu sou novato nisto, estou a precisar de um empurrão para tentar acabar meu projeto que consiste em eu criar um web server que vai apresentar dados de temperatura e humidade, eu estou utilizar os seguintes a shield enc28j60"para conectar com a net para depois monstra no browser" o sensor DHT11" para dar os dados de temperatura e humidade ".
Eu já tentei fazer um código mas tá ter um erro nos dados e não estou a conseguir corrigir o erro. :~


#include <dht.h>
#include <EtherCard.h>
#define dht_dpin A1

dht DHT;

// ethernet interface mac address, must be unique on the LAN
static byte mymac = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip = { 192,168,1,203 };

byte Ethernet::buffer[500];
BufferFiller bfill;
float rh, rt;

void setup () {
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println( “Failed to access Ethernet controller”);
ether.staticSetup(myip);

Serial.begin(9600);
dht.begin();
}

static word homePage() {
DHT.read11(dht_dpin);

bfill = ether.tcpOffset();
bfill.emit_p(PSTR(
“HTTP/1.0 200 OK\r\n”
“Content-Type: text/html\r\n”
“Pragma: no-cache\r\n”
“\r\n”
“”
“RBBB server”
"

Arduino

"
"
"

Humidity: $D


Temperature: $D

”),
rh, rt);
return bfill.position();
}

void loop () {
rh = dht.readHumidity();
rt = dht.readTemperature();

word len = ether.packetReceive();
word pos = ether.packetLoop(len);

if (isnan(rt) || isnan(rh)) {
Serial.println(“Failed to read from DHT”);
} else {
Serial.print(“Humidity: “);
Serial.print(rh);
Serial.print(” %\t”);
Serial.print(“Temperature: “);
Serial.print(rt);
Serial.println(” *C”);
}

if (pos) // check if valid tcp data is received
ether.httpServerReply(homePage()); // send web page data
}


Eu espero que me possam dar uma ajuda :smiley:

Meus comprimentos
Tiago Gomes

Esse funciona, mas é com DS18B20, basta você adaptá-lo.

Baseado em http://mk90.blogspot.com.br/2013/05/web.html

//*********************************************************//
// Name:      EtherCard + DS18B20 ? ?????????              //
// Author:    Ilya Danilov www.mk90.ru/blog                //
// Date:      07 May 2013, LAST UPDATE: 18 May 2013        //
// Version:   0.0.1                                        //
// Schematic: ???????-??????????? ????? ?? ATmega328P +    //
//            EtherCard (SS=D10) + DS18B20 (D9)            //
// Note:      ??? ????????? ????? ??????? ?????????? ????? //
//            ???????? DS12B20, ??????????? ? ?????????    //
//            ??????? ???????? ???????????. ? ????????     //
//            ?????????????? ??????? ????????? ????????,   //
//            ?????? ?????????????? ? ??????. ??. ?????    //
//            mk90.blogspot.com/DS18B20                    //    
// Based on EtherCard project: github.com/jcw/ethercard    //
//*********************************************************//
#include <OneWire.h>
#include <EtherCard.h>

// Definição Ethernet

#define BUF_SIZE 512

byte mac[] = { 0x00, 0x04, 0xA3, 0x21, 0xCA, 0x39 }; // MAC address

byte fixed = false; // =false: tentando obter um endereço DHCP, 
                    //         em caso de falha de usar uma estática; 
                    // =true:  usar imediatamente uma estática

uint8_t ip[] = { 10, 16, 131, 23 };       // Endereço IP estático
uint8_t subnet[] = { 255, 255, 252, 0 };  // Mascara de subrede
uint8_t gateway[] = { 10, 16, 130, 70 };  // Gateway
uint8_t dns[] = { 10, 16, 130, 9 };       // Endereço servidor DNS (opcional)

byte Ethernet::buffer[BUF_SIZE];
static BufferFiller bfill;  // used as cursor while filling the buffer

// ????????? OneWire

#define DS18B20PIN  9
OneWire ds(DS18B20PIN);

// ??????? DS18B20

void setConversionTime(byte conf) {
  ds.reset();
  ds.skip(); // skip ROM
  ds.write(0x4E); // write scratchpad
  ds.write(0); // Th
  ds.write(0); // Tl
  ds.write(conf); // configuration
}

void startConversionAll() {
  ds.reset();
  ds.skip(); // skip ROM
  ds.write(0x44, 1); // start conversion
  delay(10);
}

//#include <avr/pgmspace.h>

prog_char string_0[] PROGMEM = "Sensor 0";
prog_char string_1[] PROGMEM = "Sensor 1";
prog_char string_2[] PROGMEM = "Sensor 2";

PROGMEM const char *locations[] = 
{   
  string_0,
  string_1,
  string_2
};

void setup(void)
{
    Serial.begin(57600);
    delay(2000);

    // Verifique se o controlador Ethernet está disponível para trabalhar 
    Serial.println("Initialising the Ethernet controller");
    if (ether.begin(sizeof Ethernet::buffer, mac) == 0) {
        Serial.println( "Ethernet controller NOT initialised");
        while (true);
    }

    // Tentando obter um endereço dinamicamente
    Serial.println("Attempting to get an IP address using DHCP");
    if (ether.dhcpSetup()) {
        ether.printIp("Got an IP address using DHCP: ", ether.myip);
    } else {
        // Se o DHCP não estiver disponível, use um endereço IP estático
        ether.staticSetup(ip, gateway, dns);
        ether.printIp("DHCP FAILED, using fixed address: ", ether.myip);
        fixed = true;
    }
}

char okHeader[] PROGMEM =
  "HTTP/1.0 200 OK\r\n"
  "Content-Type: text/html; charset=utf-8\r\n"
  "Pragma: no-cache\r\n"
;

char authorLink[] PROGMEM =
  "</pre><hr>Temperatura"
;

static void homePage (BufferFiller& buf) {
  
  buf.emit_p(PSTR("$F\r\n"
//    "<title>Arduino web-thermometr</title>"
    "<h2>DS18B20 Network:</h2>"
    "<pre>"), okHeader);
  
  byte counter = 0; 
  byte addr[8]; 
  byte data[12];
  
  setConversionTime(0x7F); // conjunto de resolução de 9 bits
  startConversionAll(); // iniciar a conversão de temperatura
  delay(400); // para converter a 9 bits requer 93,75 ms
  
  // dispositivo procura e exibir os resultados
  ds.reset_search();
  delay(250);
  while (ds.search(addr)) {
    //buf.emit_p(PSTR("$D: "),++counter);
    buf.emit_p( (char*)pgm_read_word(&(locations[counter++])) );
    buf.emit_p(PSTR(": "));
    
    if ( OneWire::crc8(addr, 7) != addr[7]) {
      buf.emit_p(PSTR("- address CRC is not valid!\n"));
      continue;
    } else if (addr[0] != 0x28) {
      buf.emit_p(PSTR("- is not a DS18B20 family device!\n"));
      continue;
    }
    ds.reset();
//    ds.select(addr);
//    ds.write(0x44, 1);        // start conversion, with parasite power on at the end
//    delay(1000);     // maybe 750ms is enough, maybe not
    // we might do a ds.depower() here, but the reset will take care of it.
  
    ds.reset();
    ds.select(addr);
    ds.write(0xBE); // leia rascunho
    for (byte k=0; k<9; k++) {  // precisamos de 9 bytes
      data[k] = ds.read();
    }     
    if ( OneWire::crc8( data, 8) != data[8]) {
      buf.emit_p(PSTR("- value CRC is not valid!\n"));
      continue;
    }
    buf.emit_p(PSTR("<title>$D.$D °C</title>"), *(int *)data/16, (int) (abs(*(int *)data % 16) * 0.625));
    buf.emit_p(PSTR(" $D.$D °C\n"), *(int *)data/16, (int) (abs(*(int *)data % 16) * 0.625));
  }
  buf.emit_p(PSTR("\nTotal: $D devices."), counter);
  buf.emit_p(authorLink);
}


void loop(void)
{
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  if (pos) { 
    bfill = ether.tcpOffset();
    char* data = (char *) Ethernet::buffer + pos;
    Serial.println(data); // imprimir um pedido de depuração
    
    if (strncmp("GET / ", data, 6) == 0) 
      homePage(bfill);
    else
      bfill.emit_p(PSTR(
        "HTTP/1.0 401 Unauthorized\r\n"
        "Content-Type: text/html\r\n"
        "\r\n"
        "<h1>401 Unauthorized</h1>"));
        
    // enviar uma resposta para o cliente
    ether.httpServerReply(bfill.position());
  }
}

Exactamente, o que é "um erro com os dados"? Falha logo no "Verify"/"Upload" ou falha quando está em funcionamento?