Arduino comandato da Processing via web tramite pc o smartphone Android

Ciao a tutti!

Leggendo i consigli del forum ho creato un programma in processing che manda dei comandi ad arduino MEGA al quale è demandato il compito di accendere e spegnere dei relè, leggere delle temperature, lo stato delle batterie gruppo di continuità etc.
Si tratta di controllare da remoto una postazione radioamatoriale posta in montagna e facilmente raggiungibile solo tramite internet o via radio e dove sarà installato anche arduino.

In sostanza il programma in processing invia un comando ad arduino che esegue e restituisce una risposta.
E' basato sull'esempio UDPSendReceiveStrings che contiene sia la parte arduino che la parte processing e che ho visto citato più volte sul forum.

Tutto funziona alla grande, purtroppo però solo all'interno della mia rete di pc inserendo l'indirizzo IP numerico a cui è collegato arduino.

All'interno del programma processing, avrei bisogno di sostituire le 4 cifre dell' IP col nome del sito a cui mi collego (es. montagnaxxx.dyndns.org).
Non avendo IP statici, devo fare questo obbligatoriamente, visto che da queste parti gli indirizzi vengono cambiati spesso e volentieri...
Purtroppo non ho trovato esempi o altre discussioni in merito

Per il momento non allego gli sketch, visto che sono lunghi e la parte dove ho difficoltà è esattamente la stessa che trovate nell'esempio sopra citato.
Per semplicità potremmo usare l'esempio per provare ad usare un nome dns.

Mi rivolgo a questo forum in quanto nel forum di processing non si trova praticamente nulla per arduino, mentre qui ho trovato molte soluzioni per processing! :grin:

Se a qualcuno interessa comunque sono ben disposto a caricare gli sketch.

Invio solo una immagine dell'interfaccia grafica che ho creato. Ho voluto usare processing proprio per creare uno strumento facile in modo che lo possano usare anche i radioamatori senza esperienza di microcontrollori.

grazie a tutti

interfaccia.jpg

ZioWally:
Se a qualcuno interessa comunque sono ben disposto a caricare gli sketch.

Non posso darti una mano perchè non sono pratico di Processing, ma se carichi
gli sketch sarei intressato a darle un' occhiata perchè avrei intezione di
farmi un'interfaccia per la comunicazione con il PC.

All'interno del programma processing, avrei bisogno di sostituire le 4 cifre dell' IP col nome del sito a cui mi collego (es. montagnaxxx.dyndns.org).

invece di inserire il dns del sito puoi inserire direttamente il suo IP ricavandolo da qui
http://www.visualroute.it/strumenti/dnslookup.asp

inoltre non è sufficente inserire l'indirizzo del servizio ddns, altrimenti appena ti cambia l' IP dinamico ti trovi incapace di raggiungere l'arduino dall'esterno. devi implementare anche la procedura di aggiornamento IP su dyndns.

vedi se questi esempi ti aiutano

http://www.instructables.com/id/Arduino-DDNS-Dynamic-DNS-by-Open-Electronicsorg/step3/The-Arduino-sketch/

Busco:
i miei sketch non sono ancora molto presentabili e francamente di mio c'è ben poco.
Però ti posso consigliare di avvicinarti a Processing come ho fatto io: se cerchi il "Tutorial Processig" di elettronicain, puoi scaricare le lezioni che per me sono state molto utili e mi hanno permesso di cominciare subito a lavorarci.
Lì ho imparato a clikkare in un punto dello schermo per poter eseguire una funzione, nel mio caso spedisco una stringa ad arduino via UDP utilizzando il medesimo sistema dell'esempio UDPSendReceiveStrings.
La risposta di Arduino mi restituisce le info per aggiornare l'interfaccia grafica cambiando l'immagine del pulsante che da spento diventa acceso o contrario.
Il resto sono solo effetti speciali, vale a dire immagini di pulsanti o vu-meter che si modificano, ma anche questo lo trovi sul tutorial di elettronicain.
Non mi considero bravo col processing, ma se hai bisogno di aiuto contattami pure, spero di esserti utile! :grin:

Ricdata:
Ti ringrazio della risposta, vado subito a leggere e provare.
Il responsabile del sito delle radio mi spiegava che usano dyndns.org proprio per avere una sorta di Ip statico.
Il programma che sto creando poi lo passerò a più persone socie del radio club, quindi se potessi risolvere il problema adattando il solo skecth in processing senza personalizzazioni dei vari pc sarebbe il massimo!
La mia intenzione sarebbe di compilarlo in modo che chiunque con un semplice doppio click lo possa usare senza necessariamente avere installato l'ide di processing.
Se hai altri suggerimenti o consigli sono e saranno sempre ben accetti!!

