Progetto per controllo da remoto Canon con Arduino Yun

Salve a tutti :slight_smile:
mi sono iscritta da qualche giorno perchè ho iniziato ad utilizzare Arduino Yun per un progetto.

Ho un paio di difficoltà e mi trovo in balia di un paio di dubbi.
Ho scaricato l'IDE di Arduino, fatto la configurazione del mio Yun ed ho anche impostato Yun come AP.

L'idea generale è quella di controllare lo scatto via Wifi utilizzandone la funzione della mia reflex. Scaricata la libreria ptp ed importata nell'IDE, mi ritrovo a doverla utilizzare all'interno del mio sketch di prova (ho voluto iniziare con una prova di semplice scatto), ma non ho idea di come iniziare.
Ho già fatto in passato un progettino semplice con Yun, ma che non prevedeva nulla di tutto ciò.
Adesso, mi rendo conto di avere un po' le idee confuse, che non riescono a schiarire neanche i tanti tutorial in rete.

Sapreste darmi delle dritte riguardo l'utilizzo della ptp.h e come inviare i comandi dal pc ad Arduino e da Arduino alla fotocamera tramite wifi?

Grazie in anticipo e scusate se sono stata confusionaria!

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

Dopo che avrai fatto quanto suddetto ...
... ho qualche dubbio ... ::slight_smile:

