Facebook  -  Twitter      

Questo forum fa uso dei cookie
Questo forum utilizza i cookie per memorizzare i dettagli del tuo login o della tua ultima visita. I cookie sono piccoli files di testo salvati nel computer; i cookie da noi utilizzati sono relativi unicamente ai servizi da noi forniti direttamente o dai banner pubblicitari. I cookie su questo forum salvano inoltre i dettagli relativi alle discussioni lette e alle tue preferenze personali. Sei pregato di selezionare il tasto OKAY se sei consapevole della presenza di questi files e ci autorizzi ad utilizarli per le informazioni specificate.

Indipendentemente dalla tua scelta un cookie verrà salvato per memorizzare nel tuo pc la risposta a questo form. Puoi modificare le impostazioni relative ai cookie nelle preferenze del tuo browser.

  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Guida: Domotica di base con Arduino

#1

In questo tutorial vi mostro come pilotare un led collegato al PIN2 di Arduino tramite una pagina web che consente di accenderlo e spegnerlo

2013-10-03 16-17-00.067

Lo shield utilizzato è un comune ENC20J60 (lo trovate a pochi € su EBAY) e andrà connesso in questo modo:

PINOUT Adruino UNO/2009 Arduino 1280/2560
SO 12 50
SI 11 51
CLK 13 52
CS 8/10 8/53
VCC 3V3 3V3
GND GND GND

la libreria si può scaricare QUI (rinominando la cartella “EtherCard” e va copiata nella vartella “libraries” dove avete installato Arduino)

mentre lo Sketch ottimizzato per la Mega 2560 è il seguente:

Codice:
// A simple web server that turn an LED on or off"

#include "etherShield.h"
#include "ETHER_28J60.h"

int outputPin = 6;

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};   // this just needs to be unique for your network,
                                                          
static uint8_t ip[4] = {192, 168, 1, 15}; // IP address for the webserver

static uint16_t port = 80; // Use port 80 - the standard for HTTP

ETHER_28J60 e;

void setup()
{
  e.setup(mac, ip, port);
  pinMode(outputPin, OUTPUT);
}

void loop()
{
  char* params;
  if (params = e.serviceRequest())
  {
    e.print("<h1><a href='/?led=off'>Arduino Web Remote</a></h1>");
    if (strcmp(params, "?led=on") == 0)
    {
      digitalWrite(outputPin, HIGH);
      e.print("<a href='?led=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED IS ON</button></a>");
    }
    else if (strcmp(params, "?led=off") == 0)
    {
      digitalWrite(outputPin, LOW);
      e.print("<a href='?led=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED IS OFF</button></a>");
    }
    e.respond();
  }
}
Per renderlo compatibile con Arduino Mega basta cercare la stringa:
Codice:
if (!ether.begin(sizeof Ethernet::buffer, mymac, 8))
e sostituirla con
Codice:
if (!ether.begin(sizeof Ethernet::buffer, mymac, 53))

il risultato è il seguente:

2013-10-03 16-17-00.067


Per chi volesse migliorare ancor di più lo schema su instructables sono a disposizione vari progetti con grafica anche più accattivante

[Immagine: FA3T3MUH8I43T1X.MEDIUM.jpg]

Progetto originale: http://trollmaker.com/article11/arduino-...hield-v1-1
Cita messaggio

#2
Ciao Ham, pensi sia possibile portare questo codice in modo da farlo funzionare con lo shield ethernet su Arduino UNO?
Io avevo fatto un qualcosa di simile ma non mi piaceva come andava e volevo ottenere proprio quello che fa in questa guida.
O.T. Con il nuovo arduino yun questa funzione è già implementata di default.
Cita messaggio

#3
(05-12-2013, 20:43)mannana93 Ha scritto: Ciao Ham, pensi sia possibile portare questo codice in modo da farlo funzionare con lo shield ethernet su Arduino UNO?
Io avevo fatto un qualcosa di simile ma non mi piaceva come andava e volevo ottenere proprio quello che fa in questa guida.
O.T. Con il nuovo arduino yun questa funzione è già implementata di default.

certamente, se non sbaglio dovrebbe esserci già negli sketch di esempio dell'IDE
Cita messaggio

#4
(06-12-2013, 10:12)hamtarociaoo Ha scritto:
(05-12-2013, 20:43)mannana93 Ha scritto: Ciao Ham, pensi sia possibile portare questo codice in modo da farlo funzionare con lo shield ethernet su Arduino UNO?
Io avevo fatto un qualcosa di simile ma non mi piaceva come andava e volevo ottenere proprio quello che fa in questa guida.
O.T. Con il nuovo arduino yun questa funzione è già implementata di default.

certamente, se non sbaglio dovrebbe esserci già negli sketch di esempio dell'IDE

No quello che usa l'url per dare il comando non c'è.
Cita messaggio

#5
(06-12-2013, 10:19)mannana93 Ha scritto: No quello che usa l'url per dare il comando non c'è.

prova con il fie che ti ho allegato, pilota 3 led dall'indirizzo 192.168.0.220 . puoi modificare ovviamente l'ip a tuo piacimento


Allegati
.zip   webduino-1.7.zip (Dimensione: 31,16 KB / Download: 8)
Cita messaggio

#6
(06-12-2013, 10:24)hamtarociaoo Ha scritto:
(06-12-2013, 10:19)mannana93 Ha scritto: No quello che usa l'url per dare il comando non c'è.

