Arduino - ethernet shield [VYRESENO]

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

Arduino - ethernet shield [VYRESENO]

#1 Příspěvek od jiri255 »

Zdravím,
obracím se na Vás s prosbou.Dorazil mi k Arduinu Mega ethernet shield, který bych chtěl použít pro ruční ovládání relé přes web v domácí síti.
Připojil jsem ho k Arduino, zapojil do něj síťový kabel, který mám přes switch napojený do síťovky v PC (nastavil jsem si na síťovce adresu 192.168.0.2 a masku 255.255.255.0) a nahrál do Arduino tento program pro prvotní zkoušku toho ethernet shieldu (ip jsem si v programu zmenil na 0.150, aby to odpovídalo nastavení v PC.

Kód: Vybrat vše

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip( 192, 168, 0, 150);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  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;
    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.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
	  client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");       
          }
          client.println("</html>");
          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 disonnected");
  }
}
Na tom modulu svítí kontrolky, že to má napájení (přes USB), že je to připojené, atd. ,ale když zadám do prohlížeče adresu toho modulu
http://192.168.0.150, tak se nic nenačte.
Když dám ping na adresu 192.168.0.150, tak na tom modulu bliká kontrolka rx a dostávám jen odpověď:
Odpověď od 192.168.0.2: Cílový hostitel není dostupný.
Program je standardní ten co je v aplikaci na zkoušku, takže by v něm chyba být neměla.
Netušíte někdo co by mohlo být ještě za problém, že se stránka nenačte?
Všude píšou, připojte, nahrajte program "web server" a jede to...

Předem děkuji za pomoc
Naposledy upravil(a) jiri255 dne 18 kvě 2014, 12:32, celkem upraveno 1 x.

Uživatelský avatar
HiGhLaNdEr
Příspěvky: 912
Registrován: 08 bře 2005, 01:00
Bydliště: Českobudějovicko
Kontaktovat uživatele:

#2 Příspěvek od HiGhLaNdEr »

while (!Serial)

proběhne ?

hledal bych právě tam, nejdřív, pokud neni nějaký jiný důvod jako třeba špatný ethernet kabel tak to vypadá že se to vůbec nedostane dál, dal bych tam do while od serveru nějaký řádek aby posílal někam na seriák něco aby jsi věděl že se ta smyčka spustila. Přápadně na počítači nainstalovat wireshaark a koukat co tam kde lítá, jestli něco vůbec.

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#3 Příspěvek od Celeron »

Kontrolovals RJ kabel? Jednou jsem koupil zmetek, blbě zapojený. Máš na obou stranách stejnou síťovou masku? Nemáš někde kolizi IP adres? Pokud to je běžně v sériový produkci tak to bude spíš něco takovýhleho, pokud ne tak máš smolík a je vadnej.
Jirka

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#4 Příspěvek od jiri255 »

tak jsem odzkoušel kabel a je funkční, ale nedalo mi to a s arduina jsem vykopnul ten ethernet shield a nahrál jsem tam program na blikání té ledky na pinu 13, abych začal od úplného začátku a ejhle ona ani po resetu nebliká.
Teď mě napadá jedna otázka předtím než jsem tam nasadil ten modul jsem tam měl nahranej program pro ovládání relátek, dráty jsem vyházel zapojil jsem tam ethernet modul připojil k pc přes USB a nahrál ten program web server... nemohl ten program pro ovládání relé, co tam byl předtím, udělat nějaký problém v kombinaci s tím ethernet modulem, protože teď se mi na arduinu při nahrávání programu ledky nerozblikají, ale ani to nevyhodí při nahrávání žádnou chybu :-( Lze to Arduino nějak vrátit do továrního nastavení?

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#5 Příspěvek od jiri255 »

tak nenapadlo mě nic blbějšího než prostě zmáčknout reset, držet ho a pustit do toho program na blikání té ledky, pak jsem to odpojil od PC a znovu připojil a sláva ledka bliká :-)
Nahrál jsem tam tedy úplný základ

Kód: Vybrat vše

void setup() 
{                
     
}


void loop() 
{

}
a opět odpojil od pc a připojil ten ethernet modul. Znovu jsem to připojil k PC nahrál ten program web server viz výše a běží.
Vůbec netuším co se té desce stalo nebo proč stávkovala, ale teď už to šlape :D
Díky všem za pomoc

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“