Leggere/scrivere File txt da/su Dropbox

Salve a tutti vorrei sapere: è possibile leggere/scrivere un file txt da/su dropbox?
Se la risposta è si quale librerie servono? Nel caso potete postarmi una guida oppure materiale dal quale prendere informazioni?
Il mio intento è quello, attraverso una applicazione android, di impostare dei valori in un file txt, poi arduino deve continuamente leggere o analizzare questo file nel caso di modifiche deve leggere il valore e poi attivare un led ,un buzzer etc..
Secondo voi è realizzabile come cosa? oppure quale alternativa mi consigliate?

Si, devi aprirti un account gratuito su Temboo ed usare il loro servizio e le loro librerie per Arduino. L'account gratuito permette un numero limitato di transazioni al mese ... normalmente sufficienti per uso hobbistico.

Una volta che ti sei registrato, la parte Dropbox è QUI

Altri metodi non ce ne sono ... salvo non passare a schede diverse basate su Linux.

Guglielmo

gpb01:
Si, devi aprirti un account gratuito su Temboo ed usare il loro servizio e le loro librerie per Arduino. L'account gratuito permette un numero limitato di transazioni al mese ... normalmente sufficienti per uso hobbistico.

Una volta che ti sei registrato, la parte Dropbox è QUI

Altri metodi non ce ne sono ... salvo non passare a schede diverse basate su Linux.

Guglielmo

Secondo te mi conviene leggere continuamente su un server dropbox in attesa di una modifica da parte dell'app android oppure ho letto in rete che si può utilizzare il metodo del web server ovvero attraverso l'app invio il segnale o il codice al web server di arduino?
In quest'ultimo caso se ad esempio volessi inviare il comando da una qualsiasi posizione (quindi non solo quando mi trovo in wifi) dovrei registrami ad un servizio di dynamic dns tipo no-ip, inoltre sul router dovrei aprire la porta per farlo connettere ed assegnare un ip statico giusto? Nel caso ad esempio sposti arduino in un altra casa dovrei nuovamente aprire le porte al nuovo router e assegnare lnuovamente l'ip statico giusto? In questo caso mi conviene fare tutto da dropbox o da web server?

... dipende dal numero di "richieste" che devi fare nell'arco della giornata. Temboo è gratuito per un certo numero di richeste, non ricordo quante, ma se apri l'account, cosa che io consiglio sempre visto che ci sono innumerevoli servizi utili, vedi i dettagli.

Altrimenti usi un applicazione .php che installi su un webserver e ci parli sia da Android che da Arduino e non devi aprire nulla sul router poiché entrambi accedono ad un webserver esterno.

Altra soluzione è che fai un piccolo webserver tu ... in quel caso, oltre al problema di dover fare il port forwarding sul router, devi pensare a tutti i problemi di sicurezza ... che sono i più complessi.

Guglielmo

gpb01:
Altrimenti usi un applicazione .php che installi su un webserver e ci parli sia da Android che da Arduino e non devi aprire nulla sul router poiché entrambi accedono ad un webserver esterno.

Per caso sai dove posso trovare informazioni in merito?
Inoltre ho una ethernet shield w5100 che non presenta nessun mac address come faccio per risalire al mac adress della board?

Normalmnete c'è un adesivo con il numero che devi usare ...
... altrimenti usane uno come da esempi che vedi in giro:

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

Guglielmo

Un'alternativa all'aprire porte sul router che viene raramente menzionata è quella di mettere in piedi una VPN, ad esempio con l'ottimo OpenVPN, per il quale ci sono client per tutti i telefoni. Il lato server può stare su un PC, Raspberry o, come ce l'ho io, su un NAS Synology.

Con l'app ci si collega, e la cosa è pienamente sicura in quanto bisogna essere in possesso della relativa chiave. Volendo, si può aggiungere anche un accesso tramite username + password. Una volta effettuata la connessione, è come se si fosse all'interno della propria rete, per cui è possibile accedere ad un eventuale Arduino su cui gira un webserver (e qua se non vuoi mettere in piedi l'ennesimo server, dai un'occhiata al mio Webbino) tramite il suo IP interno, in maniera perfettamente sicura.

