Irrigazione arduino – prima parte

Inizio oggi un nuovo progetto di irrigazione arduino in attesa della primavera e del momento in cui dovrai irrigare e monitorare lo stato del tuo giardino.

irrigazione arduino

Hai letto bene monitorare lo sttao del terreno e le attività eseguite dall’impianto.

E’ proprio da questo aspetto che inizia il progetto irrigazione arduino che puoi realizzare seguendo questa serie di articoli.

Il progetto irrigazione arduino raccogliere i dati

Questa prima parte ti mostro come inviare i dati raccolti dai sensori e le informazioni dell’impianto ad un DataBase Web in cui registrarli per poterli visualizzare in seguito sottoforma di tabella o grafico secondo le tue esigenze.

Il materiale necessario

I componenti iniziali per la prima parte del progetto sono:

  • n.1 arduino (Uno,Due,Leonardo,Mega)
  • n.1 ethernet shield
  • n.1 cavo di rete ethernet
  • n.1 connessione a internet con DHCP
  • n.1 server LAMP (  Linux Apache MySql Php )

Nella foto ho inserito volontariamente due sensori che utilizzerai per le prossime evoluzioni del progetto, si tratta di un sensore per misurare temperatura ed umidità:

irrigazione arduino sensore umidita

e di un sensore che misura l’umidità del terreno:

irrigazione arduino sensore terreno

ci sono molti altri sensori che potrai aggiungere al tuo progetto e per questo ho deciso di collezionare 16 valori nel mio progetto, inizialmente ne userai meno di quelli previsti per registrare temperatura, umidità dell’aria e del terreno, ma in seguito potrai aggiungere sensori di luminosità, vento, pioggia o di controllo di funzionamento dell’impianto, e i 16 input ti saranno molto utili.

La tabella di raccolta dati MySql

Parti dalla creazione della tabella che registrerà i dati, per farlo utilizza questa istruzione SQL:

