Go Down

Topic: aduino ethernet shield (Read 3308 times) previous topic - next topic

fafidio

con processing, ci sono della pagine belle e pronte con dei pulsanti, oppure devo crearmele?
Dato che devo operare sempre nella stessa rete, e dovendo collegare due arduino (uno collegato ai magneti della porta e l'altro che deve acendere il led quando la porta si apre) mi conviene caricare due pagine html sulle sd in modo da gestirle da qualsiasi computer della rete?
dal punto di vista grafico, processing mi dà la possibilità di creare pulsanti o di visualizzare se l'input di arduino è attivato o meno? grazie, a presto..... :smiley-roll-sweat:

lesto

processing mette a disposizione degli oggetti pulsante ecc... con la libreria p4 qualcosa.
Però il posizionamento/apparenza lo fai via codice, non c'è una GUI builder.

Però se le tue necessità son queste, meglio andare di webserver e pagine html
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fafidio

infatti la mia paura è proprio quella di non riuscire poi a creare una interfaccia grafica intuitiva: con la pagina web mi sembra più facile creare qualcosa di gestibile anche da uno meno esperto. Ma se creo la pagina come faccio a caricarla su arduino? grazie....

fafidio

aiutooooooo..... .sto cercando di caricare una pagina web su Sd di arduino: non riesco!!!! qualcuno mi spiega come si fa??????grazie...

lesto

metodo facile: stacca l'sd, attaccala al pc e carica il file

metodo medio: crei uno sketch che legge un file da seriale e lo salva su SD

metodo "difficile": crei un comando seriale che esegua il codice del metodo medio
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fafidio

opto per la più facile grazie!!! :)

fafidio

sto cercando di caricare l'esempio di gianni c. http://arduino.cc/forum/index.php/topic,54797.msg404446.html#msg404446 ma mi dà l'errore quando carico lo skethc su arduino; ho copiato i file nella root della sd, e poi la demo su arduino: -------> serie di errors!!!!come mai?

lesto

senza conioscere gli erorri la vedo dura....
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fafidio

#23
Apr 07, 2011, 10:00 pm Last Edit: Apr 07, 2011, 11:38 pm by fafidio Reason: 1
finalmente riesco ad accendere un led da ethernet

#include <Server.h>
#include <Client.h>

#include <Ethernet.h>

//Arduino uses digital pins 10, 11, 12, and 13 (SPI) to communicate with the W5100 on the ethernet shield
int ledPIN = 9;
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//byte ip[] = { 10, 0, 0, 4};
byte ip[] = { 192,168,1,15 };
byte gateway[] = {192,168,1,1};
byte subnet[] = {255,255,255,0};

Server server(77);

void setup()
{
// setta come output
pinMode(ledPIN, OUTPUT);
// initialize the ethernet device
Ethernet.begin(mac, ip, gateway, subnet);
// start listening for clients
server.begin();
Serial.begin(9600);
Serial.println("Accetto");
blink (5);
}

void loop()
{
Client client = server.available();
server.write('_ok_');
// il client si collega con il comando:
// telnet 192.168.1.15 77
if (client) {
   int rcv = client.read();
   // echo vs il client:
   server.write(rcv);
   // Serial.print(rcv);

   // comandi accettati:
   // 1=acceso, 0=spento, B=blink
   switch (rcv) {
   case '1':
    digitalWrite(ledPIN, HIGH);
     Serial.println("CMD 1 received");
     break;
   case '0':
     digitalWrite(ledPIN, LOW);
     Serial.println("CMD 0 received");
     break;
   case 'B':
     blink(2);
     Serial.println("CMD B received");
     break;
   }
}
}


void blink (int times)
{
for (int cnt=times; cnt>0; cnt--)
{
   digitalWrite(ledPIN, HIGH);   // set the LED on
   delay(200);
   digitalWrite(ledPIN, LOW);    // set the LED off
   delay(200);
}
}



fafidio

qualcuno mi aiuta comporre uno sketch che mi consenta di mettere in ascolto il secondo dei due arduino collegati su rete intranet mentre il primo invia un comando? fin'ora sono riuscito "solo" ad inviare un comando via telnet e fare accendere un led  (con ethernet shield)!!!!
praticamente devo inviare un comando sull'indirizzo ip del secondo arduino.....ma non trovo la soluzione... :~
grazie a tutti!!

