Invio comandi da Altervista verso Arduino

Intanto un saluto a tutti in quanto sono nuovo! :wink:
ho letto molti topic e grazie a questo forum son venuto a capo di molti problemi.

Ora scrivo in quanto mi son bloccato nel progetto che sto facendo :roll_eyes:

1.Ho realizzato uno sketch in cui risiede del codice html (una semplice tabella) che, una volta fatto l'accesso da browser all'ip dell'ethernet shield dell'Arduino, mi permette di abilitare o meno alcune uscite (Led, relè..). Fin qui non ho avuto problemi, ed ho implementato il progetto anche per il controllo remoto.

2.Nel frattempo ho realizzato alcune pagine in html e php con una migliore interfaccia grafica (css) e maggiori comandi disponibili. Volevo salvare queste pagine sull' SD dell'ethernet shield (implementando un web server) ma non ho capito molto come posso farlo seppur leggendo diversi topic al riguardo.
Ho deciso quindi di spostare il tutto (quindi il sito) su Altervista. Ora il problema stà nell'inviare i comandi per pilotare le uscite ad Arduino.

Per la parte 1. (quella che mi è riuscita) mi sono servito di questo if per riconoscere il comando:

if(msg.indexOf("c1")>0)
                  {
                       digitalWrite(5, HIGH);
                  }
else if(msg.indexOf("c2")>0)
                  {
                       digitalWrite(5, LOW);
                  }

In cui "c1" e "c2" vengono riconosciuti dopo questa parte html (inserita nello sketch):

"<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>"

Ora mi servirebbe un aiuto per capire come inviare gli stessi comandi ("c1" e "c2") ad Arduino sfruttando però le pagine risiedenti su Altervista.

Ringrazio in anticipo tutti quelli che vorranno aiutarmi! :slight_smile:

Per quanto riguarda il primo tentativo, non puoi fare girare una pagina in php su arduino perchè php è un linguaggio interpretato dal server (in questo caso arduino) che pertanto dovrebbe avere un interprete php. In teoria, per poche e semplici funzioni di php potresti scriverti un tuo proprio interprete (o meglio un parser), ma non credo che sia la strada più semplice.
Quindi se il sito dev'essere ospitato su arduino ti consiglio vivamente di usare javascript (che invece è interpretato dal browser) servendoti eventualmente di ajax e jquery.

Per quanto riguarda invece la seconda soluzione, tu attraverso i pulsanti di questa tabella (che adesso si trova su altervista) vuoi controllare arduino?

Ciao e grazie della risposta.

La tua frase:
"Per quanto riguarda invece la seconda soluzione, tu attraverso i pulsanti di questa tabella (che adesso si trova su altervista) vuoi controllare arduino?"
è proprio il problema che vorrei risolvere.

Grazie

Probabilmente è la via più lunga, però se per qualche motivo la preferisci ok!
Io lo farei tramite jquery, ajax e php. Praticamente tramite jquery potresti caricare dei dati (o dei frammenti html) presenti su un'altra pagina tramite una chiamata ajax (se non l'hai mai fatto non preoccuparti, è facile!).
Il problema è che con questo metodo puoi solo fare richieste da una pagina ad un altra presente sullo stesso server, cioè sul server Altervista.
Per ovviare a questo problema si può passare attraverso php!
Cioè la richiesta ajax viene fatta ad una pagina php (sempre sul tuo sito Altervista) e quest'ultima carica i dati dal web server di arduino.
Ti può tornare utile questo.

Ora c'è un altro problema: la pagina php deve richiedere i dati ad un certo indirizzo ip, cioè quello di arduino, o meglio l'ip pubblico del router a cui è collegato.
Questo significa che dovrai inoltrare le richieste sulla porta 80 verso l'ip locale di arduino e (a meno chè non hai ip statico) dovrai utilizzare un dns dinamico.

Come vedi ci sono un bel pò di cose da fare, però se proprio vuoi prendere questa strada non c'è niente di particolarmente difficile, devi solo affrontare le varie parti una alla volta!

Grazie ancora per la tua risposta.
Purtroppo di Ajax e jquery sono a digiuno :frowning:
Ma non c'è problema in quanto mi metteró a studiarli.

Secondo te posso affrontare il problema in modo più semplice?
Come scritto prima ho provato a cimentarmi nel tyniwebserver ma non c'ho capito molto.
Apparte la soluzione di appoggiarmi ad altervista non vedo altre strade..