Il programma che sto creando poi lo passerò a più persone socie del radio club, quindi se potessi risolvere il problema adattando il solo skecth in processing senza personalizzazioni dei vari pc sarebbe il massimo!

il processing lo puoi compilare con l'IP di dyndns senza bisogno che gli altri utenti ci mettano le mani in alcun modo, poichè il server (arduino) a cui si collega è sempre lo stesso.

il problema che ti dicevo è legato al server arduino: siccome le connessioni adsl sono per la maggior parte a IP dinamico, ciò comporta che ad ogni restart del router, o comunque ogni tot tempo l'IP cambia.
dyndns non fa altro che memorizzare del tuo ip collegandolo ad un dns, ma non può sapere se e quando l'ip cambia. per cui c'è bisogno di un programma locale che rileva il cambio di IP e lo invia a dyndns in modo che possa aggiornarlo.

non è detto che debba farlo per forza l'arduino, ci sono alcuni router ad esempio che implementano questa funzione, per cui ti basterà impostarlo nel modo appropriato (ddns + port forwarding). oppure puoi delegare l'operazione ad un pc (collegato alla stessa lan dell'arduino) dove caricherai il programma per aggiornare l'ip

intervento su vari punti: :slight_smile:

  1. se ho capito il sw creato con processing, compilato in .exe, lo darai a diverse persone, il problema che mi e' venuto in mente e' questo: hai fatto in modo di leggere lo stato di tutte le uscite all'avvio del programma ? ed anche ad ogni tot di tempo in automatico ? perche' se tizio si e' collegato ed ha attivato il pin 1, l'interfaccia che usa caio verra' aggiornata ?

  2. hai pensato al discorso che solo 4 persone possono collegarsi contemporaneamente ?

  3. sul raggiungimento dell'arduino invece non ci dovrebbe essere nessun problema, devi lavorare sul router. Il DDNS lo gestisci direttamente dal router, nel codice processing dovresti poter scrivere direttamente il nome del sito

  4. hai usato una libreria processing per la grafica ? e' molto bella

Testato:
A queste domande ho cercato anch'io una risposta con il club. Mi hanno confermato che hanno bisogno di una "centralina" da cui accendere o spegnere radio, o altri servizi. Normalmente questo viene fatto direttamente in loco andandoci con un'auto 4X4.
Essendo quindi uno strumento per la piccola manutenzione e il monitoraggio (anche solo capire se le batterie tampone sono a posto oppure se la 220v manca), l'uso sarà occasionale ed esclusivo di chi ne ha le competenze, non dei singoli fruitori dei ponti radio. Non credo ci sia il rischio di un "conflitto ON-OFF :D".
Nel dettaglio ho previsto che processing ogni tot tempo invii un codice di richiesta a cui risponde arduino riportando lo status di tutti i pin utilizzati.
All'accensione parte subito questo codice e arduino aggiorna l'interfaccia sul pc.
L'interfaccia l'ho creata semplicemente inserendo delle immagini jpg per lo sfondo e png per i vari strumenti e bottoni. Il formato pgn può gestire la trasparenza e cosi è comodo creare una barra rossa che sale nel termometro che ha la parte del mercurio trasparente.
Comunque andrò a vedere di che libreria si tratta.

Grande Ricdata:
con i tuoi consigli ed i link mi sono creato anch'io uno spazio su no-ip.com. E' stato facile e posso fare le prove senza disturbare nessuno.

nel programma processing ho poi solo sostituito String ip = "192.168.0.177 " con String ip = "xxxx_xxxx.no-ip.biz",
nel router ho abilitato le 2 porte UDP/TCP necessarie per la comunicazione tra arduino e processing,

risultato:
arduino riceve i dati da processing e si attiva :grin:, spedisce la risposta che però processing non riesce a ricevere :blush:.
ho dimenticato qualcosa?

Stando all'esempio di UPD, arduino risponde al ip e alla porta da cui riceve ossia Udp.remoteIP(), Udp.remotePort()
e in questo modo, (Testato) si dovrebbere gestire anche 2 utenti collegati nello stesso momento, è da verificare ma non sarà un problema

grazie ancora ad entrambi

ZioWally:
nel router ho abilitato le 2 porte UDP/TCP necessarie per la comunicazione tra arduino e processing,

risultato:
arduino riceve i dati da processing e si attiva :grin:, spedisce la risposta che però processing non riesce a ricevere :blush:.
ho dimenticato qualcosa?

tu hai messo mano solo allo sketch processing ? anche nello sketch arduino credo ci siano i riferimenti a cui deve rispondere o no ?
Nel codice arduino forse c'e' un riferimento all'IP del pc in locale che usavi, e che invece ora non c'e' piu' perche' arduino dovra' raggiungere a sua volta processing a casa dell'utente.
Se non e' questo allora sara' qualche blocco interno al router, forse devi fare qualche ulteriore port forward

nel programma processing ho poi solo sostituito String ip = "192.168.0.177 " con String ip = "xxxx_xxxx.no-ip.biz",

Non potendo vedere gli sketch bisogna andare per tentativi: hai notato che in quel esempio processing riceve la risposta nel monitor seriale e non nell'interfaccia (se non l'hai modificato)?

Ma lui dice che in locale funziona tutto, solo accedendo da internet non funziona.

hai ragione Testato.
allora forse è qui:

nel router ho abilitato le 2 porte UDP/TCP necessarie per la comunicazione tra arduino e processing

come hai impostato di preciso il port forward? TCP non credo ti serva (TCP e UDP sono due protocolli diversi), devi instradare la porta 8888 UDP in ingresso/uscita verso l'IP locale di arduino.

ciao ragazzi,
scusate ma non potevo rispondervi prima.
Vi confermo che il programma funziona perfettamente quando è all'interno della mia rete.
Inserendo in processing l'indirizzo URL al posto del IP numerico, arduino recepisce tutto bene, è poi la risposta di feeback che non arriva.

Per cercare di isolare il problema sono ripartito dall'esempio UDPSendReceiveStrings a cui ho fatto le modifiche per avere accesso da remoto cambiando solo le porte in uso e inserendo l'URL al posto dell'IP.
Nella sua semplicità tutto funziona ed è molto veloce. Il monitor seriale di arduino mi dice che riceve il pacchetto dall' IP corretto ma da una porta 55002 o 55008, mentre io avevo solo settato le porte 6100 e 6200 (scelte a caso). Comunque funziona!
Adesso però devo capire perchè nel mio programmino processing non fa lo stesso.

un piccolo successo c'è stato:
la tramissione di pacchetti UDP via processing accetta anche indirizzi mnemonici e non solo ip numerici
e questo non lo avevo trovato scritto da nessuna parte.
Grazie a tutti e 2!

Ora è solo un problema di programmazione che spero di risolvere presto, naturalmente vi terrò al corrente e se volete vi farò avere la versione definitiva.
Come sempre altri suggerimenti sono molto ben graditi... fin qui è stato un vero piacere..

Nell'ottica dell'open source, sarebbe carino se tu potessi linkare gli sketch Arduino e processing sia per dare modo ad altri utenti di imparare sia per dare ai piú esperti la possibilitá di contribuire attivamente al progetto.
Io sono anche radioamatore e se potessi esserti utile lo farei volentieri.

Alberto

Una cosa interessante da aggiungere, considerando che si tratta di monitorare e controllare una stazione remota, é la monitorizzazione delle temperature degli apparati.

Potresti mettere dei sensori ad uscita analogica o onewire posizionati in prossimitá dei finali delle radio e visualizzare le temperature operative al fianco dello stato della radio; questo é utile per assicurare una corretta operativitá della stazione.
Puoi anche memorizzare i valori massimi raggiunti, cosa utile nel caso si utilizzino amplificatori.

Questi dati potrebbero essere visualizzati sia in locale (quando la stazione é utilizzata) che in remoto.

Ciao Alberto,

quello che dici è giusto e la mia intenzione è quella di mettere a disposizione ciò che nel mio piccolo riesco a fare.
Mi piaceva però riuscire a postare qualcosa che funzionasse e non limitarmi a dire "questo è lo sketch, aiutatemi vi prego...".
Devo molto a questo forum, mi ha risolto piccoli problemi che però a me sembravano enormi ed ho tuttora grande riconoscenza verso tutti.
Purtroppo però ho poco tempo per dedicarmi a questa mia passione e quindi sto ancora cercando di capire dove ho sbagliato.
Sarò felice di condividere un eventuale successo o per l'ennesima volta chiederò consiglio a chi mi ha già offerto tanta disponibilità.