lesto

beh, il secondo arduino sarà un client...
e guarda caso tra gli esempi c'è TelnetClient, che legge dei comandi da seriale e li invia al server... a partire da quel codice dovrebbe essere uno scherzo fare quello che ti serve  :smiley-mr-green:
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fafidio

...che fatica..ma non mi arrendo!!! grazie lesto di tutte le dritte!!
finalmente ho modificato un prgammino in html che mi fa accendere il led con una inte
Quote

/*
 Web server preso dall'esempio dell'ide e modificato da me
 */

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x3A, 0xA3 };
byte ip[] = { 192,168,0,107 };

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

int analogChannel = 5; //pin analogico dell LM35
int ledpin = 8;  //pin del led
float tempC = 0;  //temperatura in gradi celsius
int ledstatus = 0;  //stato del led

void setup()
{
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  pinMode(analogChannel,INPUT); //input dell' LM35
  pinMode(ledpin,OUTPUT); //output del led
  Serial.begin(9600);
}

void loop()
{
  //leggiamo la temperatura
  tempC = (analogRead(analogChannel) * 4.88 * 100)/1024;
  // listen for incoming clients
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    String readstring;  //stringa per la lettura dal browser
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readstring.concat(c);    //aggiunge c alla stringa;
        // 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) {
          readstring.concat('\0');
          //controllo su seriale
          Serial.println("stringa: ");
          Serial.println(readstring);
          Serial.print("indexOf(led=1): ");
          Serial.println(readstring.indexOf("led=1"));
          Serial.print("indexOf(led=0): ");
          Serial.println(readstring.indexOf("led=0"));
          
          if(readstring.indexOf("led=1") == 6){
            digitalWrite(ledpin,HIGH);
            ledstatus = 1;
            Serial.println("LED ON");  //controllo
          }
          if(readstring.indexOf("led=0") == 6){
            digitalWrite(ledpin,LOW);
            ledstatus = 0;
            Serial.println("LED OFF"); //controllo
          }
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          //Creazione pagina web
          client.println("<html><head>");
          
          client.println("<title>Domotic-Arduino</title>");
          
          client.println("</head>");
          client.println("<body bgcolor=""black"" text=""white"">");
          
          client.println("<h1 align=""center"">Domotic-Home</h1><hr />");
          client.println("<br />");
          client.print("Temperatura interna : ");
          client.print((int)tempC);
          client.println(" C");
          client.println("<br /><br />");
          client.println("<h3><a href=""/"">Aggiorna Sensore</a></h3>");
          client.println("<br />");
          client.println("<hr />");
          client.println("<br />");
          client.print("Comandi LED su pin ");
          client.println(ledpin);
          client.println("<br />");
          client.print("Stato LED :");
          if(ledstatus){
            client.println("<font color=""green""> ON</font>");
          }else{
            client.println("<font color=""red""> OFF</font>");
          }
          client.println("<br />");
          client.println("<h2><a href=""/?led=1"">ACCENDI</a> | <a href=""/?led=0"">SPEGNI</></h2>");
          
          client.println("</body></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();
  }
}


rfaccia grafica in html.

Ma ora non riesco a capire come fare  a farlo accendere premendo il tasto sull'altro arduino. Ho provato con la libreria telnet client: ma dove modifico la stringa per far capire al server che deve rievere da client?

grazie a presto.

lesto

non devi modificare nulla. Il secondo arduino si connette, invia un messaggio facendo in modo che la stringa "led=1" o "led=0" sia in 6 posizione, così da essere riconosciuta e accettata dall'indexof().
fine :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fafidio

quindi non mi resta che collegare il pulsante su pin 2 e 5V , con il resistore pin 2 verso ground e alla pressione del pulsante il server sarà già in ascolto... naturalmente dopo aver assegnato gli indirizzi del client per far recapitare il tutto al server in rete locale!!! Speriamo bene..a dopo per i risultati, spero che non mi esploda l'arduino XD XD XD.......

fafidio

che faccio lesto, procedo così?

Go Up