Go Down

Topic: Arduino comandato da Processing via web tramite pc o smartphone Android (Read 30911 times) previous topic - next topic

ZioWally

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! :smiley-mr-green:

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

busco



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.



ricdata

Quote
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.logicaprogrammabile.it/aggiornare-host-no-ip-tramite-arduino-ethernet/
http://www.instructables.com/id/Arduino-DDNS-Dynamic-DNS-by-Open-Electronicsorg/step3/The-Arduino-sketch/
Il tempo è denaro, ma il denaro non è tempo.

ZioWally

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! :smiley-mr-green:

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

ricdata

Quote
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
Il tempo è denaro, ma il denaro non è tempo.

testato

#5
Sep 13, 2013, 08:21 pm Last Edit: Sep 13, 2013, 09:21 pm by Testato Reason: 1
intervento su vari punti:  :)

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
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

ZioWally

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 :smiley-mr-green:, spedisce la risposta che però processing non riesce a ricevere :smiley-red:.
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

testato



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 :smiley-mr-green:, spedisce la risposta che però processing non riesce a ricevere :smiley-red:.
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
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

ricdata

Quote
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)?
Il tempo è denaro, ma il denaro non è tempo.

testato

Ma lui dice che in locale funziona tutto, solo accedendo da internet non funziona.
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

ricdata

hai ragione Testato.
allora forse è qui:
Quote
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.
Il tempo è denaro, ma il denaro non è tempo.

ZioWally

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

Bertu65

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

Bertu65

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.


ZioWally

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

Go Up