Grazie!

Purtroppo non so aiutarti per quanto riguarda il lato arduino in quanto non ho una ethernet shield né ho mai provato tinywebserver...
Però da quello che ho capito, tu puoi gestire le richieste GET, fare delle operazioni in base alla richiesta ed eventualmente inviare la pagina.
Se non usi ajax, nel momento in cui premi un pulsante sul browser viene inviata la richiesta GET e contestualmente il browser si aspetta di ricevere qualcosa dal server (arduino). Questo significa che devi inviare di nuovo la stessa pagina (o se vuoi un'altra) tramite tinywebserver.
Con ajax invece puoi permetterti di inviare una richiesta GET (o POST) senza essere vincolato a ricaricare la pagina, cosa che nel tuo caso sarebbe superflua visto che devi solo inviare comandi.

Quindi: puoi fare a meno di ajax, ma devi inviare la pagina al browser.

Ok allora mi studierò qualcosa, e nel frattempo aspetterò magari qualche altro suggerimento da utenti che magari si sono già cimentati in questo :stuck_out_tongue:

Ti ringrazio e ti faccio auguri di buona Pasqua!

Di niente! Buona Pasqua anche a te :slight_smile:

Scrivo ancora nel caso qualcun altro oltre al gentilissimo "supergiox" mi sappia aiutare :sweat_smile:
Ho provato a vedere alcuni progetti che incrociano il php con Arduino, e mi pare di aver capito che è stato eseguito il parsing di alcuni comandi (il GET ad esempio).
Non ho trovato guide esaustive e quindi chiedo a voi delucidazioni!

grazie

Ciao domoino,
non so se ti può essere d'aiuto ma prova a dare un'occhiata alla piattaforma http://paraimpu.crs4.it/ (progetto italiano made in Sardegna) che permette di interfacciarsi con diversi sensori e attuatori tra i quali c'è anche Arduino.
Potresti usare il sito che hai messo su Altervista come strato di presentazione e con il quale l'utente interagisce. Al click di un pulsante invii la richiesta a paraimpu tramite javascript e lui poi indirizza la richiesta al tuo Arduino.
Prova a darci un occhio se ti può essere utile. Io avevo fatto un progettino semplice semplice che collegava Arduino UNO e uno smartphone Android per quanto possibile se ti posso essere d'aiuto chiedi pure.

Ciao.

Grazie critical.
Avevo già dato un'occhiata veloce ma non in modo approfondito.
Nel pomeriggio daró un'occhiata, ti ringrazio e nel caso mi permetteró di disturbati :roll_eyes: :slight_smile:

Nessun problema, anzi se posso fare qualcosa ben venga visto che ho un po' abbandonato quel progettino :frowning:
Ciao

Ok, ho spulciato per bene l'intero forum.
Forse mi conviene tener in considerazione la parte "implementazione web server direttamente su arduino".
Purtroppo non c'è verso che io capisca il TinyWebServer :frowning:
Se qualcuno riesce a spiegarmi minimamente il funzionamento gliene sarei molto grato; io dovrei far girare 8 pagine (html), un css e un login in php.

Nel frattempo mi studio la strada proposta da critical :wink:

Aggiungo un pezzo alla volta purtroppo ma sto seguendo 2 strade:

  1. Sito si Altervista che dovrebbe mandare comandi ad Arduino ;
  2. Implementare TinyWebServer.

Preferisco seguire la 1. se possibile, e proprio al riguardo posto questa parte di codice trovato nel fantastico progetto "DomoticHome" per vedere se può fare al caso mio:

if(readString.startsWith("GET /?out=3&status=0"))
{RemoteSwitch::sendTelegram(code2,10);
//digitalWrite(3, LOW);
client.print("{\"status\" : \"0\" , \"out\" : \"");
client.print(3);
client.print("\"}");
}

Potrei usare questo codice per intercettare i comandi inviati da Altervista??

Grazie ancora!

domoino per intercettare i comandi prova a dare un occhio a questo topic, in particolare al codice di @medimax (che alla fine è il codice iniziale di @giusepperomano con qualche modifica): WebServer SD - #13 by system - Generale - Arduino Forum e come viene valorizzata la variabile readString.

ciao

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 :~
Appena eseguo le prove posto il risultato!
Grazie

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

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!

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: $.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

Facendo prove su paraimpu sono riuscito ad estrarne questo (mettendo arduino in actuators):

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:

$.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 :cold_sweat: