19 Replies Latest reply on Apr 7, 2014 7:24 AM by ankitshyani

    Ethernet Shield error

    ankitshyani

      I am using below Open source Code to test my Ethernet sheild connected to Uno . Seems Everything is fine  but when I try to compile or upload its comming up with error ; 'Ethernet has not been declared' and There are few other error probally causing because of the Main error ;

      rbbb_server:11: error: 'Ethernet' has not been declared

      rbbb_server:12: error: 'BufferFiller' does not name a type

      rbbb_server.ino: In function 'void setup()':

      rbbb_server:15: error: 'ether' was not declared in this scope

      rbbb_server:15: error: 'Ethernet' has not been declared

      rbbb_server:17: error: 'ether' was not declared in this scope

      rbbb_server.ino: In function 'word homePage()':

      rbbb_server:25: error: 'bfill' was not declared in this scope

      rbbb_server:25: error: 'ether' was not declared in this scope

      rbbb_server.ino: In function 'void loop()':

      rbbb_server:39: error: 'ether' was not declared in this scope.

       

      if someone can help me fix this issues it will be grateful Thank you

       

      // This is a demo of the RBBB running as webserver with the Ether Card

      // 2010-05-28 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

       

       

       

      //#include <Ethernet.h>

      #include <EtherCard.h>

       

       

      // 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;

       

       

      void setup () {

        if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)

          Serial.println( "Failed to access Ethernet controller");

        ether.staticSetup(myip);

      }

       

       

      static word homePage() {

        long t = millis() / 1000;

        word h = t / 3600;

        byte m = (t / 60) % 60;

        byte s = t % 60;

        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"

          "<meta http-equiv='refresh' content='1'/>"

          "<title>RBBB server</title>"

          "<h1>$D$D:$D$D:$D$D</h1>"),

            h/10, h%10, m/10, m%10, s/10, s%10);

        return bfill.position();

      }

       

       

      void loop () {

        word len = ether.packetReceive();

        word pos = ether.packetLoop(len);

       

        if (pos)  // check if valid tcp data is received

          ether.httpServerReply(homePage()); // send web page data

      }

        • Re: Ethernet Shield error
          peteroakes

          Have you verified you have the correct library installed in the library folder for the IDE

           

          What Shield are you using, I would assume it would be a WizNet 5100 based shield but please confirm

           

          Based on the fact your getting the errors including the include itself, this would imply the compiler can not find the library

           

          WizNet is I believe fully supported by the default IDE libraries, the reason I ask it that you comment out ethernet.h and replaced with ethercard.h, why was this and does the other one work ?

           

          ethercard may be for the ENC chip Ethernet controller and would need you to actually download the library if your using that device of course.

           

          regards

          Peter

            • Re: Ethernet Shield error
              ankitshyani

              Dear Sir,

               

               

               

                   Thank you for your email. actually example I am using which is called Rbbb server example which work fine I think with ENC28J60 Ethernet Module, but Here I am using Arduino Ethernet Sheild Instead of ENC28J60 Do you think would it matter its just same modules in the end?

               

              when I use Web server example with Arduino Ethernet sheild it works fine I can get to that IP using web browser but problems comes when I use rbbb server example onto Arduino Ethernet sheild!

               

              ?Thank you

               

              Regards

               

              Ankit

              • Re: Ethernet Shield error
                ankitshyani

                Hi Sorry I meant I am using W5100? wiznet Ethernet sheild and rbbb server example doesnt work Its uploads but doesnt work ?

                 

                 

                Thank you

              • Re: Ethernet Shield error
                peteroakes

                Im Back, Had a look at your code, updated it to make it work, here is a video of the results

                 

                 

                The ENC28J60 does not directly support TCP/IP and requires a far larger library in order to implement it, the WIZ chip has firmware TCP/IP stack built in and supports several concurrent sessions

                 

                the Older ENC library was also incompatible with the default Arduino Library created to support the Wiznet chip

                 

                I hear there is now a later version that has been re-worked to be fully compatible so if you want maximum flexibility then you should adopt this new ENC library

                 

                You can find it here: https://github.com/ntruchsess/arduino_uip


                here is the adapted code based on your posted code to work on the WizNet board


                #include <SPI.h>
                #include <Wire.h>
                #include <stdio.h>
                #include <Ethernet.h>
                //#include <EtherCard.h>
                
                // ethercard 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];
                        
                //ethernet
                byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4E, 0x10 };  // MAC address 84.85.88.16.0.36
                byte ip[]  = { 192, 168, 1, 203 };                     // ip-address, please change to fit your network
                byte mydns[] = { 192, 168, 1, 1 };          
                byte gateway[] = { 192, 168, 1, 1 };           
                byte subnet[] = { 255,255,255,0 };
                EthernetServer server(80);
                static char output[300] = "";
                #define BUFLEN 255
                
                
                //BufferFiller bfill;
                
                
                void setup () {
                //ethercard
                // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
                //   Serial.println( "Failed to access Ethernet controller");
                //ether.staticSetup(myip);
                  Serial.begin(9600);
                  //ethernet
                  Ethernet.begin(mac, ip);
                  server.begin();
                  Serial.print("server is at ");
                  Serial.println(Ethernet.localIP());
                }
                char headerHTML[] = "HTTP/1.1 200 OK\r\n"
                          "Content-Type: text/html\r\n"
                          "Connection: close\r\n"
                          "Refresh: 5\r\n"
                          "\r\n"
                          "<!DOCTYPE HTML>"
                          "<Title>RBBS Server</Title>"
                          "<html>";
                        
                char footerHTML[] = "</html>" ;
                
                char * TimeElapsed() { // Was Home Page
                  long t = millis() / 1000;
                  word h = t / 3600;
                  byte m = (t / 60) % 60;
                  byte s = t % 60;
                  sprintf(output, "<h1>%d%d:%d%d:%d%d</h1>" , h/10, h%10, m/10, m%10, s/10, s%10);
                  return output;
                }
                
                void sendAnalogToNetwork(EthernetClient myClient)
                {
                    // output the value of each analog input pin for good measure
                    for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
                      int sensorReading = analogRead(analogChannel);
                      myClient.print("analog input ");
                      myClient.print(analogChannel);
                      myClient.print(" is ");
                      myClient.print(sensorReading);
                      myClient.println("<br />");     
                    }
                }
                
                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;
                    while (client.connected()) {
                      if (client.available()) {
                        char c = client.read();
                        Serial.write(c);
                        // if you've gotten to the end of the line (received a newline
                        // character) and the line is blank, the http request has ended,
                        // so you can send a reply
                        if (c == '\n' && currentLineIsBlank) {
                          // send a standard http response header
                          client.print(headerHTML);
                          // now send the stuff we want
                          client.print(TimeElapsed()); // your old code here
                          // do some more stuff
                          sendAnalogToNetwork(client);
                           // were done sending so now send the footer to close the page
                          client.println(footerHTML);
                          break;
                        }
                        if (c == '\n') {
                          // you're starting a new line
                          currentLineIsBlank = true;
                        }
                        else if (c != '\r') {
                          // you've gotten a character on the current line
                          currentLineIsBlank = false;
                        }
                      }
                    }
                    // give the web browser time to receive the data
                    delay(1);
                    // close the connection:
                    client.stop();
                    Serial.println("client disconnected");
                  }
                }
                
                
                

                 

                As you can see I have also provided a bit of re-formatting of the code to use more functions and variables for the constant strings, it could be better but it does demonstrate how the code needs to work on the Wiznet and also a few tips on program design

                 

                I hope it meets your needs and gets you going int the right direction

                 

                If this is the right Answer for you then please click "Correct Answer", thanks

                • Re: Ethernet Shield error
                  peteroakes

                  And to prove the new ENC library is code comparable with the Wiznet library here is the same sketch working on the ENC chip, the ONLY difference was which library I included

                   

                  Code :

                  #include <SPI.h>
                  #include <Wire.h>
                  #include <stdio.h>
                  //#include <Ethernet.h>
                  #include <UIPEthernet.h>
                  
                  // ethercard 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];
                           
                  //ethernet
                  byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4E, 0x10 };  // MAC address 84.85.88.16.0.36
                  byte ip[]  = { 192, 168, 1, 203 };                     // ip-address, please change to fit your network
                  byte mydns[] = { 192, 168, 1, 1 };           
                  byte gateway[] = { 192, 168, 1, 1 };            
                  byte subnet[] = { 255,255,255,0 };
                  EthernetServer server(80);
                  static char output[300] = "";
                  #define BUFLEN 255
                  
                  
                  //BufferFiller bfill;
                  
                  
                  void setup () {
                  //ethercard
                  // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
                  //   Serial.println( "Failed to access Ethernet controller");
                  //ether.staticSetup(myip);
                    Serial.begin(9600);
                  
                  
                    //ethernet
                    Ethernet.begin(mac, ip);
                    server.begin();
                    Serial.print("server is at ");
                    Serial.println(Ethernet.localIP());
                  }
                  char headerHTML[] = "HTTP/1.1 200 OK\r\n"
                            "Content-Type: text/html\r\n"
                            "Connection: close\r\n"
                            "Refresh: 5\r\n"
                            "\r\n"
                            "<!DOCTYPE HTML>"
                            "<Title>RBBS Server</Title>"
                            "<html>";
                           
                  char footerHTML[] = "</html>" ;
                  
                  char * TimeElapsed() { // Was Home Page
                    long t = millis() / 1000;
                    word h = t / 3600;
                    byte m = (t / 60) % 60;
                    byte s = t % 60;
                    sprintf(output, "<h1>%d%d:%d%d:%d%d</h1>" , h/10, h%10, m/10, m%10, s/10, s%10);
                    return output;
                  }
                  
                  void sendAnalogToNetwork(EthernetClient myClient)
                  {
                      // output the value of each analog input pin for good measure
                      for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
                        int sensorReading = analogRead(analogChannel);
                        myClient.print("analog input ");
                        myClient.print(analogChannel);
                        myClient.print(" is ");
                        myClient.print(sensorReading);
                        myClient.println("<br />");      
                      }
                  }
                  
                  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;
                      while (client.connected()) {
                        if (client.available()) {
                          char c = client.read();
                          Serial.write(c);
                          // if you've gotten to the end of the line (received a newline
                          // character) and the line is blank, the http request has ended,
                          // so you can send a reply
                          if (c == '\n' && currentLineIsBlank) {
                            // send a standard http response header
                            client.print(headerHTML);
                            // now send the stuff we want
                            client.print(TimeElapsed()); // your old code here
                            // do some more stuff
                            sendAnalogToNetwork(client);
                             // were done sending so now send the footer to close the page
                            client.println(footerHTML);
                            break;
                          }
                          if (c == '\n') {
                            // you're starting a new line
                            currentLineIsBlank = true;
                          }
                          else if (c != '\r') {
                            // you've gotten a character on the current line
                            currentLineIsBlank = false;
                          }
                        }
                      }
                      // give the web browser time to receive the data
                      delay(1);
                      // close the connection:
                      client.stop();
                      Serial.println("client disconnected");
                    }
                  }
                  
                  
                    • Re: Ethernet Shield error
                      ankitshyani

                      Thank you very much sir. Really appreciate your help. I would like you to help me if possible with this code below, Will it work with Wiznet ethernet module ? it works fine on ENC chip module.

                       

                      // DHT code from:

                      // Example testing sketch for various DHT humidity/temperature sensors

                      // Written by ladyada, public domain

                       

                      #include "DHT.h"

                       

                      #define DHTPIN 2     // what pin we're connected to

                       

                      // Uncomment whatever type you're using!

                      #define DHTTYPE DHT11   // DHT 11

                      // #define DHTTYPE DHT22   // DHT 22  (AM2302)

                      //#define DHTTYPE DHT21   // DHT 21 (AM2301)

                      DHT dht(DHTPIN, DHTTYPE);

                       

                      // LCD

                      // LCD RS=3, EN=4, DS4=5, DS5=6, DS6=7, DS7=8

                      #include Humidity: $D %

                      "),

                        t, h);

                        return bfill.position();

                      }

                       

                      // The main loop

                      //  We add to the timer and read the DHT11 values when Timer == 1, otherwise we loop without reading it

                      // Once the Timer value == to 1100 we zero it and start the count again.  This way the sensors are only

                      // read once every 1100 loops.  Every time we go through the loop we listen for a request on the Ethernet

                      //  If we see one we send the webpage.  We also add an animation on the LCD so we know the loop is working.

                       

                      void loop () {

                       

                        Timer  = Timer+1;

                        if(Timer==1)

                        {

                          ReadDHT11();

                          // set the cursor to (0,0):

                          lcd.setCursor(0, 0);

                          // print from 0 to 9:

                       

                          lcd.print("Temp: ");

                          lcd.print(t);

                          lcd.print("C");

                          // set the cursor to (16,1):

                          lcd.setCursor(0,1);

                          lcd.print("Humidity: ");

                          lcd.print(h);

                          lcd.print("%");

                       

                          if(Animation==0)

                          {

                            lcd.print("  *");

                          }

                          if(Animation==1)

                          {

                            lcd.print("  +");

                          }

                          Animation = Animation + 1;

                          if(Animation==2)

                          {

                            Animation=0;

                          }

                        }

                        if(Timer==1100)a

                        {

                          Timer=0;

                        }

                       

                        word len = ether.packetReceive();

                        word pos = ether.packetLoop(len);

                       

                        if (pos)  // check if valid tcp data is received

                        {

                          ReadDHT11();

                          ether.httpServerReply(homePage()); // send web page data

                        }

                      }

                       

                      Thank you

                      Regards

                      Ankit Patel

                        • Re: Ethernet Shield error
                          peteroakes

                          I think this will answer your question

                           

                          DHT22 temperature and Humidity Sensor with Arduino Uno and Ethernet Card (ENC or WizNet) (Instant weather Station)

                           

                          I posted this last night, all you need to do is incorporate the LCD bits of code and your done. It will work with the ENC or WIZ, just change the include statement

                           

                          Peter

                           

                          Please click "Correct Answer" or helpful if this is. thanks

                            • Re: Ethernet Shield error
                              ankitshyani

                              ?Thank you sir,

                               

                               

                                       I am sorry I sound so not clever. But Can you Please help me adding LCD bits onto this Code ?

                               

                               

                              Thank you

                               

                              Regards

                               

                              Ankit Patel

                              • Re: Ethernet Shield error
                                ankitshyani

                                at below The Code with LCD interface which doesnt work

                                 

                                 

                                // DHT code from:

                                // Example testing sketch for various DHT humidity/temperature sensors

                                // Written by ladyada, public domain

                                 

                                #include "DHT.h"

                                 

                                #define DHTPIN 2     // what pin we're connected to

                                 

                                // Uncomment whatever type you're using!

                                #define DHTTYPE DHT11   // DHT 11

                                // #define DHTTYPE DHT22   // DHT 22  (AM2302)

                                //#define DHTTYPE DHT21   // DHT 21 (AM2301)

                                DHT dht(DHTPIN, DHTTYPE);

                                 

                                // LCD

                                // LCD RS=3, EN=4, DS4=5, DS5=6, DS6=7, DS7=8

                                #include Humidity: $D %

                                "),

                                  t, h);

                                  return bfill.position();

                                }

                                 

                                // The main loop

                                //  We add to the timer and read the DHT11 values when Timer == 1, otherwise we loop without reading it

                                // Once the Timer value == to 1100 we zero it and start the count again.  This way the sensors are only

                                // read once every 1100 loops.  Every time we go through the loop we listen for a request on the Ethernet

                                //  If we see one we send the webpage.  We also add an animation on the LCD so we know the loop is working.

                                 

                                void loop () {

                                 

                                  Timer  = Timer+1;

                                  if(Timer==1)

                                  {

                                    ReadDHT11();

                                    // set the cursor to (0,0):

                                    lcd.setCursor(0, 0);

                                    // print from 0 to 9:

                                 

                                    lcd.print("Temp: ");

                                    lcd.print(t);

                                    lcd.print("C");

                                    // set the cursor to (16,1):

                                    lcd.setCursor(0,1);

                                    lcd.print("Humidity: ");

                                    lcd.print(h);

                                    lcd.print("%");

                                 

                                    if(Animation==0)

                                    {

                                      lcd.print("  *");

                                    }

                                    if(Animation==1)

                                    {

                                      lcd.print("  +");

                                    }

                                    Animation = Animation + 1;

                                    if(Animation==2)

                                    {

                                      Animation=0;

                                    }

                                  }

                                  if(Timer==1100)

                                  {

                                    Timer=0;

                                  }

                                 

                                  word len = ether.packetReceive();

                                  word pos = ether.packetLoop(len);

                                 

                                  if (pos)  // check if valid tcp data is received

                                  {

                                    ReadDHT11();

                                    ether.httpServerReply(homePage()); // send web page data

                                  }

                                }

                                 

                                • Re: Ethernet Shield error
                                  ankitshyani

                                  This is the code below you suggested but need to add LCD code bit ! I have no qlue what to do .. I am kind of Stuck!  ( I am using It with Wiznet Based Ethernet Sheild)

                                  #include ");

                                      }

                                  }

                                  /*******************************************************************************

                                   

                                  • Main Loop

                                  *******************************************************************************/

                                  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;

                                      while (client.connected()) {

                                        if (client.available()) {

                                          char c = client.read();

                                          Serial.write(c);

                                          // if you've gotten to the end of the line (received a newline

                                          // character) and the line is blank, the http request has ended,

                                          // so you can send a reply

                                          if (c == '\n' && currentLineIsBlank) {

                                            // send a standard http response header

                                            client.print(headerHTML);

                                            // now send the stuff we want

                                            client.print(TimeElapsed()); // your old code here

                                            // do some more stuff

                                            sendTempToNetwork(client);

                                            sendAnalogToNetwork(client);

                                             // were done sending so now send the footer to close the page

                                            client.println(footerHTML);

                                            break;

                                          }

                                          if (c == '\n') {

                                            // you're starting a new line

                                            currentLineIsBlank = true;

                                          }

                                          else if (c != '\r') {

                                            // you've gotten a character on the current line

                                            currentLineIsBlank = false;

                                          }

                                        }

                                      }

                                      // give the web browser time to receive the data

                                      delay(1);

                                      // close the connection:

                                      client.stop();

                                      Serial.println("client disconnected");

                                    }

                                  delay(2000);

                                  }

                                   

                                  void Cal_Temp()

                                  {

                                    if (TempHi&0x80)    // If bit7 of the TempHi is HIGH then the temperature is negative

                                      P_N = 0;

                                    else    // Else the temperature is positive

                                    P_N = 1;

                                   

                                    TempHi = TempHi & 0x7F;   // Remove sign

                                    TempLo = TempLo & 0xF0;   // Filter out last nibble

                                    TempLo = TempLo >>4; // Shift right 4 times

                                    Decimal = TempLo;

                                    Decimal = Decimal * 625;  // Each bit = 0.0625 degree C

                                    combined_temp_C= TempHi + TempLo*.0625;

                                    combined_temp_F = combined_temp_C*1.8+32;

                                     sprintf(strTempC, "%f", combined_temp_C);

                                     sprintf(strTempF, "%f", combined_temp_F);

                                  }

                                  ////Celsius to Kelvin conversion

                                  //double Kelvin(double celsius)

                                  //{

                                  //        return celsius + 273.15;

                                  //}

                                   

                                  // dewPoint function NOAA

                                  // reference: http://wahiduddin.net/calc/density_algorithms.htm

                                  double dewPoint(double celsius, double humidity)

                                  {

                                          double A0= 373.15/(273.15 + celsius);

                                          double SUM = -7.90298 * (A0-1);

                                          SUM += 5.02808 * log10(A0);

                                          SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;

                                          SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;

                                          SUM += log10(1013.246);

                                          double VP = pow(10, SUM-3) * humidity;

                                          double T = log(VP/0.61078);   // temp var

                                          return (241.88 * T) / (17.558-T);

                                  }

                                   

                                  // delta max = 0.6544 wrt dewPoint()

                                  // 5x faster than dewPoint()

                                  // reference: http://en.wikipedia.org/wiki/Dew_point

                                  double dewPointFast(double celsius, double humidity)

                                  {

                                          double a = 17.271;

                                          double b = 237.7;

                                          double temp = (a * celsius) / (b + celsius) + log(humidity/100);

                                          double Td = (b * temp) / (a - temp);

                                          return Td;

                                  }

                                   

                                  Thank you

                                  Regards

                                  Ankit Patel

                              • Re: Ethernet Shield error
                                ankitshyani

                                How DO I Add DHT11 library .. I tried Changing DHT22 to DHT11 in source code But it doesnt work. its comming up with error saying ;

                                'dht' does not name type

                                DCT22_test:7: error: 'dht' does not name a type

                                DCT22_test.ino: In function 'void sendTempToNetwork(EthernetClient)':

                                DCT22_test:62: error: 'DHT' was not declared in this scope

                                I am trying to use DHT11 in same code above !

                                 

                                 

                                Thank you

                              • Re: Ethernet Shield error
                                peteroakes

                                As for DHT22 vs DHT11 the only change is this

                                 

                                    int chk = DHT.read22(DHT22_PIN); change to     int chk = DHT.read11(DHT22_PIN); assuming the DHT11 is on the same pin as the variable DHT22_PIN is configured for which in the code is pin 2