Tornando al progetto, nel primo post avevo già anticipato che volevo leggere delle temperature, per il momento pensavo a degli LM35 ma anche onewire non sarebbe una brutta idea.
Ti anticipo che mi sono imbattuto in una rivista con un progettino per un dispositivo conta-fulmini, molto utile se sei in alto e pieno d'antenne, ci penseremo in un secondo tempo, dopo aver risolto il problema presente.
Non appena avrò delle nuove, vi farò sapere

Walter

Analogici o one wire vanno bene ugualmente; ci sono pro e contro per entrambe le soluzioni.

Quello che trovo interessante nel tuo progetto, a parte lo sketch di Arduino che potrei a grandi linee immaginare, é la parte relativa a Processing e la bella interfaccia grafica che hai realizzato. Non molti masticano Processing e credo sia quella la parte che dovresti maggiormente condividere.

Bella anche l'idea del contafulmini ma credo che tu la possa anche implementare attraverso alcuni siti meteo che hanno le mappe dei fulmini in tempo quesi reale.

voglio pure io il contafulmini :slight_smile:
mi dici rivista e numero ?

Sapevo che il contafulmini avrebbe risvegliato la curiosità! :smiley:
Purtroppo la rivista non è mia ma di un socio del club che me l'ha fatta vedere, io ho solo letto velocemente e sembra interessante:
consta in un'antenna autocostruita con un barattolo tipo pelati e una basetta con un pò di componenti. Ad ogni scarica in aria, la basetta genera un impulso.
Se poi ci metto un microfono che rileva il tuono, posso determinare a che distanza si trova il maltempo e nel caso, stacco tutte le attrezzature dal 220v e passo alle batterie tampone, ma anche questa è un'altra storia che voglio portare avanti in futuro...
purtroppo non ricordo che rivista fosse, ma dovrei riuscire a scoprirlo senza grossi problemi, appena so... condivido... e se qualcuno ci vuole già pensare a come interfacciare arduino... ben venga!
inoltre:
Ho risolto il problema della mancata risposta di arduino (con Ip numerico rispondeva, con URL no):
nell'esempio UDPSendReceive trovi scritto in setup():
Ethernet.begin(mac,ip);
mentre io nel mio programma tra le tante modifiche era rimasto:
Ethernet.begin(mac, ip, gateway, subnet);
se lasciate quest'ultima riga (anche se gateway e subnet sono corretti) il programma funziona solo con ip numerico, invece con la prima riga funziona con qualunque indirizzo. Mi sembra di ricordare di aver letto da qualche parte che per il protocollo UDP, gateway e subnet non sono usati.
Il problema quindi era su arduino e non su processing.
Adesso devo solo trovare il tempo di rendere presentabili gli sketch di arduino e processing e pubblicarli, dovete però aver pazienza.
Alberto: ti ringrazio, non mi considero bravo con processing, ho avuto la fortuna di trovare degli esempi che ho potuto adattare facilmente alle mie necessità, anche a te consiglio quello che ho scritto nei primi post, esiste un piccolo corso di processing che aiuta tanto.
...e se posso...aiuto anch'io... :grin:

ciao ragazzi, non dimentico le promesse fatte....

intanto mantengo la prima:
il progetto del contafulmini lo trovate su RadioKitElettronica del maggio 2013, scusate se vi ho fatto aspettare tanto per così poco, ma il proprietario della rivista non me la trovava più.
Se me la cercavo in internet facevo prima!
Non credo di poter postare altro in merito, visto che ci saranno dei diritti del editore e del proprietario da rispettare.

per la seconda promessa abbiate ancora un po' di pazienza.. :blush:..non ho più avuto il tempo materiale di verificare gli sketch e di renderli almeno presentabili.
Ho davanti una decina di giorni "de fuego" e poi credo di chiudere definitivamente con la pubblicazione dei file .pde e .ino sul forum :grin:

a presto

Grazie delle info ZioWally

Per colpa tua :slight_smile: sto mettendo troppa carne al fuoco ma il tempo a disposizione é limitato e quindi dedicarmi anche alla conoscenza di processing la vedo dura anche se mi incuriosisce molto.

Spero di vedere presto i tuoi sketch cosí da capirci un po' di piú.

P.S. la forma é l'ultima cosa, quello che conta é la sostanza