Pages: 1 [2] 3 4   Go Down
Author Topic: Invio comandi da Altervista verso Arduino  (Read 4889 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie critical,
avevo già visto questo codice e avevo pensato di provarlo, però (a differenza loro) io dovrei mandare i comandi ad Arduino dal sito risiedente su Altervista e non da una pagine risiedente nello stesso codice.
Ora io non so se vale la stessa cosa ma facendo alcune prove no. Proverò ad usare la variabile readString come da te suggerito ma non credo mi risolva il problema  smiley-confuse
Appena eseguo le prove posto il risultato!
Grazie
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sei ti serve una mano con ajax, javascript o simili chiedi pure.
Hai guardato poi paraimpu?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si mi sono pure iscritto e sta sera mi guarderó tutto per bene il discorso paraimpu.
Già che sei così gentile vorrei capire cosa devo sapere per realizzare quello che voglio fare tramite altervisa. Leggendo e documentandomi ho trovato molti "indizi" ma non so ancora bene quello che mi serve per riuscire a comandare arduino da altervista.
Ti ringrazio ancora!
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao domoino,
supponendo che tu abbia una tabella con diversi bottoni, al click di uno di questi crei il json con i dati da inviare come una richiesta ajax (ti consiglio jquery) a paraimpu.
La richiesta che devi fare è simile a questa:
Code:
$.post("http://paraimpu.crs4.it/thing/UUID_actuator", { "D3": "L"});
dove UUID_actuator è l'UUID associato al tuo attuatore, il tuo arduino, mentre {"D3", "L"} sono i dati inviati che in questo caso significano mettere a LOW il pin D3.
Per maggiori dettagli/codice chiedimi pure, in quanto questo è solo un abbozzo.

Ciao
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Facendo prove su paraimpu sono riuscito ad estrarne questo (mettendo arduino in actuators):
Code:
Data type used: application/json
To get data: an HTTP GET or POST request to http://paraimpu.crs4.it/use?token=46d86e7e-8b70-4525-b928-be9708a4912e

dovrei mettere dietro al bottone del comando nella pagina html (php) questo:
Code:
$.post("http://paraimpu.crs4.it/thing/46d86e7e-8b70-4525-b928-be9708a4912e ", { "D3": "L"});

e questo mi setterebbe l'uscita digitale 3 a LOW?

Spero di non aver detto troppe cazzate smiley-roll-sweat
Logged

0
Offline Offline
Faraday Member
**
Karma: 46
Posts: 5881
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

x iscrizione
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao domoino,
premetto subito che ti avevo scritto una cavolata perché non avevo più utilizzato l'app che avevo fatto.
Allora ho ripreso in mano paraimpu e quello che devi fare è creare un sensore, ossia un qualcosa che ti crea dei dati, nel tuo caso la tua pagina html, un attuatore, ossia quello che consuma i dati, nel tuo caso arduino e collegarli assieme.
Il sensore da creare è uno generico (Generic Sensor) che come content-type accetta application/json, l'attuatore sarà il tuo arduino e poi quando li connetti inserisci i mapping e i filter che ti servono.
Ora il flusso è il seguente: tu devi produrre i dati, ossia cliccare su un bottone della pagina web, e quindi fare una richiesta in post al tuo Generic Sensor, la connessione filtrerà e mapperà i dati verso il tuo attuatore che metterà a LOW o a HIGH il pin specificato nella richiesta.
Sostanzialmente tu devi solo interagire con il sensore (e sulla pagina di questo ci sono tutte le info per creare nuovi dati), non con l'attuatore.
Ti allego la pagina HTML che ho utilizzato per fare i test. Un paio di cose: il 'token' che vedi è associato al mio sensore generico, AndroidPhone, la parte 'data' è arbitraria a me servivano quel tipo di informazioni quando filtro e mappo, ma tu puoi mettere quello che vuoi. Ultima cosa la creazione ritorna con codice http 201 quindi non è uno status propriamente ok ma non ci sono problemi: per verificare se la risorsa è stata creata fai un refresh sulla pagina del sensore.

Chiedimi pure, perché forse non sono stato molto chiaro.

Ciao

* test_paraimpu.html (1.53 KB - downloaded 10 times.)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Critical sei veramente gentilissimo!
Ho letto per bene la pagina da te realizzata, ti chiedo solo una cosa (dato che non sono pratico di json e molto poco di paraimpu), vorrei capire cosa devo mettere nel "pulsante" posto all'interno della pagina html per far si che Arduino riceva i comandi.
Mi va bene sia la soluzione di passare tramite paraimpu che no.

Ho capito tutto quello che mi hai detto e i vari meccanismi (paraimpu permettere di fare cose veramente belle!), ti sei spiegato perfettamente!
Il mio problema è appunto capire cosa mettere "dietro" i pulsanti con cui invio i comandi, quelli che ora son questi per capirci meglio:
Code:
"<tr>"
         "<th><em><strong>Led</strong></em></th>"
         "<td><a href=”192.168.1.161:333/c1”> Accendi </a></td>"
         "<td><a href=”192.168.1.161:333/c2”> Spegni </a></td>"
"</tr>"

e successivamente come far capire ad arduino i comandi ricevuti, quello che ora è questo:
Code:
if(msg.indexOf("c1")>0)
                  {
                       digitalWrite(5, HIGH);
                  }
else if(msg.indexOf("c2")>0)
                  {
                       digitalWrite(5, LOW);
                  }

Grazie di nuovo!
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Secondo me dovresti capire che strada intraprendere, perché le cose da fare sono un po' diverse a seconda della soluzione che intendi adottare. Se usi paraimpu, lato arduino non devi fare nulla: devi solo caricare lo sketch che ti danno loro e sei ok (a meno di modifiche che tu vuoi fare allo sketch), mentre devi curare l'aspetto html, ajax e configurare paraimpu come più ti piace (non è per niente difficile).
Se intraprendi la strada di non usare paraimpu devi "smazzarti" la lettura delle richieste http nello sketch e in questo caso non sono molto pratico in quanto non ho ancora un ethernet shield smiley-sad-blue!
Posso darti una mano lato html e ajax per entrambe le soluzione mentre per quanto riguarda la strada non paraimpu ti consiglio di vedere il post che ti avevo già linkato (http://arduino.cc/forum/index.php/topic,77511.msg755356.html#msg755356) che leggeva i valori che venivano passati dal form della pagina html ad arduino.
Per quanto riguarda lato HTML i bottoni si comportano come il mio div che sulla pagina html di test era cliccabile: gli assegni un ID e poi tramite la funzione ready di javascript gli associ l'evento di click. Ad esempio dato questo bottone:
Code:
<input id="mioBottone" name="d12" type="button" value="on"/>
tra il tag head dopo aver incluso jquery in un tag script, apri un altro tag script
Code:
$(document).ready(function(){
    $("#mioBottone").click(function(event){
       doSomething
    )}
in questo modo al click sul bottone verrà eseguito il codice 'doSomething'. Ora quel 'doSomething' dipende dalla strada che vuoi fare. Per paraimpu va bene il codice che c'era sulla mia pagina di test (con i dovuti cambiamenti per adattarlo alle tue esigenze), per l'altra strada secondo me va devi fare sempre una richiesta ajax verso però l'ethernet shield e come parametri qualcosa che decidi tu. Ad esempio il 'doSomething' potrebbe essere qualcosa del genere:
Code:
$.ajax({
type: "GET",
url: "ip_shield",
data: {d12:"on"},
complete: function(jqXHR, textStatus) {
'gestione della response'
        }
});
Fai attenzione che data è arbitrario, ci puoi mettere quello che ti serve (in questo caso è il name e il value del bottone che con jquery puoi ricavarti usando le proprietà dell'oggetto) e che questa volta non è un json ma sono i parametri della richiesta in get che saranno nella forma '?d12=on' (mentre per paraimpu il data dev'essere un json). Lato arduino dovrai parsati la richiesta sopra come hanno fatto nel post che ti ho detto prima.
Fai alcune prove per vedere cosa arriva ad Arduino con il secondo caso.

Ciao
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Critical e grazie mille perchè sei sempre chiarissimo!

Ho risolto il problema in modo molto semplice(non ci avevo pensato) senza sfruttare jQuery, Ajax, ecc.
Ho usato uno "scamuffo" ma per le prove che voglio fare va più che bene.

Se ti può servire o ti può interessare ti posterò parti del codice senza problemi  smiley-wink

Buona domenica!
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao domoino,
si si mi interessa. Che scamuffo hai fatto? smiley-eek
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Uno scamuffo da sistemare  smiley-razz
Ti posto il codice così capisci meglio, starei più tempo a spiegare che a mostrarti  smiley

• Codice su Arduino:
Code:
    pc_client.print("<html>");
                    pc_client.print("<head>");
                   
                    pc_client.print("<meta HTTP-EQUIV='refresh' content='0; url=http://InserirePaginaSuCuiEseguireRedirect'/>");
                    pc_client.print("</head>");
                   
                    pc_client.print("</html>");
                     
                     
                  if(msg.indexOf("c1")>0)      //C1, c2 sono per il cicalino
                  {
                        digitalWrite(2, HIGH);
                  }
                  else if(msg.indexOf("c2")>0)
                  {
                        digitalWrite(2, LOW);
                  }
                  else if(msg.indexOf("c3")>0)  //c3, c4 sono per il primo Led
                  {
                       digitalWrite(5, HIGH);
                  }
                  else if(msg.indexOf("c4")>0)
                  {
                       digitalWrite(5, LOW);
                  }   
                  else if(msg.indexOf("c5")>0)  //c5, c6 sono per il secondo Led
                  {
                       digitalWrite(9, HIGH);
                  }
                  else if(msg.indexOf("c6")>0)
                  {
                       digitalWrite(9, LOW);
                  }   

• Esempio parte di una Pagina del sito (invio dei comandi):
Code:
<tr>
<td>LED1</td>
<td>

<form action=http://192.168.1.161:333/c3>  <!--Indirizzo Ip Ethernet Shield Arduino(Locale) con relativo comando
  <input name="Accendi" type="image" src="ONgrigio.png" alt="Accendi" title="Accendi" width="70" height="70"> 
</form>

<form action=http://192.168.1.161:333/c4>
  <input name="Spegni" type="image" src="OFFgrigio.png" alt="Spegni" title="Spegni" width="70" height="70">
</form>

</td>
</tr>

• Ora devo capire come fare il redirect automatico alla pagina da cui si arriva ad Arduino (tramite l'indirizzo IP) cambiando questa riga:
Code:
                    pc_client.print("<meta HTTP-EQUIV='refresh' content='0; url=http://InserirePaginaSuCuiEseguireRedirect'/>");

Oppure usando jSon.

Funziona sia da locale che da remoto (settando un "virtual server" sul router).

Ora devo perfezionare la sicurezza!
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma se non ho capito male in questo modo tu ti connetti alla pagina di arduino e questa fa il redirect al sito di altervista, giusto? Io avevo capito che avevi un sito esterno e che volevi farlo interagire con arduino.
Comunque:
Quote
Code:
<tr>
<td>LED1</td>
<td>

<form action=http://192.168.1.161:333/c3>  <!--Indirizzo Ip Ethernet Shield Arduino(Locale) con relativo comando
  <input name="Accendi" type="image" src="ONgrigio.png" alt="Accendi" title="Accendi" width="70" height="70"> 
</form>

<form action=http://192.168.1.161:333/c4>
  <input name="Spegni" type="image" src="OFFgrigio.png" alt="Spegni" title="Spegni" width="70" height="70">
</form>

</td>
</tr>
è la stessa cosa del mio codice solo che invece di usare chiamate ajax fai submit di un form e ricarichi tutta la pagina smiley.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
<tr>
<td>LED1</td>
<td>

<form action=http://192.168.1.161:333/c3>  <!--Indirizzo Ip Ethernet Shield Arduino(Locale) con relativo comando
  <input name="Accendi" type="image" src="ONgrigio.png" alt="Accendi" title="Accendi" width="70" height="70"> 
</form>

<form action=http://192.168.1.161:333/c4>
  <input name="Spegni" type="image" src="OFFgrigio.png" alt="Spegni" title="Spegni" width="70" height="70">
</form>

</td>
</tr>

Questa parte si trova su Altervista, Arduino riceve i comandi da qui e una volta ricevuti rimanda su una pagine di altervista.
Se era come il tuo esempio scusami ma forse avevo frainteso!  smiley-red  smiley-sweat
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il primo accesso avviene da una pagina presente il Altervista comunque.
Poi dalle varie pagine invio i comandi ad Arduino  smiley
Logged

Pages: 1 [2] 3 4   Go Up
Jump to: