venerdì 17 ottobre 2014

Arduino e SRCP server - Installazione e configurazione

Nel precedente articolo avevo promesso una guida per la configurazione di un semplice SRCP server mediante Arduino.
Diamo ormai per scontato di avere attivo e configurato sul nostro PC l'ambiente di sviluppo di Arduino (nel caso si possono avere maggiori informazioni QUI.)
Il passo successivo è ottenere una copia del codice sorgente per Arduino, quindi rechiamoci sul repository di microSRCP ospitato nei server di GitHub. Per chi non è pratico di repository e Git, a questo link è possibile avere una copia di tutto il necessario compressa in un file zip.
Estraiamo il file ottenuto in una cartella temporanea. A questo punto dobbiamo copiare il contenuto della cartella


microSRCP-0.92\microSRCP\arduino\libraries

nella cartella libraries dell'IDE di Aduino

A questo punto occore aprire nell'IDE il file 

microSRCP-0.92\microSRCP\arduino\microSRCPServer\microSRCPServer.ino


Di default il server è configurato per restar in ascolto sul canale seriale, per modificarlo in modo da utilizzare una rete Ethernet modificare la riga 34

#define SRCP_PROTOCOL SRCP_SERIAL

editarla in

#define SRCP_PROTOCOL SRCP_ETHERNET

inoltre l'autore ha inserito un ulteriore controllo per no configurare nulla se si sceglie il server ethenet in quanto ogni tipo di shield inserita potrebbe interferire co la Ethernet Shield. Eliminare quindi le righe 127 e 170 per cancellare IF condizionale. 

Il passo successivo è configurare la scheda come una scheda di tipo FB, per fare questo editare la riga 46

#define BOARD  BOARD_STANDARD

editarla in 

#define BOARD BOARD_FB

Configuriamo anche l'indirizzo IPdel server editando questa line di codice inserendo un indirizzo adatto alla nostra rete 


A questo punto occorre configurare gli ingressi di Arduino da utilizzare come ingressi di feedback. 

localizzate il seguente codice all'interno del sorgente:


Notate che vengono create due istanze di Feedback, a prima considera gli ingressi da D2 a D9 ed il primo indirizzo di feedback esposto avrà' indirizzo 1 lato Rocrail, mentre la seconda considera gli ingressi da 10 a 17 e il primo degli 8 ingressi avrà indirizzo 9. Ricordo che per ingresso 14 si intende il primo ingresso analogico avendo la Board UNO solo 13 ingressi digitali.

A questo punto possiamo compilare il sorgente e caricarlo in Arduino, quindi connettiamo la Ethernet Shield alla nostra rete.

Per configurare Rocrail occorre aggiungere nelle proprietà di Rocrail una nuova centrale di tipo SRCP con ID univoco configurata come segue, ovviamente inserite l'indirizzo IP del vostri microSRCP


Configuriamo quindi i sensori ricordandoci di assegnare come interfaccia quella del server SRCP e gli indirizzi che avete inserito nel sorgente.


A questo punto riavviate il server Rocrail, tenete d'occhio la finestra di  output e noterete una serie di informazioni relative all'handshaking e alla connessione al server SRCP, alla fine dei quali avrete il vostro sistema di feedback collegato a Rocrail!

Alla prossima!