Ovviamente almeno la porta della VPN è necessario aprirla, ma solo quella!

SukkoPera:
Un'alternativa all'aprire porte sul router che viene raramente menzionata è quella di mettere in piedi una VPN ...

Ottima alternativa ... che però NON tutti sono in grado di mettere in piedi ... ::slight_smile:

OpenVPN è ottimo, ma la sua corretta configurazione richiede comunque una discreta preparazione ...
... non per nulla ci sono stati scritti libri come QUESTO o QUESTO.

Guglielmo

Sì, richiede sicuramente un po' di dimestichezza con il routing e soprattutto con la crittografia, altrimenti anche solo capire come distribuire i file delle chiavi diventa un incubo :D.

Però se si ha una NAS Synology, hanno reso il tutto davvero semplice (per setup semplici): con pochi click si setuppa tutto e si scarica uno zippone coi certificati ed i file di configurazione da mettere nel client.

....Comunque non sono pratico di routing......
ragazzi non esiste un modo (senza usare Temboo) per collegarsi ad un file txt di dropbox, leggerlo e sovrascriverlo con arduino?

@gp01 che intendi per applicazione php da installare sul web server?

87Fra87:
ragazzi non esiste un modo (senza usare Temboo) per collegarsi ad un file txt di dropbox, leggerlo e sovrascriverlo con arduino?

T'ho già detto di no ! Arduino NON è un PC, non può fare l'autenticazione OAut2 e la crittografia richiesta da Dropobox ... o usi Temboo o usi una scheda basata su Linux !

87Fra87:
che intendi per applicazione php da installare sul web server?

Intendo che SE sai programmare in PHP è una possibile strada (... e dovresti capire cosa intendo), in caso contrario ... dimenticala, perchè richiede conoscenze che non hai ... ::slight_smile:

Se non vuoi usare Temboo e non sai scrivere un programma in PHP (... e/o non hai un web server pubblico accessibile dove farlo girare) ... ti resta la strada di fare un piccolo web server locale con Arduino ed aprire il router per permettere l'accesso dall'esterno ... con tutto ciò che ne consegue ...

Guglielmo

gpb01:
T'ho già detto di no ! Arduino NON è un PC, non può fare l'autenticazione OAut2 e la crittografia richiesta da Dropobox ... o usi Temboo o usi una scheda basata su Linux !

Ad esempio una scheda Arduino Yun :slight_smile:

gpb01:
T'ho già detto di no ! Arduino NON è un PC, non può fare l'autenticazione OAut2 e la crittografia richiesta da Dropobox ... o usi Temboo o usi una scheda basata su Linux !

Intendo che SE sai programmare in PHP è una possibile strada (... e dovresti capire cosa intendo), in caso contrario ... dimenticala, perchè richiede conoscenze che non hai ... ::slight_smile:

Se non vuoi usare Temboo e non sai scrivere un programma in PHP (... e/o non hai un web server pubblico accessibile dove farlo girare) ... ti resta la strada di fare un piccolo web server locale con Arduino ed aprire il router per permettere l'accesso dall'esterno ... con tutto ciò che ne consegue ...

Guglielmo

Scusami ma con php ho lavorato qualche anno fa per fare un sito dinamico, leggendo in rete ho letto che si possono fare anche applicazioni web lato server o applicazioni stand-alone, non lo sapevo.
Dovrei in pratica fare una applicazione web lato server......mi potrei cimentare.....Grazie comunque....

Allora, se sai usare il PHP, credi una pagina PHP raggiungibile su un sito e ti colleghi ad un database mySQL ...

... ricevi i dati da Arduino/Tablet e li salvi nel DB o ricevi delle richieste di lettura da Arduino/Tablet e li leggi da DB e li spedisci al richiedente.

Come al solito .. occhio ai meccanismi di sicurezza perché altrimenti chiunque ti scrive/legge ... ::slight_smile:

Guglielmo