prova con il fie che ti ho allegato, pilota 3 led dall'indirizzo 192.168.0.220 . puoi modificare ovviamente l'ip a tuo piacimento

Ci sono vari esempi dentro, quale sarebbe? Li ho guardati ma non l'ho trovato.
Cita messaggio

#7
Usa questo:
Codice:
#include <SPI.h>
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>

//DETERMINA IL MAC E L'IP DELLA PAGINA WEB
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip[] = {
  192, 168, 1, 239};

//PORTA DI COMUNICAZIONE            
EthernetServer server(272);

//SCRIVE IL NUMERO DI PIN CORRISPONDENTE AI LED
int ledPin1 = 9;
int ledPin2 = 8;

//LUNGHEZZA DELLA STRINGA INVIATA
String readString = String(30);

//IMPOSTA ALL'AVVIO I LED SPENTI
boolean LEDON1 = false;
boolean LEDON2 = false;

void setup(){
  Ethernet.begin(mac, ip);
  pinMode(ledPin1, OUTPUT);  
  pinMode(ledPin2, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  EthernetClient client = server.available();
  if (client) //SE ESISTE UN CLIENTE
  {
    while (client.connected()) // SE IL CLIENTE E' CONNESSO
    {
      if (client.available()) //SE E' TUTTO OK PER INIZIARE
      {
        char c = client.read(); //LEGGI I SINGOLI CARATTERI INVIATI
        if (readString.length() < 100)
        {
          readString += c; //CONCATENA I CARATTERI
        }  
        if (c == '\n') //VEDE SE C'E' IL CARATTERE DI FINE STRINGA, PER INDIVIDUARE CHE E' FINITA
        {
          if(readString.indexOf("L1=1") > 0) //IMPOSTA UNA VARIABILE DI TIPO BOLEANA (VERO-FALSO) PER GLI STATI DEL LED
          {
            LEDON1 = true;
          }
          else if (readString.indexOf("L2=1") > 0)
          {
            LEDON2 = true;            
          }
          else if(readString.indexOf("L1=0") > 0)
          {
            LEDON1 = false;
          }
          else if (readString.indexOf("L2=0") > 0)
          {
            LEDON2 = false;            
          }

          //CREA LA PAGINA HTML (VERRA' AGGIORNATA AD OGNI ISTRUZIONE NUOVA)
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<html><head></head><body>");

          //TITOLO LED 1
          client.println("<h1>Led 1</h1>");

          //OPERAZIONI DA FARE QUANDO SI CLICCA PER ATTIVARE LEDON1:  
          if (LEDON1) {
            digitalWrite(ledPin1, HIGH);  
            client.println("Stato: ON<br>");
          }
          else {

            //OPERAZIONI DA FARE QUANDO SI CLICCA PER SPEGNERE LEDON1:  
            digitalWrite(ledPin1, LOW );
            client.println("Stato: OFF<br>");
          }

          //CREA I PULSANTI RELATIVI A LED1    
          client.println("<a href='?L1=0'>SPEGNI</a>");
          client.println("<a href='?L1=1'>ACCENDI</a>");

          //INSERISCE IL DIVISORE
          client.println("<br>______________________________<br>");

          //TTOLO LED2
          client.println("<h1>Led 2</h1>");

          //OPERAZIONI DA FARE QUANDO SI CLICCA PER ATTIVARE LEDON2:  
          if (LEDON2) {
            digitalWrite(ledPin2, HIGH);  
            client.println("Stato: ON<br>");
          }
          else {

            //OPERAZIONI DA FARE QUANDO SI CLICCA PER SPEGNERE LEDON2:    
            digitalWrite(ledPin2, LOW);
            client.println("Stato: OFF<br>");
          }

          //CREA I PULSANTI RELATIVI A LED2
          client.println("<a href='?L2=0'>SPEGNI</a>");
          client.println("<a href='?L2=1'>ACCENDI</a>");

          //CHIUDE I TAG HTML PER LA PAGINA
          client.println("</body></html>");

          //SI PREPARA PER UNA NUOVA ISTRUZIONE
          readString="";

          //TERMINA LE OPERAZIONI CLIENTE
          client.stop();
        }
      }
    }
  }
}
Cita messaggio

#8
Wink 
Grazie mille
Cita messaggio


[-]
Condividi/Segnala (Mostra tutti)
Facebook Linkedin Twitter

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Guida: XBMC su RaspBerry hamtarociaoo 14 4'395 03-09-2014, 22:24
Ultimo messaggio: hamtarociaoo
  LCD con Arduino hamtarociaoo 0 1'362 25-06-2014, 13:45
Ultimo messaggio: hamtarociaoo
  Funzionamento degli Interrupts con Arduino hamtarociaoo 0 2'169 18-12-2013, 06:35
Ultimo messaggio: hamtarociaoo
  Guida: Installare RaspBian hamtarociaoo 3 2'145 16-12-2013, 22:03
Ultimo messaggio: nicozan72
  Guida: Gestione degli Interrupts su Arduino hamtarociaoo 0 1'732 13-12-2013, 21:26
Ultimo messaggio: hamtarociaoo
  Guida: RaspBerry hamtarociaoo 5 2'811 04-12-2013, 19:44
Ultimo messaggio: Luca23

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Utenti che stanno guardando questa discussione:
1 Ospite(i)


Powered by MyBB, © 2002-2017 MyBB Group.