18 commenti:

  1. Ciao, scusa se ti disturbo ma ho provato a seguire tutte le tue istruzione ma ho sempre un errore nella verifica dello sketch, non sono espertissimo di arduino ma non capisco perchè non vada, ma vorrei tanto riuscire......
    se non ti scoccia mi basterebbe una dritta
    l'errore è questo
    In file included from /home/antonio/sketchbook/libraries/lan/EthernetSRCPServer.h:25:0,
    from microSRCPServer.ino:73:
    /home/antonio/sketchbook/libraries/lan/EthernetSocket.h:34:20: fatal error: socket.h: File o directory non esistente
    #include
    ^
    compilation terminated.

    grazie e ciao Antonio

    RispondiElimina
  2. Risoltoooooo!!!!!!
    funziona alla grande. ottima guida
    grazie Antonio

    RispondiElimina
    Risposte
    1. Ci dici come l'hai risolto? Io sono ancora bloccato da giorni

      Grazie, Antonello

      Elimina
  3. Bene, sono contento ti sia stata di aiuto!

    RispondiElimina
  4. Ciao Antonello, dove sei rimasto bloccato? Se posso ti aiuto volentieri.

    RispondiElimina
  5. Grazie per la collaborazione.

    Quale libreria manca?

    Antonello

    Arduino:1.7.11 (Windows 8.1), Scheda:"Arduino Uno"

    microSRCPServerV2.ino: In function 'void setup()':

    microSRCPServerV2.ino:112:14: error: 'BEGIN' was not declared in this scope

    microSRCPServerV2.ino:113:23: error: 'INFO' was not declared in this scope

    microSRCPServerV2.ino:113:23: note: suggested alternative:

    In file included from microSRCPServerV2.ino:48:0:

    C:\Users\Master\Downloads\arduino-1.7.11\arduino-1.7.11\libraries\srcp/SRCPCommand.h:63:40: note: 'INFO'

    enum { UNDEFINED, HANDSHAKE, COMMAND, INFO };

    ^

    microSRCPServerV2.ino:127:15: error: 'INFO_DEVICES' was not declared in this scope

    Errore durante la compilazione

    RispondiElimina
  6. Per ora ho risolto commentando tutte le righe BEGIN, INFO etc e non caricando util.h.

    Funziona, ma ho la curiosita' di capire a che cosa rinuncio

    Antonello

    RispondiElimina
    Risposte
    1. Ciao Antonello scusa l'assenza ma sono stato via per i ponte..
      Allora la libreria util.h si trova nella cartella di installazione di Arduino, più precisamente in libraries\Ethernet\src\utility. ed è parte della libreria ethernet. Verifica che sia presente.
      Una domanda, ma il sorgente si chiama microSRCPServerV2.ino in quanto rinominato da te?
      Ti faccio questa domanda perchè ho provato ora a scaricare il repository e non è quello il nome corretto del sorgente. Stai utilizzando la versione microSRCP 0.92?
      Ho provato ora la compilazione con l'ide 1.6.9 e funziona correttamente. Al più presto Noto che utilizzi una versione Hourly Builds dell'IDE, te lo sconsiglio, utilizza sempre una versione stable, ad oggi l'ultima disponibile è la 1.6.12.

      Ciao e fammi sapere.

      Elimina
    2. Ad occhio quelle funzioni sono relative al LOGGER, quindi ti funziona tutto ma non registri nel log tramite porta seriale. Dovresti cercare nella tua directory Lib, (attenzione, la direcory la trovi oltre che nel percorso di installazione dell'IDE anche in Documenti\Arduino\Lib) la cartella log, dovrebbe contenere due file, logger.h e logger.cpp. Se non li trovi contattami che te li giro.

      Elimina
    3. >Una domanda, ma il sorgente si chiama microSRCPServerV2.ino in quanto rinominato da te?

      Il file con quel nome e' stato scaricato da

      https://github.com/mc-b/microSRCP/tree/master/microSRCP

      Ho seguito i tuoi consigli su util.h, ma continua a dirmi che non esiste

      Grazie, Antonello

      Elimina
    4. Ciao Antonello, forse ho individuato il tuo problema...
      Al rigo 60 del file MicroSRCPServerV2.ino puoi tranquillamente commentare l'include alla utils.h, la quale viene comunque correttamente richiamata da altri Header.
      Nella directory delle librerie user (Documenti\Arduino\Libraries) troverai una cartella lan ed al suo interno una cartella utility, sposta il suo contenuto direttamente nella cartella lan. Prova a ricompilare, così a me ha funzionato

      Elimina
  7. Oggi ho ripreso in mano il circuito e collegato tutti i sensori. Tutto funziona come presvisto eccettuati i sensori su D12, d10, D9, D4 e D2.
    Ho provato ad usare schede Arduino diverse, ma tutte presentano lo stesso problema.

    Sto usando un DCCDuino.

    Antonello

    RispondiElimina
  8. A proposito, grazie Stefano per le dritte; spero di non averti fatto perdere troppo tempo.

    Antonello

    RispondiElimina
  9. Ho trovato che i pin 10,11,12 e 13 sono riservati per la ethernet shield quindi la prima parte della risposta me la sono data da solo. Ora procedo per gli altri piedini.

    Antonello

    RispondiElimina
  10. Ciao,
    Sarebbe interessante provare il server con Arduino+ESP8266 invece che con lo shield ethernet.
    ;)
    Saluti
    Antonino

    RispondiElimina
  11. Ciao Antonino, per quello che chiedi sarebbe ideale una scheda Fishino. A occhio non dovrebbero esserci contro indicazioni si tratta solo di sostituire qualche libreria e ritoccare il codice.

    RispondiElimina
  12. Ciao a tutti,
    ritorno su questo argomento perchè ho realizzato una soluzione (partendo da un'idea trovata in rete) che fa le stesse cose (modulo feedback) ma senza usare shield esterni.
    In pratica si programma arduino con un codice molto molto semplice, che non richiede alcuna libreria esterna, che implementa il protocollo della centrale Maerklin CS2. In questo modo RocRail riceve gli input provenienti dalla lettura dei pin di Arduino, alla fine si hanno a disposizione 16 ingressi.
    Sono andato avanti aggiungendo la possibilità di connetere schede satellite tramite il bus I2C in modo da espandere il numero di feedback da controllare.
    Saluti,
    Antonino

    RispondiElimina