Ho creato unapagina web php con login, dopo aver effettuato il login attraverso il POST invio le credenziali ad un altra pagina ovvero http://arduinoalter.altervista.org/indexComandi.php qui vengono controllate le credenziali se tutto è ok mi visualizza un campo di testo con un bottone. Se nel campo di testo inserisco il valore e clicco il bottone il valore viene salvato nel database. Ora io vorrei inviare con arduino il valore nel campo di testo e poi far si che venga cliccato il bottone per poi eseguire la query, oppure attraverso arduino nella pagina http://arduinoalter.altervista.org/indexComandi.php deve essere richiamata una funzione php che mi esegue la query.
In rete ho trovato un pò di materiale ma non sono riuscito ancora a fare ciò.
il codice è il seguente:

#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 };
 
//byte mac[] =   {0xf0, 0x1f, 0xaf, 0x33, 0x62, 0x2f };
 
IPAddress ip(192,168,1,101);
 
// initialize the library instance:
EthernetClient client;
 
char server[] = "http://arduinoalter.altervista.org/";
 
double dummyValue = 7.5;
 
void setup()
{
  Serial.begin(9600);
 
  // attempt a DHCP connection:
  Serial.println("Attempting to get an IP address using DHCP:");
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("failed to get an IP address using DHCP, trying manually");
    Ethernet.begin(mac, ip);
  }
 
  Serial.print("My address:");
  Serial.println(Ethernet.localIP());
}
 
 
void loop()
{
    // connect to the server
    if (client.connect(server, 80))
    {
        // print to serial monitor
        Serial.println("connected...");
        Serial.println("ARDUINO: forming HTTP request message");
 
        // send data the server through GET request
        client.print("GET http://arduinoalter.altervista.org/indexComandi.php?user=Prova&passw=Prova");
        client.print(dummyValue);
        client.println(" HTTP/1.1");
        client.print("HOST: ");
        client.println(server);
        client.println();
 
        Serial.println("ARDUINO: HTTP message sent");        
 
        // give server some time to receive and store data
        // before asking for response from it
        delay(1000);
 
        // get the response from the page and print it to serial port
        // to ascertain that data was received properly
        if(client.available())
        {
            Serial.println("ARDUINO: HTTP message received");
            Serial.println("ARDUINO: printing received headers and script response...\n");
 
            while(client.available())
            {
                char c = client.read();
                Serial.print(c);
            }
        }
        else
        {
            Serial.println("ARDUINO: no response received / no response received in time");
        }
 
        client.stop();
    }
    // do nothing forever after:
    while(true);
}

Il risultato è questo:

Attempting to get an IP address using DHCP:
My address:192.168.1.3
connected...
ARDUINO: forming HTTP request message
ARDUINO: HTTP message sent
ARDUINO: HTTP message received
ARDUINO: printing received headers and script response...

HTTP/1.1 400 Bad Request
Server: nginx
Date: Thu, 22 Sep 2016 10:56:55 GMT
Content-Type: text/html
Content-Length: 166

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

Prima cosa è corretto il codice?
Seconda cosa come faccio ad inserire un valore in un input text e poi attivare l'input text di tipo submit ovvero un button?

87Fra87:
Ho creato unapagina web php con login, dopo aver effettuato il login attraverso il POST invio le credenziali ad un altra pagina ovvero http://arduinoalter.altervista.org/indexComandi.php qui vengono controllate le credenziali se tutto è ok mi visualizza un campo di testo con un bottone. Se nel campo di testo inserisco il valore e clicco il bottone il valore viene salvato nel database. Ora io vorrei inviare con arduino il valore nel campo di testo e poi far si che venga cliccato il bottone per poi eseguire la query, oppure attraverso arduino nella pagina http://arduinoalter.altervista.org/indexComandi.php deve essere richiamata una funzione php che mi esegue la query.
In rete ho trovato un pò di materiale ma non sono riuscito ancora a fare ciò.
il codice è il seguente:

#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 };

//byte mac[] =  {0xf0, 0x1f, 0xaf, 0x33, 0x62, 0x2f };

IPAddress ip(192,168,1,101);

// initialize the library instance:
EthernetClient client;

char server[] = "http://arduinoalter.altervista.org/";

double dummyValue = 7.5;

void setup()
{
  Serial.begin(9600);

// attempt a DHCP connection:
  Serial.println("Attempting to get an IP address using DHCP:");
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("failed to get an IP address using DHCP, trying manually");
    Ethernet.begin(mac, ip);
  }

Serial.print("My address:");
  Serial.println(Ethernet.localIP());
}