DROP TABLE IF EXISTS `monitoraggio_irrigazione`;
CREATE TABLE IF NOT EXISTS `monitoraggio_irrigazione` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data_time` datetime NOT NULL,
  `ip_remote` varchar(16) NOT NULL,
  `codice_impianto` varchar(32) NOT NULL,
  `sensoreA` float DEFAULT NULL,
  `sensoreB` float DEFAULT NULL,
  `sensoreC` float DEFAULT NULL,
  `sensoreD` float DEFAULT NULL,
  `sensoreE` float DEFAULT NULL,
  `sensoreF` float DEFAULT NULL,
  `sensoreG` float DEFAULT NULL,
  `sensoreH` float DEFAULT NULL,
  `sensoreI` float DEFAULT NULL,
  `sensoreL` float DEFAULT NULL,
  `sensoreM` float DEFAULT NULL,
  `sensoreN` float DEFAULT NULL,
  `sensoreO` float DEFAULT NULL,
  `sensoreP` float DEFAULT NULL,
  `sensoreQ` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `codice_impianto` (`codice_impianto`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Monitoraggio Irrigazione' AUTO_INCREMENT=1;

il risultato visto con PhpMyAdmin dovrebbe essere simile al seguente:

irrigazione arduino tabella

Ho aggiunto nella tabella alcuni valori che non passerai da arduino, per non sovraccaricare il progetto ma che lasceremo aggiungere al server, tali valori sono:

  • data_time
  • ip_remote

Il primo valore colleziona la data e l’ora del record inserito in tabella, il secondo valore ti riporta l’IP del client che ha inserito il dato, l’arduino.

Le colonne da A a Q memorizzeranno i valori dei 16 sensori.

Lo script Php del progetto irrigazione arduino

Sul server LAMP su cui è presente il DataBase MySql che utilizzi per raccogliere i dati dovrai aggiungere anche una pagina Php con il seguente codice:

<?php
/*****************************************************/

/** Nome utente del database MySQL */
define('DB_USER', 'USERNAME');
/** Password del database MySQL */
define('DB_PASSWORD', 'PASSWORD');
/** Hostname MySQL  */
define('DB_HOST', 'localhost');
/** DataBase MySQL  */
define('DB_NAME', 'DATABASE');
/** Table MySQL  */
define('DB_TABLE', 'monitoraggio_irrigazione');

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

$_path_info = array();

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

if ( !empty($_SERVER['PATH_INFO'])) {
        $_path_info = explode( '/',$_SERVER['PATH_INFO'] );
} else {
        die( "ERROR001" );
}

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

$codice         = $_path_info[1];
$sensoreA       = $_path_info[2];
$sensoreB       = $_path_info[3];
$sensoreC       = $_path_info[4];
$sensoreD       = $_path_info[5];
$sensoreE       = $_path_info[6];
$sensoreF       = $_path_info[7];
$sensoreG       = $_path_info[8];
$sensoreH       = $_path_info[9];
$sensoreI       = $_path_info[10];
$sensoreL       = $_path_info[11];
$sensoreM       = $_path_info[12];
$sensoreN       = $_path_info[13];
$sensoreO       = $_path_info[14];
$sensoreP       = $_path_info[15];
$sensoreQ       = $_path_info[16];

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

@mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die( "ERROR002" );
@mysql_select_db(DB_NAME) or die( "ERROR003" );

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

$sql="INSERT INTO " . DB_TABLE . "(
                                                                        data_time,
                                                                        ip_remote,
                                                                        codice_impianto,
                                                                        sensoreA,
                                                                        sensoreB,
                                                                        sensoreC,
                                                                        sensoreD,
                                                                        sensoreE,
                                                                        sensoreF,
                                                                        sensoreG,
                                                                        sensoreH,
                                                                        sensoreI,
                                                                        sensoreL,
                                                                        sensoreM,
                                                                        sensoreN,
                                                                        sensoreO,
                                                                        sensoreP,
                                                                        sensoreQ
                                                                  ) VALUES (
                                                                        NOW(),
                                                                        '" . $_SERVER['REMOTE_ADDR'] . "',
                                                                        '" . $codice . "',
                                                                        '" . $sensoreA . "',
                                                                        '" . $sensoreB . "',
                                                                        '" . $sensoreC . "',
                                                                        '" . $sensoreD . "',
                                                                        '" . $sensoreE . "',
                                                                        '" . $sensoreF . "',
                                                                        '" . $sensoreG . "',
                                                                        '" . $sensoreH . "',
                                                                        '" . $sensoreI . "',
                                                                        '" . $sensoreL . "',
                                                                        '" . $sensoreM . "',
                                                                        '" . $sensoreN . "',
                                                                        '" . $sensoreO . "',
                                                                        '" . $sensoreP . "',
                                                                        '" . $sensoreQ . "'
                                                                  )";

@mysql_query($sql) or die( "ERROR004" );

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

@mysql_close();
die( "SUCCESS" );
?>

la cui funzione è di salvare i valori passati dal progetto irrigazione arduino nella Url del browser.

In pratica dopo aver salvato la pagine con il nome saveData.php nel path del server che ritieni opportuno richiamala dal browser con l’Url:

https://www.mauroalfieri.it/progetto_irrigazione/saveData.php/123456/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0

dovrai sostituire il nome a dominio “mauroalfieri.it” con il nome del tuo server ed il percorso “progetto_irrigazione” con il percorso della tua pagina sul server.

irrigazione arduino url test

Dopo aver richiamato la pagina di test dal browser dovresti ottenere in tabella il seguente record:

irrigazione arduino primo valore in tabella

ora sai che la tua pagina funziona e che i valori passati nell’Url vengono correttamente salvati nella tabella sul server.

Lo sketch di irrigazione con Arduino

In questo primo sketch ti concentrerai solo sulla connessione di Arduino al sito web e l’invio dei valori, tralascerai i valori passati che saranno fissati nello sketch e non misurati da veri sensori.

Ho scritto molti altri tutorial su come leggere valori da sensori di differente natura e potrai integrare gli sketch di lettura con questo di comunicazione ethernet.

 /*
  * Progetto Irrigazione Arduino - prima parte
  *
  * Autore: Alfieri Mauro
  * Twitter: @mauroalfieri
  *
  * Tutorial su: https://www.mauroalfieri.it
  *
  */

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

#define TIME_MISURA 60000

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.mauroalfieri.it";
char buffer[150];

char codiceImpianto[32] = "1234567890123456789012345678901";
int sensoreA = 0;
int sensoreB = 0;
int sensoreC = 0;
int sensoreD = 0;
int sensoreE = 0;
int sensoreF = 0;
int sensoreG = 0;
int sensoreH = 0;
int sensoreI = 0;
int sensoreL = 0;
int sensoreM = 0;
int sensoreN = 0;
int sensoreO = 0;
int sensoreP = 0;
int sensoreQ = 0;

EthernetClient client;

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

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  delay(1000);
}

void loop() {
  sensoreA = 1;
  sensoreB = 1;
  sensoreC = 1;
  sensoreD = 1;
  sensoreE = 1;
  sensoreF = 1;
  sensoreG = 1;
  sensoreH = 1;
  sensoreI = 1;
  sensoreL = 1;
  sensoreM = 1;
  sensoreN = 1;
  sensoreO = 1;
  sensoreP = 1;
  sensoreQ = 1;

  send2server();
  delay( TIME_MISURA );
}

void send2server() {
  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");
    sprintf(buffer, "%s%s%s/%s/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d %s", "GET http://", server, "/progetto_irrigazione/saveData.php", codiceImpianto, sensoreA, sensoreB, sensoreC, sensoreD, sensoreE, sensoreF, sensoreG, sensoreH, sensoreI, sensoreL, sensoreM, sensoreN, sensoreO, sensoreP, sensoreQ, "HTTP/1.1" );
    Serial.println( buffer );

    client.println(buffer);
    client.println();
  }

  while (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
}

Ci sono alcune parti dello sketch che riguardano la configurazione:

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.mauroalfieri.it";

La linea 16 contiene il Mac Address che devi sostituire con il Mac della tua scheda, lo trovi scritto sull’adesivo attaccatto sotto la Ethernet Shield;

linea 17: è il nome del server su cui hai inserito la pagina php che accetta i dati da salvare sul sever;

Ci sono anche altre 2 righe da personalizzare:

char codiceImpianto[32] = "1234567890123456789012345678901";

linea 20: è un parametro che ti permette di utilizzare il progetto di irrigazione arduino con più centraline dislocate in giardino ad ognuna potrai assegnare un codice composto da 33 digit che lo contraddistingue.

L’altra linea dello sketch da personalizzare è la linea 80:

sprintf(buffer, "%s%s%s/%s/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d %s", "GET http://", server, "/progetto_irrigazione/saveData.php", codiceImpianto, sensoreA, sensoreB, sensoreC, sensoreD, sensoreE, sensoreF, sensoreG, sensoreH, sensoreI, sensoreL, sensoreM, sensoreN, sensoreO, sensoreP, sensoreQ, "HTTP/1.1" );

in cui dovrai sostituire il path ( percorso ) presente: /progetto_irrigazione/saveData.php con il percorso su cui è presente la pagina php sul tuo server.

Delle altre linee voglio sottolineare la funzione delle seguenti:

linea 14: impostazione del TIME_MISURA ossia il tempo che deve trascorrere tra una misurazione e la successiva, si traduce nello sketch nel tempo di attesa tra un loop() ed il successivo.

linea 37: inizializzazione del client ethernet necessario a creare la connessione ed inviare i dati di irrigazione arduino alla pagina web;

linee 55-69: è la parte dello sketch in cui tutti i 16 valori dei sensori sono impostati a 1, serve solo per testare la parte di invio del dato al server, non legge nessun valore reale dai sensori;

linea 71: richiami la funzione send2server() che ha il compito di connettersi, gestire la connessione ed il risultato e trasmettere i valori dei 16 sensori alla pagina Php e quindi al server;

linea 72: imposta il tempo di attesa tra un eseguzione del loop() ed il successivo;

linea 78: l’oggetto client esegue la connessione al server mediante il metodo connect( server, porta );

linea 80: componi la linea che invierà i dati del progetto irrigazione arduino al server;

linea 83: invia la stringa composta alla linea 80 al server grazie al metodo client.prinln( buffer );

linea 87: gestisci il ritorno proveniente dalla connessione al server, il ciclo while ti garantisce di leggere tutti i valori presenti nella risposta proveniente dal server;

linea 92: gestisci la disconnessione del client dopo aver salvato i parametri dei sensori sul server e ricevuto i dati di risposta;

linea 95: chiusi la connessione tra il progetto irrigazione arduino ed il server.

Avrai già capito che indipendentemente da questo progetto irrigazione arduino potrai utilizzare questo progetto in tutti quei casi in cui vorrai trasmettere ad un web server LAMP i valori di 16 sensori o 16 azioni che rilevi con arduino.

Se il tuo sketch è correttamente configurato dovresti aver ottenuto sul database questo risultato:

irrigazione arduino record in tabella

Buona irrigazione arduino !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/irrigazione-arduino-prima-parte.html

121 commenti

2 ping

Vai al modulo dei commenti

    • Sean il 22 Aprile 2013 alle 10:43
    • Rispondi

    Mauro,
    Ho letto il tuo articolo di oggi, e mi sembra un pezzo essenziale del puzzle che avevo in mente io:).
    Una curiosità, posso sostituire la componente Ethernet, con il modulo gsm?

    Sean

    1. Ciao Sean,
      si, puoi sostituire la Ethernet con una GSM/GPRS shield, dovrai modificare lo sketch e le librerie incluse.
      Ho scritto un articolo sull’uso di questa shield:
      https://www.mauroalfieri.it/elettronica/gprs-shield-arduino.html
      Prova a consultarlo 🙂

      Mauro

    • Gabriele il 7 Maggio 2013 alle 22:39
    • Rispondi

    Salve,
    Sto provando da ore a mandare i valori nel database di altervista, ma niente da fare. Se i dati li mando direttamente io dall’URL, tutto bene (es http://www.sito.it/data.php/23/14). Se ci provo dall’arduino, niente. il buffer che mi spunta nel seriale è giusto:
    GET http://www.sito.altervista.org/data.php/254/116 HTTP/1.1
    Ho provato a levare le scritte GET ed HTTP, ma niente. Cosa devo fare?

    1. Ciao Gabriele,
      ho provato da Browser entrambi i link che hai incluso nel tuo commento.
      Mi restituiscono “404 Page not Found” sei sicuro che gli indirizzi siano scritti in modo corretto?

      Hai già provato a inviare i valori alla mia pagina? è a disposizione proprio per i test e per verificare se il problema sia nello sketch, nella comunicazione o nella pagina che attende i valori.

      Mauro

    • Gabriele il 8 Maggio 2013 alle 14:58
    • Rispondi

    Ah si scusa hai ragione, avevo messo “sito così per fare un esempio. Il sito vero e proprio è:
    provarduino.altervista.org

    1. Ciao Gabriele,
      crea una pagina in cui dopo aver preso i valori li riscrivi a video, così che io possa vederlo, ed anche tu.

      Hai eseguito il test che ti ho consigliato?

      Mauro

        • Gabriele il 9 Maggio 2013 alle 22:42
        • Rispondi

        Cosa assurda che mi è successa. Da casa il codice me lo scrive una volta ogni mille mai. Oggi ho portato l’arduino a scuola e magicamente tutto il DB pieno mi sono trovato. Non riesco a capire dove sta il problema allora. Perchè da cassa mia no e da scuola si?
        Guarda tu stesso: http://provarduino.altervista.org/data.php/

        1. Ciao Gabrilele,
          é certamente un problema di connessione, a casa hai un proxy, firewall o altro sistema che blocca l’uscita su internet se non sei un Pc? Magari non tu ma il tuo provider (Telecom,Fastweb,ecc..)

          Mauro

            • Gabriele il 10 Maggio 2013 alle 19:44

            Ok, niente da fare, l’importante è che funziona a scuola. 🙂 Comunque avevo un’ultima domanda da farti.
            Praticamente essendo una tesina di fine anno, devo fare entrare in questo progetto elettronica e informatica. Quindi elettronica è tutta la parte di collegamenti ecc.. informatica i database e php. I valori li prendo da una porta analogia, tramite il collegamento del pannello alla breadboard e l’uso di una resistenza che trasforma la corrente in tensione. Per non fare bruciare l’arduino, che caratteristiche deve avere questo pannello?
            Grazie mille 🙂

          1. Ciao Gabriele,
            di che pannello stai parlando?
            Ti riferisci forse ad un quadro elettrico?

            Mauro

    • Gabriele il 11 Maggio 2013 alle 17:40
    • Rispondi

    Nono fotovoltaico.

    1. Ciao Gabriele,
      leggi l’articolo sul partitore di tensione o prova un chip che adatti il segnale, io ne ho comprato uno da robot-domestici in settimana e arriverà presto.

      Mauro

        • Gabriele il 12 Maggio 2013 alle 13:24
        • Rispondi

        Ok 🙂 Ultima domanda e non la assillo più 🙂 Per ogni porta analogica, quanti volt posso far entrare (sia V che A)? Perchè ovviamente ho due pannelli da collegare in due porte analogiche e sul sito di arduino ho letto che le analogiche leggono dai 0 ai 5 v, ma non ho capito se per ogni porta o in totale!
        Grazie mille 🙂

        1. Ciao Gabriele,
          non mi stresso affatto.
          Ogni porta arduino uno legge 0-5v vuol dire che non devi dargli più volt o rischi di fonderlo.
          Per gli Ampere servono solo in erogazione, non penso che nel tuo progetto siano coinvolti 🙂

          Mauro

    • Gabriele il 13 Maggio 2013 alle 09:02
    • Rispondi

    Grazie mille pernla tua disponibilità 🙂 Se avro altri problemi scriverò ancora :))

    • Gabriele il 21 Maggio 2013 alle 00:25
    • Rispondi

    Rieccomi.
    Ho cambiato modem. Adesso si connette subito senza fare capricci ma quando manda il buffer mi compare scritto:
    HTTP/1.1 400 Bad Request
    Date: Mon, 20 May 2013 22:23:51 GMT
    Server: Apache
    Content-Length: 226
    Connection: close
    Content-Type: text/html; charset=iso-8859-1

    400 Bad Request

    Bad Request
    Your browser sent a request that this server could not understand.

    1. Ciao Gabriele,
      la risposta del server Apache indica che hai inviato una richiesta che il server non è in grado di interpretare, penso si tratti del protocollo o del tipo di chiamata che stai effettuando.

      Mauro

        • Gabriele il 22 Maggio 2013 alle 09:30
        • Rispondi

        Problema risolto.
        Ho messo HTTP/2.0 ed è partito 🙂

    • Gianluca il 20 Giugno 2013 alle 13:47
    • Rispondi

    ciao scusa il disturbo ma e da due giorni che provo a gestire il mio database come fai tu in questa guida ma non ci riesco ho riscontrato dei problemi dopo aver scritto il file .PHP praticamente dopo che lo apro mi dice SUCCES però se vado a guardare nel MYSQL non trovo i numeri che invio ma solo degli 0 qualche consiglio x farlo funzionare?
    Grazie in anticipo

    1. Ciao Gianluca,
      collegandoti dal browser alla pagina e passando dei valori di test sul l’url cosa trovi nel Db?

      Mauro

    • gianluca il 24 Giugno 2013 alle 01:39
    • Rispondi

    Allora nella colonna sensori 0 e in quella del codice impianto niente

    1. Ciao Gianluca,
      Ti riferisci alla test da browser?
      Che valori hai inserito?

      Mauro

        • Gianluca il 24 Giugno 2013 alle 11:33
        • Rispondi

        ok ci sono riuscito era un errore con php era sbagliata la versione graze
        lo stesso del aiuto 🙂

        1. Ottimo Gianluca !!!

    • Gianluca il 24 Giugno 2013 alle 10:10
    • Rispondi

    sisi alla prova dal browser inserivo valori a caso ma qualunque valore inserivo nella colonna del codice impianto non trovo niente e nei vari sensori compare 0

    1. Ciao Gianluca,
      ad occhio direi che si tratta di un errore nella pagina Php.
      Prova a verificare.

      Mauro

    • Antonello il 6 Agosto 2013 alle 11:17
    • Rispondi

    Per tutti coloro che hanno problemi con un messaggio di errore “No input file specified” su Aruba (dovuto all’uso di $_SERVER[‘PATH_INFO’] ) io ho risolto grazie a queste info ( http://www.sen-seo.it/2012/03/aruba-joomla-e-no-input-file-specified.html ), nella sezione in cui parla di cgi.fix_pathinfo.

    1. Grazie Antonello !!!

    • lucio il 7 Febbraio 2014 alle 12:42
    • Rispondi

    Ciao Mauro,ho letto il tuo interessante articolo,ma non cerco in irrigatore ma cercavo un datalogging per inviare i valori rilevati ad un database mysql sempre tramite pagina php.
    è possibile modificare per rendere specificoil tuo script arduino?
    per esempio:data ,ip,codice impianto va bene,
    temperatura.umidità con dei semplici sensori su arduino e poi avrei bisogno di inserire dei valori di radioattività rilevati da altre schede arduino.
    pensi che sia possibile dette modifiche?

    grazie

    1. Ciao Lucio,
      il progetto è fattibile a mano dell’incognita degli altri sensori che vorresti utilizzare perché dovrei provarli per esserne certo.
      Gli sketch sul sito sono a libera disposizione per cui puoi modificarli come desideri.

      Mauro

        • lucio il 9 Febbraio 2014 alle 11:59
        • Rispondi

        Mauro la modifica che non sò fare è trasformare un sensore in un contatore di clic.
        esempio prendiamo il sensore P del codise e farlo diventare un contatore di impulsi CPM (counter x minute)
        se ho capito bene attualmente si possono inserire sui sensori A-Q solo carichi resistivi…..
        quindi la domanda è come posso modificare il sensore Q in un contatore di impilsi.

        grazie Mauro

        1. Ciao Lucio,
          deve essermi sfuggito qualcosa dall’ultimo tuo commento.
          Avevo inteso che tu volessi inviare dati ad una pagina php e salvarli in un DB MySql, il tpo di dato che invii è necessario che sia compatibile solo con il tipo di valore atteso dal DB.

          Se invii un valore preso da un sensore resistivo,capacitivo,hall,contaimpulsi o altro è indifferente dall’invio vis GPRS è solo legato al codice arduino.

          Se non sai come leggere il valore ti consiglio di studiarti uno degli articoli specifici per sensori simili a quelli che vuoi utilizzare nel tuo progetto, il valore dei sensori A-Q sono solo valori numerici che devi già aver acquisito con arduino prima di inviarli.

          Mauro

            • lucio il 10 Febbraio 2014 alle 16:21

            scusami non sono molto pratico ma non riesco a farlo funzionare.
            no GPRS non mi serve.
            si devo acquisire dati e inviarli al database.mysql cominciamo da questo 🙂
            allora ho cambiato il nome del server ,il nome della cartella e ho programmato arduino.
            e niente non invia nulla.
            ho chiamato la pagina sul server http://miosito.it/progetto/saveData.php/123456/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0
            e mi dice success mi scrive il database correttamente.
            l’unica cosa che non ho cambiato è il mac che sulla scheda non è segnato.
            insomma arduino non invia nulla al database e non capisco il perchè.

          1. Ciao Lucio,
            potrebbe essere un problema di configurazione network, hai verificato che arduino sappia come raggiungere il tuo server?

            Mauro

            • lucio il 10 Febbraio 2014 alle 16:37

            scusa così forse sono più preciso
            prove fatte
            test da browser
            http://testsito/progetto/savedata.php/123456/1/2/3/4/5/5/6/7/8/9/10/11/12/10/14/15
            success

            cambiato
            HTTP/1.1 in
            HTTP/2.0

          2. Ciao Lucio,
            nel monitor seriale cosa leggi?

            Mauro

            • lucio il 10 Febbraio 2014 alle 19:06

            dove lo trovo il monitor seriale?

          3. Ciao Lucio,
            Il monitor serale lo trovi in alto a destra dell’IDE Arduino, la lente di ingrandimento, mi preoccupa di più il fatto che tu non lo conosca come sistema di debug perché non é uno strumento che funziona da solo, devi dirgli tu come funzionare.

            Ti consiglio di leggere un po’ di lezioni del mio corso base arduino che trovi on-line sul blog per apprender quel minimo di nozioni che in un progetto come questo determinano la riuscita o il fallimento 🙂

            Mauro

            • lucio il 10 Febbraio 2014 alle 19:08

            potrebbe essere un problema di configurazione network, hai verificato che arduino sappia come raggiungere il tuo server?

            arduino è collegato al router…ip risulta collegato al router

          4. Ciao Lucio,
            é un buon inizio ma non sufficiente a dire che tutto debba funzionare certamente.
            L’IP é compatibile con la tua rete ?
            Il router matta tutte le connessioni ?

            Prima di tutto io verificherei che tutta la parte di comunicazione network sia correttamente configurata e che arduino riesca a scambiare informazioni con il web e con il tuo sito.

            Il router potrebbe avere degli strumenti di debug network che risultano molto utili.

            Mauro

            • lucio il 10 Febbraio 2014 alle 19:26

            trovato monitor seriale

            GET http://miosito.it/progetto/saveData.php/123456/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0 una serie di caratteri strani e finisce con connecting…

          5. Ciao Lucio,
            prima di tutto concentrati sui caratteri strani, non devono esserci.
            In secondo luogo l’indirizzo che vedo (miosito.it/progetto…) é una modifica del vero indirizzo che vedi nel monitor seriale? Perché non penso tu possieda il dominio miosito.it anche se potrei sbagliare.

            Mauro

            • lucio il 11 Febbraio 2014 alle 09:12

            il sito è questo ,http://testsito/progetto/savedata.php/123456/1/2/3/4/5/5/6/7/8/9/10/11/12/10/14/15
            è sui post precedenti ,e vedo che lo stanno “cliccando”….
            il mio indirizzo email è sul post se mi mandi il tuo ti invio la schermata così comprendi meglio.

          6. Ok Lucio,
            questo indirizzo lo hai inserito nello sketch?
            Scrivimi cosa leggi sul monitor seriale quando avvii lo sketch.

            Mauro
            P.S.: cancello il tuo indirizzo dai commenti in modo che altri utenti non ci clicchino su.

        • lucio il 11 Febbraio 2014 alle 16:16
        • Rispondi

        mandami la tua email
        grazie

        1. Ciao Lucio,
          non mettere più l’email nei commenti o ti potretsi trovare superspammato, il blog raggiunge 1700 persone al giorno.
          La tua email la vedo dall’amministrazione.

          La mia casella la trovi nella pagina contatti ma è riservata alle richieste di preventivo.
          Tutto l’aiuto che posso darti in forma gratuita è sul blog con i commenti, considera sempre che siete 1700 al giorno e non è facile rispondere a tutti.

          Il miglior aiuto che posso darti è di studiarti lo sketch e la sintassi arduino, aggiungere tutti debug che puoi come monitor seriale e cercare il problema tra la connessione del tuo arduino ed il sito.

          Mauro

    • Massimo il 3 Marzo 2014 alle 11:23
    • Rispondi

    Ciao Lucio,
    mi spiegheresti meglio la funzione

    sprintf(buffer, “%s%s%s/%s/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d %s”, “GET ….

    Non riesco a capire come funziona la parte relativa alla formattazione con %s%s%s ecc.

    Mi aiuti?

    Grazie in anticipo.

    Max

    1. Ciao Massimo,
      non so chi sia Lucio 🙂
      Detto questo è una funzione derivata dal linguaggio C, se cerchi sul Web trovi il dettaglio di tutte le opzioni con cui puoi formattare la stringa, ossia la spiegazione dei vari %s %d ecc…

      Mauro

    • Christophe il 1 Aprile 2014 alle 12:01
    • Rispondi

    Bonjour Mauro,

    Je souhaite à partir d’un arduino YUN connecté en WIFI, interroger une base MySQL distante (serveur visible sur Internet) pour récupérer des valeurs qui me serviront ensuite en local pour les envoyer vers le port USB de l’arduino lui même connecté à un PC (cette seconde partie fonctionne). En revanche, je n’ai pas encore démarré la partie récupération des données au travers de la partie réseau IP ver la table SQL.

    Aurais-tu moyen de m’indiquer comment faire cela ?

    Merci d’avance

    Christophe

    1. Bonjour Christophe,
      vouz pouvez récupérer les données MySQL avec de nombreux langage, je utiliser PHP, mais vous pouvez utiliser les langage vous savez.

    • Christophe il 2 Aprile 2014 alle 13:14
    • Rispondi

    Bonjour Mauro,

    Merci de la réponse.

    Cela signifie que l’ARDUINO embarque nativement le langage PHP ?

    Effectivement, si tel est le cas, je ne devrais pas avoir de problème.

    Christophe

    1. Oui Christophe,
      arduino yùn intègre an Linux ( Linino ) avec php.
      Vous pouvez lire mes articles sur arduino yun

        • Christophe il 2 Aprile 2014 alle 16:20
        • Rispondi

        Merci Mauro.

        Serais-tu disposé à participer à la mise au point de notre programme en cas de besoin ?
        Nous démarrons de zéro sur le développement ARDUINO !!!

        Par avance merci de ta positive réponse 😉

        Christophe

        1. Oui Christophe, je travaille sur des projets payés.

    • Christophe il 2 Aprile 2014 alle 22:06
    • Rispondi

    Super …

    Tu travailles au forfait ou bien au temps passé ?

    Quel est ton tarif de base ?

    Merci

    Christophe

    • Christophe il 5 Aprile 2014 alle 11:23
    • Rispondi

    Bonjour Mauro,

    Je n’ai pas reçu de réponses quant à ta grille tarifaire ?

    Je pourrais te confier le développement de la partie interrogation PHP vers BASE MySQL avec génération d’un fichier sur la carte SSD de l’ARDUINO pour que l’autre partie puisse l’exploiter.

    J’attends ta réponse.

    Merci d’avance

    Christophe

    1. Bonjour Christophe,
      Je n’ai pas de prix fixe dépend du projet, si vous êtes intéressé s’il vous plaît écrire à info du blog et je vais essayer de vous obtenir un devis.

    • Christophe il 13 Aprile 2014 alle 15:20
    • Rispondi

    Merci Mauro.

    Je ne trouve pas ton adresse email sur le site pour t’envoyer un cahier des charges ?

    Cdlt,
    Christophe

    1. Je vous ai envoyé un e-mail d’info blogue

    • Walter S. il 11 Maggio 2014 alle 22:50
    • Rispondi

    Ciao Mauro, complimenti prima di tutto per i tuoi progetti molto interessanti e ottima base per sviluppare applicazioni “personal”.
    Sono purtroppo ignorante in materia di webserver per cui ti chiedo se possibile dove posso trovare un tutorial per inserire lo script php nel mio website; ho scaricato wampserver ma lo script mi restituisce Error 1 e non so come trasferirlo poi sul mio sito (creato con one.com).

    Grazie mille e complimenti ancora per il sito.

    1. Ciao Walter,
      il trasferimento degli script php sui server web si fa principalmente in 2 modi:
      1. ftp, io uso Filezilla come client
      2. scp se hai accesso ssh al server ( per windows esiste WinScp )

      Sul come fare e dove mettere gli script devi leggere la documentazione del tuo provider perché cambia da server a server.

  1. Ciao !

    Io sto provando il tuo sketch; il php funziona, perchè se metto i numeri nell url manualmente li visualizzo nel database.
    Ma quando compilo lo sketch arduino non mi invia i dati.. e sul serial monitor compare una stringa errata..
    questo l’output:
    GET http://dimatech.altervista.org/saveData.php/12/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/367 ­µ#£±½òN;–Ï_ðš0Û´üwóî˜_Þæ殟ØÀ§Hžeìå½lW¾¼ï=ÏýŘî{*ÌÈ»GçòQíÆϏþ«—ïE?Ò;Èÿoö{>ý>ÝÃ~¿áÿÅϜ›
    ¯”®ž÷;ú~Ðûî:Ô~è{?¯½þO)jÓûë½‘ö¾ÚR?›ý·üú’‹ÍÿîÒx»«äVè—vë©¿¹/èg˲6†ÓÿƟ{ß>¹OP‡gݶyÿ_?Gé½./_©T¯WØßd^3÷ó^ýþ¿–þsê¿Ï
    ÷ýÕ2³+~§<Ù

    ovviamente questi simboli non dovrebbero esserci !
    dove sbaglio?

    1. Ciao Gabriele,
      non saprei risponderti, i caratteri che vedo mi fanno pensare ad un errore di copia e incolla che ha aggiunto caratteri invisibili nell’IDE ma incomprensibili che si vedono solo durante l’esecuzione del codice.

  2. Ciao !

    Sono riuscito a risolvere il mio problema inserendo la libreria #include ! Grazie ciao

    1. Ottimo, diagnosi errata la mia 🙂

      • alessandro il 22 Settembre 2014 alle 11:10
      • Rispondi

      ho lo stesso problema puoi spiegarmi meglio come hai risolto grazie.
      Ciao

      1. Ciao Alessandro,
        prova a controllare gli #include come ha fatto gabriele.

    • Andrea il 29 Ottobre 2014 alle 10:40
    • Rispondi

    Buonasera, navigando in internet mi sono imbattuto nel suo blog in cui tratta della piattaforma arduino.
    Mi sto occupando dello sviluppo di un progetto che prevede di trasferire dei dati dall’arduino ad un database mysql.
    Ho letto alcuni articoli da lei scritti sull’argomento.
    Il problema che sto incontrando, utilizzando hosting linux, è un errore 400 bad request se invio la GET da arduino mentre scrivendo la GET da browser l’errore non si verifica.
    Appoggiandosi a un hosting windows il tutto funziona correttamente.
    Mi può consigliare gentilmente una soluzione al problema?!
    La ringrazio fin d’ora del tempo che mi vorrà dedicare e la saluto cordialmente.

    Andrea Colombini

    1. Ciao Andrea,
      che shield stai usando per la connessione?
      WiFi shield arduino originale o la Ethernet shield arduino originale?

        • Andrea il 29 Ottobre 2014 alle 11:29
        • Rispondi

        Sto utilizzando la Ethernet shield arduino.
        Il server è un hosting linux Apache + PHP 5.3.29:
        Il fatto strano è che con l’hosting vecchio tutto funzionava correttamente.
        Con questo invece da quest’errore, come se sbagliassi il protocollo di invio o la richiesta GET:

        1. Ciao Andrea,
          nei log apache vedi arrivare la chiamata dall’IP arduino?
          Che pagina cerca di chiamare ?

            • Andrea il 31 Ottobre 2014 alle 11:10

            Purtroppo per questi test non abbiamo acquistato un server proprietario ma ho solo il servizio di hosting su un server virtuale; Anche chiamando il servizio clienti mi hanno detto che non è possibile visionare il log di apache.
            Non so più che strada prendere.

          1. Ciao Andrea,
            fai dei test con un server locale magari sul tuo pc o nella tua rete aziendale.

    • simone il 24 Novembre 2014 alle 12:04
    • Rispondi

    ciao,spero tu mi possa aiutare… sto cercando di usare questa guida come base per aggiornare la mia tabella sul server…
    ma curiosità sul mio server per accedere devo inserire user e la password, come faccio a fare la verifica di connessione e mettere il buffer dei dati?
    grazie 1000

    1. Ciao Simone,
      non penso di aver capito la domanda … cosa intendi per “come faccio a fare la verifica di connessione e mettere il buffer dei dati?”
      Questa guida spiega riga per riga cosa fa il codice arduino e come creare una pagina php da richiamare su un server per memorizzare i dati raccolti.

      Mauro

    • Alessandro il 2 Febbraio 2015 alle 18:42
    • Rispondi

    Ciao Mauro,
    tra gli innumerevoli siti su Arduino il tuo è quello che frequento più spesso per la chiarezza e la disponibilità di risorse. Io sono partito da zero con poche nozioni da elettronico smanettone. Ultimamente mi sto divertendo a realizzare un sistema per l’invio di dati di temperatura sul web e ci sono riuscito imparando tante cose, anche grazie a te, sulle tabelle mySQL e sul PHP. In pratica il mio Arduino munito di Ethernet shield comunica ad una tabella MySQL i dati di temperatura, attualmente tre sensori, inserendo la data tramite la funzione TIMESTAMP. In pratica ho realizzato un datalogger senza RTC che mi registra i dati su una tabella sul server con grosso risparmio di righe di codice; il tutto si limita a millis() per il conteggio dell’intervallo di datalogging e POST per l’invio dei dati al webserver. L’unico limite è che bisogna essere sempre connessi altrimenti addio dati.
    Qui veniamo al dunque, potrei mettere un RTC e una scheda SD per salvare tutto in locale, però ho provato a scrivere il codice è mi viene sempre immenso, supera il limite dei 32000, allora ho pensato se metto solo una micro SD e prendo la data da internet ho fatto un passo avanti, non mi serve più RTC.
    Ma i modi trovati per prelevare la data sono troppo complessi e occupano troppe righe di codice. C’è una soluzione per prendere la data da un sito i maniera semplice ? Io pensavo, una volta lo facevo con Excel, a pescare una riga di una comune pagina web (es. televideo) e prendere la data, è una cosa possibile?
    Grazie
    Alessandro

    1. Ciao Alessandro,
      hai provato ad ottimizzare il codice leggendo uno dei miei articoli sui datalogger?
      La sola parte relativa alla lettura dell’RTC e scrittura su file cuba una decina di righe, probabilmente hai aggiunto dei controlli o delle subriutine di codice che puoi eliminare per rientrare nei 32K.
      Purtroppo l’RTC via web richiede complessi protocolli client come l’ntp complessi e con molte righe di codice; inoltre la soluzione con RTC preso dal Web ti costringe cmq ad essere connesso.

    • adriano il 10 Giugno 2015 alle 10:30
    • Rispondi

    CIao mauro trovavo difficoltà su queste due linee di codice

    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    char server[] = “www.mauroalfieri.it”;

    Come faccio a capire qual’è l’indirizzo mac della ethernet shield?(sotto la scheda non c’è nessun arduino)
    Poi visto che io uso un server locale con apache, nella dichiarazione del server che indirizzo devo mettere?

    1. Ciao Adriano,
      il mac address della scheda, per la ethernet originale, è scritto sotto la shield stessa, se non trovi tale tagliando puoi verificare con il tuo router dopo l’assegnazione dell’IP.
      Il server se è locale dovrai mettere l’IP del tuo server ed usare le istruzioni di collegamento mediante IP e non mediante server, trovi numerosi esempi nel blog.

    • adriano il 10 Giugno 2015 alle 16:09
    • Rispondi

    Credo di aver risolto questa parte…Con la pagina in php, come faccio a richiamare le variabili che ho utilizzato in arduino? Ho provato con il metodo get, ma non funziona

    1. Ciao Adriano,
      hai provato come descritto nel file php riportato nell’articolo ?

        • adriano il 11 Giugno 2015 alle 10:46
        • Rispondi

        SI mauro. Mi esce l’errore 001

        1. Ciao Adriano,
          accade se la variabile $_SERVER[‘PATH_INFO’] è vuota, accertati che il php.ini abbia abilitato la modalità che ti permette di ricevere le variabili come $_SERVER

            • adriano il 13 Giugno 2015 alle 00:16

            Ciao Mauro, come faccio ad abilitare la modalità?

          1. Ciao Adriano,
            controlla nella documentazione del php.ini non lo ricordo a memoria.

    • luciano il 1 Settembre 2015 alle 11:24
    • Rispondi

    Ciao Mauro ,una domanda anzi una miglioria,non si potrebbe fare una piccola modifica a questo progetto inserendo :
    1-pressostato presenza acqua da acquedotto
    2-pressostato presenza acqua da serbatoio di accumulo

    su arduino un semplice contatto aperto/chiuso in modo da controllare da remoto se manca acqua perchè spesso nelle case di campagna le piante si seccano per questo motivo.
    una sorta di allarme…via web , se ci sono problemi di memoria anche togliendo qualche sensore……nelle mie zone sarebbe molto utile per la scarsità di acqua.

    Grazie

    1. Ciao Luciano,
      certo puoi togliere ed aggiungere qualsiasi cosa tu voglia a questo progetto, modificando il codice a tuo piacimento.
      Pubblico i miei codici e la descrizione linea per linea proprio per consentire a chiunque lo desideri di effettuare le modifiche ed eventualmente ripubblicarle.

        • luciano il 1 Settembre 2015 alle 17:46
        • Rispondi

        Si ho capito che si può modificare …ma il problema è che non conosco il codice.
        se qualcuno dei ragazzi che lo conoscono ci possono dare una mano ,
        oppure sew ne conoscete uno già scritto e ci possono indirizzare.
        ringraziamo anticipatamente.

        Luciano

        1. Ciao Luciano,
          lo scopo di questo blog è permettere a chiunque lo desideri di imparare per questo il codice è spiegato linea per linea ed ho anche pubblicato un corso arduino on-line gratuito con cui imparare tutto quello che ti potrebbe servire.

    • Alessandro Achille Rossi il 3 Settembre 2015 alle 17:22
    • Rispondi

    Buongiorno,
    sto provando questo programa con IIS di Microsoft, la verisone di IIS è IIS 8.5 su Windows Server 2012 R2.
    Attualmente il programma è fatto per funzionare in questo modo:
    Database mySql su 192.168.1.3 con Windows server 2008.
    Web server su 192.168.1.2 con Windows Server 2012 R2 e IIS 8.5 .
    Se faccio il test (http://192.168.1.2/progetto_irrigazione/saveData.php/123456/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0 ) mi da “SUCCESS” , mentre se uso Arduino ho diversi problemi: ad esempio, se funziona ci mette un sacco di tempo prima di stamparmi sul seriale “SUCCESS” . Ciè, mi stampa quasi subito GET http:/ ….. ma prima che scriva su database e mi stampi success passa più di un minuto. Cosa posso fare?

    1. Ciao Alessandro,
      prova averificare nei log del server quando fai la chiamata da browser e quando la esegui da arduino cosa accade e se si verificano errori.
      Poi puoi provare l’esempio presente sul mio sito dal tuo arduino per verificare che funzioni prima di usarlo sul tuo server.

    • Davide il 23 Settembre 2015 alle 15:20
    • Rispondi

    Ciao MAuro e complimenti per il tuo sito. Ho realizzato una stazione meteo con Arduino uno e wifi shield originali che inviano i dati ad altervista e questi vengono pubblicati su web. Il tutto funziona per alcuni giorni, a volte anche 5 settimane, quando ad un tratto si inchioda tutto, sul router non vedo piu collegato arduino e non mi rimane che resettarlo manualmente disalimentandolo. Mi sai dire quale potrebbe essere il problema.

    Ciao

    1. Ciao Davide,
      hai eseguito l’update Fw della wifi-shield ?
      Ho scritto un articolo in merito se non ricordo male.

    • riccardo il 9 Novembre 2016 alle 18:01
    • Rispondi

    salve, ti stimo molto per il lavoro che metti a disposizione di tutti e devo dire che ho imparato moltissime cose grazie ai tuoi articoli/blog.
    vorrei chiederti un aiuto per quanto riguarda un progetto in cui devo inviare dati da un arduino ad un server.
    per ora sto utilizzando il tuo sketch per fare delle prove. vole chiederti se a posto del nome del server volessi inserire l’indirizzo ip come posso fare? ma soprattutto,come vedo se arduino e il mio server comunicano e si scambiano anche qualche stringa cosi a caso ?
    alla riga 80:
    “GET http://“, server, “/progetto_irrigazione/saveData.php”

    io invece dovrei scriverci: “GET xxx.xxx.xx.xx “/progetto_irrigazione/saveData.php”?

    scusa per la domanda da ignorante ma mi sto affacciando da pochissimo nel mondo dell’informatica.
    grazie mille e spero tu possa aiutarmi

    1. Ciao Riccardo,
      la tua domanda non è affatto errata e dimostra che hai letto e compreso quello che scrivo oltre che aver provato da solo a risolvere i tuoi dubbi, credimi che tra le centinaia di commenti che leggo ogni giorno è una cosa rara.
      Meriti una spiegazione ulteriore della riga 80: usando il comando sprintf ( oroginario del linguaggio C ) puoi comporre delle stringhe uniche da inserire in una variabile, in questo esempio è “baffer” ad ogni simbolo tipo %s o %d sostituisci un valore definito dal 3° parametro in poi; è più complesso da spiegare che da fare, ad esempio se scrivi:
      sprintf( buffer, “%s %s”, “Ciao”, “Riccardo” ) il risultato sarà che nella variabile buffer avrai “Ciao Riccardo” ossia la sostituzione del parametro %s con il corrispondente valore definito dalla terza posizione in poi.

      Nel caso dell’IP puoi sostituire la variabile “server” ( 4° posizione ) con l’IP che vuoi in formato testo “192.168.1.1” ad esempio ed otterrai l’invio della stringa con l’Ip e non con il nome del server.
      Ricorda solo che devi anche eseguire la connessione con l’Ip e non con il “DNS name”, trovi dei miei articoli su come fare.

  3. Salve prof. Sono un collega che però si sta avvicinando alla domotica da poco. Le spiego il mio problema: Stiamo realizzando una Casa Domotica a scuola, con gli studenti e mi trovo difronte a questo problema: ho usato Arduino per leggere valori di alcuni sensori e inviarli ad un sito internet dove vengono salvati in un database e visualizzati a schermo se richiesto (fase di monitoraggio). Poi ho usato Arduino per collegarmi ad una pagina web da dove premendo su un link sono in grado di accendere e spegnere un led (quindi in teoria una caldaia, un condizionatore…). Ora il problema è: è possibile fondere i due sketch in un unico sketch così da poter fare entrambe le cose?
    Grazie per l’aiuto e Buon Anno.
    Prof. Luigi Maselli [[ Link a social network rimosso in automatico ]]

    [[ codice rimosso in automatico ]]

    1. Ciao Luigi,
      grazie per il complimento ma non sono un professore.
      Come ha letto certamente in fondo ad ogni sketch non è consentito incollare codice e link a portali di varia natura, chiedo, come a tutti, di rispettare le 2 semplici regole poste in ogni articolo.
      Il codice è rimosso in automatico.

      Restando sulla domanda si è certamente possibile farlo.

  4. Ti chiedo scusa. Non ci avevo fatto caso. Comunque per quanto riguarda il mio problema è il seguente: non riesco a fondere i due sketch in un unico sketch che possa monitorare i sensori e inviare i dati al server dove una pagina PHP scrive i dati in una tabella e contemporaneamente richiamare una pagina da cui accendere o spegnere un led collegato ad un ingresso digitale di Arduino, led che potrebbe essere sostituito da un relè che comandi una ventola o una caldaia.

    1. Ciao Luigi,
      che errore ricevi?

      1. Il problema è che la parte relativa all’invio dei dati al mio server su internet funziona, nel senso che ho dei sensori che vengono rilevati ogni minuto e i dati vengono inviati al server e poi da lì io li memorizzo in una tabella database e li visualizzo su pagine web.
        La parte invece in cui devo permettere la visualizzazione dello stato dei led e la possibilità di cambiarlo, funziona come sketch singolo, ma se lo inglobo nell’altro quando viene richiamata la pag. nel mio caso 192.168.**.**, questa non viene caricata. Ho letto da qualche parte che devo chiudere la comunicazione per un verso per poter aprire quella nell’altro verso. Ma non capisco come si fa

        1. Ciao Luigi,
          si, hai letto bene.
          Arduino può fare da Server e da Client, sei tu a decidere quando fa una e quando fa l’altra.
          In applicazioni come la tua io preferisco che faccia sempre da client per cui è lui a spedire i dati dei sensori al server ed è sempre lui a chiamare un servizio ce gli dica come impostare i led, in polling se non ricordo male. Tu imposti lo stato dei led sempre sul server e non cambi da server a client.

      2. Sono riuscito a farla funzionare. Grazie comunque e scusami per il primo commento in cui avevo postato lo sketch.

        1. Bene Luigi, sono contento

    • Michele il 16 Settembre 2017 alle 00:50
    • Rispondi

    Salve
    sto realizzando una stazione meteo con fishino che integrava già il modulo wifi esp8266 ed ho già un sito per caricare e visualizzare i dati raccolti (temperatura, umidità, pressione, pioggia, neve) su altervista. Utilizzando gli esempi da lei messi ho creato una tabella su phpmysql e il file che sono inviati dal fishino vengono salvati correttamente. Il mio problema si presenta quando provo a rimuovere l’ ip remoto, il codice dell’ impianto e cambiare il nome della tabella: mi restituisce continuamente error004 anche se modifico lo sketch di fishino e il file .php nel server.
    Preferirei (se possibile) tenerci in contatto via e-mail e se il problema verrà risolto risponderò a questo post, cosi chiunque avrà il mio stesso problema, avrà una risposta.

    Grazie

    1. Ciao Michele,
      premetto due cose:
      1. le email sono riservate ai progetti su commissione, per i consigli il modo migliore sono i commenti al blog;
      2. l’articolo in cui hai inserito il commento non è inerente il tipo di centralina che stai realizzando, ci sono articoli dedicati alle centraline meteo.

      Fatte le dovute premesse, non comprendo cosa intendi con “rimuovere l’ ip remoto” nel mio sketch uso il nome del server, l’URL per capirci non l’IP.
      Inoltre non comprendo perché fai tutti quei cambi in una sola volta, se già uno non funziona prova applicando un cambio alla volta, verificalo, comprendi se non funziona le motivazioni e poi procedi al cambio successivo.

    • Paolo il 16 Marzo 2018 alle 17:39
    • Rispondi

    Ciao Mauro sono un appassionato di programmazione e ho seguito il tuo progetto di interfaccia arduino con web server.
    Ho seguito passo passo le tue istruzioni e sono arrivato ad inviare i dati da un URL. Il problema nasce quando è arduino ad inviare i dati infatti dal monitor seriale mi compare l scritta bad request. Premetto che il mio server è una raspberry dove ho installato apache 2 e che questo server gira sotto la stessa rete di arduino, mi puoi dare una soluzione? Ti ringrazio anticipatamente

    1. Ciao Paolo,
      dovresti fornirmi più dettagli come ad esempio:
      – che tipo di connessione stai utilizzando da Arduino ?
      – quale shield ?
      – che protocollo ?
      – la comunicazione network funziona ?
      – che IP e subnet che hai acquisito ?
      – riesci dalla RPi a pingare Arduino ?

      almeno per iniziare. Se ne riesci a fornire altri potrei provare a darti una idea da seguire.

    • Paolo il 19 Marzo 2018 alle 18:51
    • Rispondi

    Ciao Mauro ti ringrazio per la risposta innanzitutto poi ti dico che:
    Arduino e connesso tramite una ethernetshield
    inizialmente non pingavo arduino da raspberry adesso ho impostato un indirizzo ip statico su arduino e mi sembra che sta funzionando bene anche se ho impostato 192.168.1.10 e facendo uno scan con un tool mi esce che ho impostato 192.168.1.4 vabbe vedro come fare
    Un altra domanda mi viene di porti dato che ho un accuont no-ip posso inserire al posto dell ip statico il mio account no-ip?
    grazie e ti saluto cordialmente

    1. Ciao Paolo,
      l’impostazione dell’IP .10 e la risoluzione del .4 mi fa pensare che tu stia sbagliando qualche impostazione di rete, non so quali siano le tue competenze in ambito networking ma ti consiglio la lettura di qualche articolo o manuale che ti chiarisca come impostare un Ip fisso riservandolo sul router via Mac Address.
      Fissato questo passo potrai configurare l0account sul router ed eseguire il port mapping o virtual port redirect, dipende dal router, verso la porta dell’arduino che desideri monitorare.

    • Paolo il 21 Marzo 2018 alle 10:24
    • Rispondi

    Ciao Mauro scusa del disturbo si questo lo so forse faccio io un errore nello sketch di arduino ad impostare l indirizzo statico grazie sempre scusa del disturbo

    1. Ok Paolo

    • Paolo il 5 Aprile 2018 alle 18:50
    • Rispondi

    Ciao Mauro sono ancora qui a farti una domanda.
    Volendo sostituire dei sensori a questi valori fissi che sono nella parte loop dello sketch vorrei capire se ho fatto bene:
    ho creato un’altra variabile che ho chiamato ingresso
    int ingresso = A0;
    e poi nella parte loop ho agito cosi’
    sensoreA = analogRead(ingresso);
    Quindi vorrei capire se ho agito bene perche i dati non arrivano al server
    Saluti Grazie

    1. Ciao Paolo, scritto così mi sembra giusto. Tuttavia ci sono diverse cose che devi indagare:

      1. il sensore è di tipo analogico in 5v?
      2. sul monitor seriale, abilitandolo da sketch, vedi i valori letti sul sensore?
      3. che server stai usando ? ( il mio non è più disponibile per raccolta dati )

    • Paolo il 6 Aprile 2018 alle 14:41
    • Rispondi

    Mauro si tratta di una sonda umidità terreno a cui dovrei anche aggiungere un dht 22.
    Nella seriale mi legge il valore ma alla seconda lettura si blocca e non va più.
    Il server è una raspberry più in rete locale
    Grazie saluti

    1. Ciao Paolo,
      controlla perché si blocca, se dipende dalla sonda o da qualche altro comando che hai inserito nello sketch, considera di avere anche memoria sufficiente per eseguire tutte le letture e memorizzazioni di cui hai bisogno.

    • Lorenzo il 13 Agosto 2018 alle 09:03
    • Rispondi

    Ciao
    È possibile avere un’immagine di questo ” progetto”????

    1. Ciao Lorenzo,
      che tipo di immagine desideri?
      – schema elettronico;
      – diagramma di montaggio;
      – foto di installazione;
      – particolari delle connessioni pulsanti;

      Dovresti trovare tutto nei successivi articoli, cerca “irrigazione” nel blog.

    • Renato il 6 Settembre 2018 alle 16:31
    • Rispondi

    Ciao,
    Grazie mille per questo articolo, mi è stato di grande aiuto per risolvere vari problemi incontrati durante la preparazione di un progetto simile.
    In particolare per passare con la GET ad un file php una variabile invece che un numero o un stringa predefiniti, ho preparato una variabile di tipo char come hai indicato e gli ho caricato i valori delle mie variabili.
    Renato

    1. Ciao Renato,
      ottimo, grazie per la condivisione.

    • Pasqualino il 22 Giugno 2020 alle 11:45
    • Rispondi

    buongiorno son pasqualino vi disturbo perchè io vorrei realizzare un’automazione di una finestra vasiatas
    il mio progetto è il seguente
    apertura tramite pulsante con programma di apertura in secondi circa 150 sec
    apertura automatica programmata dalle 8.00 alle 21.00 solo se ci sono piu di 15°
    chiusura tramite pulsante con programma di chiusra di 200 sec
    chiusura automatica programmata dalle 21.00 alle 8.00 e se ci sono meno di 15° e in caso di pioggia
    e vorrei le informazioni tramite display
    secondo voi è fattibile

    1. Ciao Pasqualino,
      è difficile darti una risposta con così poche informazioni, ad esempio:
      – come viene controllata la finestra meccanicamente parlando ( stepper, servo, ecc.. ) ?
      – i 15 gradi misurati sono interni od esterni?
      – che tipo di display intendi utilizzare?

  1. […] precedente articolo dedicato all’irrigazione arduino hai imparato a condividere i valori rilevati da arduino su […]

  2. […] settimane fa ho pubblicato il progetto Irrigazione arduino che si collega al precedente: irrigazione con arduino ma a cosa serve un progetto di irrigazione […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.