venerdì 30 gennaio 2015

Rocrail e Raspberry Pi - Script per display

Nel precedente articolo abbiamo impostato le funzionalità di base per far funzionare un display LCD con la Raspberry Pi. A questo punto abbiamo bisogno di un "qualcosa" che ottenga informazioni da Rocrail e lo visualizzi correttamente sul display, Inoltre dovrà monitorare lo stato dei pulsanti ed alla pressione di uno di essi impostare le azioni di conseguenza.
Naturalmente lo script è scritto in Phyton, linguaggio multipiattaforma e di facile apprendimento. A questo punto è sufficiente scaricare lo script e copiarlo in una directory a scelta, io consiglio 


\home\pi\scripts

Di seguito il link per scaricare lo script. Il listato è liberamente scaricabile e modificabile a patto di riportare sempre il banner iniziale e di riportare sempre la fonte se linkato in altri siti WEB. Nella stessa cartella dello script andranno copiati anche due moduli delle librerie Adafruit scaricati precedentemente e pi esattamente i due moduli con i seguenti nomi

Adafruit_CharLCDPlate.py
Adafruit_I2C.py

Il codice sorgente è disponibile su GitHub

RocPiLCD    Repository completo

rocpilcd.py   Sorgente Python

rocpilcd        Script per init.d

All'interno del repository di GitHub troverete anche numerosi script per la gestione della RocPi

Una volta scaricato il tutto copiate lo script rocpilcd in /etc/init.d e aggiornate gli script di avvio con

sudo chmod 755 /etc/init.d/roccontrol
sudo update-rc.d rocpilcdl defaults

Lo script verrà avviato in automatico al boot del sistema operativo. 


CONSIDERAZIONI SULLO SCRIPT


Il programma Python è in grado di leggere lo stato di tensione ai binari e stato della modalità automatica, ovviamente è possibile integrare queste informazioni con le innumerevoli messe a disposizione del server mediante lo Scripting RCP (Rocrail Client Protocol), per maggiori informazioni fare riferimento al Wrapper, contenente tutti i riferimenti sl protocollo. 
Sulla shield sono presenti anche 5 pulsanti, attualmente vengono utilizzati i primi 3 per ,nell'ordine, abilitare o disabilitare la tensione ai binari, abilitare o disabilitare la modalità automatica, Freno di emergenza (EBREAK).
Ovviamente questa è una base di partenza e il tutto può essere ampliato a piacimento. Di seguito il codice sorgente ed un breve video sul risultato finale
Buon divertimento!

4 commenti:

  1. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  2. Stefano buonasera,
    premetto che non conosco ancora bene phyton e sto provando ad interpretare lo script.
    Alla riga 131:

    r_request = s.recv(12288)

    il valore 12288 è la lunghezza del pacchetto atteso ?

    saluti
    Antonino

    RispondiElimina
  3. Ciao Antonino bentrovato.
    Non propriamente, E' la dimensione del buffer di ricezione, in questo caso circa 12K (1024 x 12), sufficiente per lo scopo, ma potrebbe essere implementato a piacere.

    RispondiElimina
  4. Buongiorno Stefano,
    vorrei realizzare anche io il pannello che descrivi e per questo sto sperimentando gli script per l'on/off. Ho una configurazione con RaspiPI3 dove gira il server RR che controlla un semplice ovale in cui ci sono quattro blocchi, ciascuno con un sensore di assorbimento. La centrale per il controllo della trazione è il lokmaus con la GenLi di Paco mentre per il feedback uso Arduino che emula la centrale Maerklin CS2. Tutto funziona perfettamente, ho anche sue segnali che vengono pilotato in modo corretto quando uso la modalità automatica.

    Quello che noto è che a loco ferma gli script on/off funzionano senza problemi, ma se la loco gira e c' è un notevole traffico di messaggi (1-2 al secondo quando si passa da un blocco all'altro) lo script di power-off viene spesso ignorato. E' necessario lanciarlo più volte per avere effetto.

    Hai riscontrato un problema simile ?

    saluti,
    Antonino

    RispondiElimina