void loop()
{
    // connect to the server
    if (client.connect(server, 80))
    {
        // print to serial monitor
        Serial.println("connected...");
        Serial.println("ARDUINO: forming HTTP request message");

// send data the server through GET request
        client.print("GET http://arduinoalter.altervista.org/indexComandi.php?user=Prova&passw=Prova");
        client.print(dummyValue);
        client.println(" HTTP/1.1");
        client.print("HOST: ");
        client.println(server);
        client.println();

Serial.println("ARDUINO: HTTP message sent");

// give server some time to receive and store data
        // before asking for response from it
        delay(1000);

// get the response from the page and print it to serial port
        // to ascertain that data was received properly
        if(client.available())
        {
            Serial.println("ARDUINO: HTTP message received");
            Serial.println("ARDUINO: printing received headers and script response...\n");

while(client.available())
            {
                char c = client.read();
                Serial.print(c);
            }
        }
        else
        {
            Serial.println("ARDUINO: no response received / no response received in time");
        }

client.stop();
    }
    // do nothing forever after:
    while(true);
}




Il risultato è questo:



Attempting to get an IP address using DHCP:
My address:192.168.1.3
connected...
ARDUINO: forming HTTP request message
ARDUINO: HTTP message sent
ARDUINO: HTTP message received
ARDUINO: printing received headers and script response...

HTTP/1.1 400 Bad Request
Server: nginx
Date: Thu, 22 Sep 2016 10:56:55 GMT
Content-Type: text/html
Content-Length: 166

400 Bad Request

400 Bad Request


nginx > ``` > > > Prima cosa è corretto il codice? > Seconda cosa come faccio ad inserire un valore in un input text e poi attivare l'input text di tipo submit ovvero un button?

Ho provato anche ha fare una pagina php che quando riceve una get attiva la query, poi su arduino ho scritto il seguente codice:

#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 };
 
//byte mac[] =   {0xf0, 0x1f, 0xaf, 0x33, 0x62, 0x2f };
 
IPAddress ip(192,168,1,101);
 
// initialize the library instance:
EthernetClient client;
 
char server[] = "http://arduinoalter.altervista.org/NuovoFile.php?user=12";
 
double dummyValue = 7.5;
 
void setup()
{
  Serial.begin(9600);
 
  // attempt a DHCP connection:
  Serial.println("Attempting to get an IP address using DHCP:");
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("failed to get an IP address using DHCP, trying manually");
    Ethernet.begin(mac, ip);
  }
 
  Serial.print("My address:");
  Serial.println(Ethernet.localIP());
}
 
 
void loop()
{
    // connect to the server
    if (client.connect(server, 80))
    {
        // print to serial monitor
        Serial.println("connected...");
        Serial.println("ARDUINO: forming HTTP request message");
 
        // send data the server through GET request
        client.print("GET http://arduinoalter.altervista.org/NuovoFile.php?user=12");
        client.print(dummyValue);
        client.println(" HTTP/1.1");
        client.print("HOST: ");
        client.println(server);
 
        Serial.println("ARDUINO: HTTP message sent");        
 
        // give server some time to receive and store data
        // before asking for response from it
        delay(1000);
 
        // get the response from the page and print it to serial port
        // to ascertain that data was received properly
        if(client.available())
        {
            Serial.println("ARDUINO: HTTP message received");
            Serial.println("ARDUINO: printing received headers and script response...\n");
 
            while(client.available())
            {
                char c = client.read();
                Serial.print(c);
            }
        }
        else
        {
            Serial.println("ARDUINO: no response received / no response received in time");
        }
 
        client.stop();
    }
    // do nothing forever after:
    while(true);
}

Non funziona neanche questo il risultato è questo:

Attempting to get an IP address using DHCP:
My address:192.168.1.3
connected...
ARDUINO: forming HTTP request message
ARDUINO: HTTP message sent
ARDUINO: HTTP message received
ARDUINO: printing received headers and script response...

HTTP/1.1 400 Bad Request
Server: nginx
Date: Thu, 22 Sep 2016 11:28:25 GMT
Content-Type: text/html
Content-Length: 166

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

Dove sbaglio?

Edit: risolto tutto