Quella libreria (... e l'HW che vuoi connetterci) richiede una USB Host a cui collegare la fotocamera.

Il problema è che su Arduino Yún, la USB Host c'è, ma è collegata alla parte Linux e NON alla parte Arduino e quindi è inaccessibile da quest'ultimo ::slight_smile:

Lo schema a blocchi della Yún è difatti :


... e, come vedi, tutte le periferiche sono dalla parte Linux e quindi debbono essere controllate da programmi che girano in tale ambiente.

Guglielmo

... però ... ragionando, è vero anche che il micro dalla parte Arduino è un ATmega32U4 e quindi in grado di gestire la USB come la Leonardo ::slight_smile:

C'è da verificare se con la libreria ptp (... quale stai usando? Metti un link e dicci anche CHE fotocamera vuoi controllare) si riesce a parlare con la fotocamera tramite la USB lato Arduino :wink:

Guglielmo

gpb01:
Buonasera,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente...

Grazie, non trovavo la discussione e mi sono appena presentata :slight_smile:

gpb01:
Dopo che avrai fatto quanto suddetto ...
... ho qualche dubbio che ci riuscirai con la Yún ... ::slight_smile: ...

Anzitutto, grazie per la celerissima risposta. Già da questa ho capito da dove derivano tutte le mie confusioni :disappointed_relieved: dal momento che non riuscivo a fare nulla di quanto la mia testa pensava.
Dunque, adesso mi sorge una domanda: potrei allora riuscirci tramite USB? ::slight_smile:

Clary:
Dunque, adesso mi sorge una domanda: potrei allora riuscirci tramite USB? ::slight_smile:

... guarda il mio post successivo (#3) :wink:

Guglielmo

Mi sembra che la libreria PTP prevede un MAX3421E come USB HOST.
Ciao Uwe

gpb01:
... però ... ragionando, è vero anche che il micro dalla parte Arduino è un...

Dunque, la mia è una Canon EOS 70D.
Mentre, per quanto riguarda la libreria ptp, ho trovato due versioni raggiungibili dai seguenti link:

e, ovviamente, confusione anche qui su quale delle due utilizzare :cry:

La prima è una libreria per Arduino e richiede un ben specifico USB Host shield, la seconda .. non mi sembra nenache per Arduino ::slight_smile:

Guglielmo

gpb01:
La prima è una libreria per Arduino e richiede un ben specifico USB Host shield, la seconda .. non mi sembra nenache per Arduino ::slight_smile:

Guglielmo

Grazie, inizio ad avere maggiore chiarezza :slight_smile:

Giusto per completezza, per chi, trovandosi in questo topic, ne avesse bisogno ---> GitHub - felis/USB_Host_Shield_2.0: Revision 2.0 of USB Host Library for Arduino.

cosa avevo detto?

uwefed:
cosa avevo detto?

La conclusione a cui siamo arrivati noi :smiley: :slight_smile:

Ho nuovamente bisogno del vostro aiuto, ma siccome l'argomento è sempre uguale, non ho creato un nuovo topic.
Una volta seguita la guida di https://www.circuitsathome.com/camera-control/arduino-based-controller-for-canon-eos-cameras/ dopo aver risolto tutti i problemi con le librerie, dal momento che nelle librerie scaricate da GitHub vi era ancora inclusa "WProgram.h", carico lo sketch https://github.com/felis/Arduino_Camera_Control/blob/master/examples/EOSRemote/EOSRemote.pde ma mi genera molti più errori che, onestamente, non so come correggere.
Non so se potete essermi d'aiuto, allego qui:

PT1

Arduino:1.8.5 (Windows 10), Scheda:"Arduino Yún"

In file included from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:27:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptpcallback.h:31:8: error: redefinition of 'struct MultiValueBuffer'

 struct MultiValueBuffer

        ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/Usb.h:38:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:24,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/parsetools.h:23:8: error: previous definition of 'struct MultiValueBuffer'

 struct MultiValueBuffer {

        ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:27:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptpcallback.h:37:7: error: redefinition of 'class MultiByteValueParser'

 class MultiByteValueParser

       ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/Usb.h:38:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:24,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/parsetools.h:28:7: error: previous definition of 'class MultiByteValueParser'

 class MultiByteValueParser {

       ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:27:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptpcallback.h:57:7: error: redefinition of 'class ByteSkipper'

 class ByteSkipper

       ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/Usb.h:38:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:24,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/parsetools.h:50:7: error: previous definition of 'class ByteSkipper'

 class ByteSkipper {

       ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:27:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptpcallback.h:92:7: error: redefinition of 'class PTPListParser'

 class PTPListParser

       ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/Usb.h:38:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:24,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/parsetools.h:83:7: error: previous definition of 'class PTPListParser'

 class PTPListParser {

       ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/Usb.h:29:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:24,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

PT2

C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/message.h:44:23: error: expected unqualified-id before 'void'

 #define Notify(...) ((void)0)

                       ^

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptpdebug.h:24:6: note: in expansion of macro 'Notify'

 void Notify(const char* msg);

      ^

C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/message.h:44:23: error: expected ')' before 'void'

 #define Notify(...) ((void)0)

                       ^

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptpdebug.h:24:6: note: in expansion of macro 'Notify'

 void Notify(const char* msg);

      ^

C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/message.h:44:23: error: expected ')' before 'void'

 #define Notify(...) ((void)0)

                       ^

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptpdebug.h:24:6: note: in expansion of macro 'Notify'

 void Notify(const char* msg);

      ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:28:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptpdebug.h:43:6: error: redefinition of 'template<class T> void PrintHex2(Print*, T)'

 void PrintHex2(Print *prn, T val)

      ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/Usb.h:28:0,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:24,

                 from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\USB_Host_Shield_2.0-master/printhex.h:57:6: note: 'template<class T> void PrintHex2(Print*, T)' previously declared here

 void PrintHex2(Print *prn, T val) {

      ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21:0,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:85:9: error: 'EP_RECORD' does not name a type

         EP_RECORD                       epRecord[ 4 ];

         ^

In file included from C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/canoneos.h:21:0,

                 from sketch\eosconsole.h:8,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h: In member function 'void PTP::Setup()':

C:\Users\Clary\Documents\Arduino\libraries\Arduino_Camera_Control-master/ptp.h:123:31: error: 'MAX3421E' has no member named 'powerOn'

         void    Setup() { Max.powerOn(); };

                               ^

In file included from sketch\EOSConsole.cpp:1:0:

sketch\eosconsole.h: At global scope:

sketch\eosconsole.h:12:23: error: 'Q_USER_SIG' was not declared in this scope

     MENU_SELECT_SIG = Q_USER_SIG,

                       ^

sketch\eosconsole.h:12:23: note: suggested alternative:

In file included from C:\Users\Clary\Documents\Arduino\libraries\qep/qep_port.h:49:0,

                 from sketch\eosconsole.h:6,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\qep/qep.h:583:14: note:   'QP::Q_USER_SIG'

 enum_t const Q_USER_SIG = static_cast<enum_t>(4);

              ^

In file included from sketch\EOSConsole.cpp:1:0:

sketch\eosconsole.h:17:1: error: expected class-name before '{' token

 {

 ^

sketch\eosconsole.h:22:1: error: expected class-name before '{' token

 {

 ^

sketch\eosconsole.h:27:1: error: expected class-name before '{' token

 {

 ^

sketch\eosconsole.h:38:12: error: 'QState' does not name a type

     static QState Initial(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:39:12: error: 'QState' does not name a type

     static QState Inactive(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:40:12: error: 'QState' does not name a type

     static QState Active(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:41:12: error: 'QState' does not name a type

     static QState MainMenu(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:42:12: error: 'QState' does not name a type

     static QState ChangeSettingsMenu(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:43:12: error: 'QState' does not name a type

     static QState ChangeApertureMenu(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:44:12: error: 'QState' does not name a type

     static QState ChangeShutterSpeedMenu(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:45:12: error: 'QState' does not name a type

     static QState ChangeWBMenu(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:46:12: error: 'QState' does not name a type

     static QState ChangePStyleMenu(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:47:12: error: 'QState' does not name a type

     static QState ChangeExpCompMenu(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h:48:12: error: 'QState' does not name a type

     static QState ChangeIsoMenu(EOSConsole *me, QEvent const *e);

            ^

sketch\eosconsole.h: In constructor 'EOSConsole::EOSConsole()':

sketch\eosconsole.h:33:11: error: class 'EOSConsole' does not have any field named 'QHsm'

         : QHsm((QStateHandler)&EOSConsole::Initial)

           ^

sketch\eosconsole.h:33:17: error: 'QStateHandler' was not declared in this scope

         : QHsm((QStateHandler)&EOSConsole::Initial)

                 ^

sketch\eosconsole.h:33:17: note: suggested alternative:

In file included from C:\Users\Clary\Documents\Arduino\libraries\qep/qep_port.h:49:0,

                 from sketch\eosconsole.h:6,

                 from sketch\EOSConsole.cpp:1:

C:\Users\Clary\Documents\Arduino\libraries\qep/qep.h:226:18: note:   'QP::QStateHandler'

 typedef QState (*QStateHandler)(void * const me, QEvt const * const e);

                  ^

In file included from sketch\EOSConsole.cpp:1:0:

sketch\eosconsole.h:33:32: error: 'Initial' is not a member of 'EOSConsole'

         : QHsm((QStateHandler)&EOSConsole::Initial)

                                ^

sketch\EOSConsole.cpp: At global scope:

EOSConsole.cpp:47: error: 'QState' does not name a type

 QState EOSConsole::Initial(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:52: error: 'QState' does not name a type

 QState EOSConsole::Inactive(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:62: error: 'QState' does not name a type

 QState EOSConsole::Active(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:90: error: 'QState' does not name a type

 QState EOSConsole::MainMenu(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:119: error: 'QState' does not name a type

 QState EOSConsole::ChangeSettingsMenu(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:151: error: 'QState' does not name a type

 QState EOSConsole::ChangeApertureMenu(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:187: error: 'QState' does not name a type

 QState EOSConsole::ChangeShutterSpeedMenu(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:223: error: 'QState' does not name a type

 QState EOSConsole::ChangeWBMenu(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:259: error: 'QState' does not name a type

 QState EOSConsole::ChangeIsoMenu(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:295: error: 'QState' does not name a type

 QState EOSConsole::ChangePStyleMenu(EOSConsole *me, QEvent const *e) 

 ^

EOSConsole.cpp:331: error: 'QState' does not name a type

 QState EOSConsole::ChangeExpCompMenu(EOSConsole *me, QEvent const *e) 

 ^

exit status 1
'QState' does not name a type

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Mi sorge il dubbio che possa essere problema di incompatibilità tra le versioni degli sketch e dell'IDE da me installato.

Più che altro mi sembra ci siano conflitti tra le librerie stesse ...
... ci sono metodi dichiarati più volte in librerie differenti ! Sicura che siano tutte compatibili tra di loro? Specie la libreria USB_Host_Shield_2.0 con le altre ...

Guglielmo

gpb01:
Più che altro mi sembra ci siano conflitti tra le librerie stesse ...
... ci sono metodi dichiarati più volte in librerie differenti ! Sicura che siano tutte compatibili tra di loro? Specie la libreria USB_Host_Shield_2.0 con le altre ...

Guglielmo

Giusto ieri sera ho risolto il mio problema. Avevo fatto confusione con le librerie da utilizzare.
Ho resettato tutto e ricominciato da zero, aggiungendo all'IDE di Arduino solo le librerie PTP 2.0 e USB_Host_Shield_2.0. Pare che gli errori fossero dovuti proprio a questo.
Adesso, gli unici errori in fase di compilazione sono dovuti al fatto che la versione delle librerie è più vecchia dell'IDE scaricato da me, in quanto dalla versione 1.6 in poi, vengono accettate solo un tipo specifico di variabili costanti.
Mi spiego meglio. L'errore segnalato è del tipo:
variable 'lotOfMessages' must be const in order to be put into read-only section by means of '__attribute__((progmem))': const char* lotOfMessages[] PROGMEM = {
ed ho capito da qui ---> 1.6 Frequently Asked Questions · arduino/Arduino Wiki · GitHub (alla terza domanda) cosa fare.

Mi date conferma? :confused:

SI, già da un po' di versioni (mi pare dall'IDE 1.6.x) la sintassi di PROGMEM è cambiata e quindi, vecchie librerie che usavano la vecchia sintassi, danno errore.

Guglielmo

gpb01:
SI, già da un po' di versioni (mi pare dall'IDE 1.6.x) la sintassi di PROGMEM è cambiata e quindi, vecchie librerie che usavano la vecchia sintassi, danno errore.

Guglielmo

E' possibile risolvere questo problema come viene illustrato in 1.6 Frequently Asked Questions · arduino/Arduino Wiki · GitHub? Oppure devo cambiare progetto? ;D ;D ;D

Si, certo, devi solo correggere la sintassi ...

Guglielmo