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!

giovedì 29 gennaio 2015

Rocrail e Raspberry PI - Display per il funzionamento

Ora che abbiamo impostato il server Rocrail sulla nostra Raspberry Pi come facciamo a sapere lo stato del server non avendo nessun monitor collegato?

La soluzione potrebbe essere utilizzare una delle numerose shield da collegare alla porta GPIO della RPi. Un valido esempio potrebbe essere quello progettato e commercializzato dalla ditta Futura Elettronica, acquistabile a questa pagina ad un prezzo davvero contenuto. Alla stessa pagina ' disponibile il manuale come download, nel quale è disponibile comunque lo schema elettrico della shield per chi volesse realizzarlo in proprio. Il manuale è scaricabile a questo link . In foto una shield compatibile per la la Rpi.


Shield LCD per raspberry Pi


Una volta installata fisicamente la shield occorre effettuare una serie di operazione software per rendere disponibili tutte le funzionalità.
Nativamente sulla distro Raspbian la comunicazione I2c, necessaria per dialogare con il display, è disabilitata di default, quindi la prima operazione da compiere è la sua abilitazione.
Innanzitutto aggiorniamo il repository

sudo apt-get update

Aggiorniamo anche tutti i pacchetti installati

sudo apt-get upgrade

Togliere il modulo I2c dalla blacklist commentando la riga contenente i2c-bcm2708 anteponendo il simbolo di cancelletto #. 

sudo nano /etc/modprobe.d/raspi-blacklist.conf

Salvare la modifica con CTRL+O e una volta confermato il nome dell file uscire da nano con CTRL+O.
A questo punto riavviare per "liberare" i moduli precedentemente abilitati.

A questo punto verifichiame se le funzionalità I2C possono essere attivate sulla nostra RocPi.Per caricare manualmente il modulo I2C digitare:


modprobe i2c-dev


Per verificare se il modulo è stato caricato correttamente 


lsmod


Alla fine dell'elenco dovrebbe apparire il modulo i2c_bcm2708
Sicuri che le funzionalità possono essere caricate, scarichiamo ora il modulo dalla memoria con il comando


modprobe -r i2c-dev


Ovviamente risulta scomodo ogni volta caricare manualmente il modulo ad ogni avvio.Per caricare in automatico il modulo al boot modificare l'apposito file di configurazione.


sudo nano /etc/modules


ed aggiungere una nuova riga al file che contiene i2c-dev, notare che non è necessario il riavvio per caricare il modulo. Salvare e uscire da nano come al solito.

Installiamo ora i tools I2c necessari per il buon funzionamento del sottosistema hardware


apt-get install i2c-tools


aggiunger il proprio utente al gruppo I2C


adduser pi i2c


Possiamo a questo punto verificare se a livello hardware la nostra shield LCD viene vista dalla RocPi.
lanciamo il comando

i2cdetect -y 1 per le RasPi rev 2
i2cdetect -y 0 per le RasPi rev 1

Dovremmo vedere un output simile a questo, dove viene visualizzato l'indirizzo della periferica I2C.



Le librerie Python di supporto 


Il display LCD verrà pilotato da un apposito script scritto in Python. Per il buon funzionamento del display è necessario scaricare le librerie di supporto sviluppate da Adafruit e messe a dispoosizione per il libero download da GitHub. Grazie al software Git preinstallato nella RocPI l'operazione di download risulta veramente semplice. Innanzitutto creare cartella di supporto LCD

mkdir /home/pi/LCD

Scaricare le librerie di supporto Adafruit in Phyton con esempi di programmazione.

git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

Una volta terminata la procedura di download avremo nella cartella precedentemente creata la copia esatta del repository di Git sulla nostra RocpI

Installiamo ora le librerie per gestione del protocollo I2C con linguaggio Phyton


sudo apt-get install python-smbus


Le operazioni sono terminate! se vogliamo provare il display possiamo lanciare uno script di prova.


cd /home/pi/LCD/Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCDPlate


python LCDtest.py 


Attenzione a scrivere correttamente le lettere maiuscole e minuscole. Buon divertimento!



giovedì 18 dicembre 2014

Rocrail e Raspberry Pi - Configuriamo Rocrail Server

Ci siamo lasciati con una Raspberry Pi pronta all'utilizzo con Raspbian e Rocrail Server installati.

La directory di installazione di Rocrail è /opt/rocrail. Alla prima installazione noterete che non è presente nessun plan.xml e nemmeno il file rocrail.ini. Questi file vengono creati in automatico all'avvio se non vengono trovati, quindi lanciamo il server per farglieli creare:


cd /opt/rocrail 
sudo ./rocrail

Dovrebbe apparire l'output standard (notate anche il numero di versione e la data di build). Per terminare il server premere CTRL+C. Ricontrollate la directory e troverete i file mancanti.
Come ogni server nel mondo Linux è preferibile lanciare l'applicazione come demone ovvero come esecuzione on background vediamo come procedere:

Innanzitutto copiamo il demone nella cartella di systema di Linux (attenzione alle maiuscole e minuscole)

sudo cp /home/pi/rrsources/sources/rocrail/package/rocraild /etc/init.d/
sudo cp /home/pi/rrsources/sources/rocrail/package/rocraild.sh /opt/rocrail/

Quindi rendiamo eseguibili i file sopra citati ed aggiorniamo la lista dei demoni da avviare al boot.


sudo su
chmod 755 /etc/init.d/rocraild
chmod 755 /opt/rocrail/rocraild.sh
update-rc.d rocraild defaults

Se abbiamo già una cartella con il file di progetto già pronto possiamo impostare la directory di lavoro nel file "rocraild" appena copiato, basta modificare la variabile WORKING_DIR all'interno del file stesso. Il demone può essere avviato con il comando

sudo service rocraild start

Sostituire start con stop per fermare il demone. A questo punto avete il vostro sistema operativo. Per le configurazioni del server potrete utilizzare Rocview in esecuzione su un altro PC per accedere a in modalità grafica al file di configurazione.

E' tutto!

Rocrail e RaspberryPi - Installiamo Rocrail Server

Ora che abbiamo il Nostro RaspberryPi funzionante (vedi puntata precedente) possiamo installare finalmente Rocrail.
Innanzitutto prepariamo l'ambiente per il download

cd /home/pi  
mkdir rrsources

Questi comandi creeranno le directory per i download dei vari componenti. Questi comandi sono riferiti all'utente di default pi, se volete potete crearne tranquillamente un'altro.

INSTALLAZIONE wXWidgets

La procedura di prevede anche l'installazione dei vxWidgets per far funzionare anche Rocview. Il mio consiglio è di saltare questo passaggio in quanto, dopo numerose prove, Rocview si è dimostrato di fatto inutilizzabile sul Raspberry a causa di una viscerale lentezza di tutto il sistema. Quindi, in virtù del fatto che l'obbiettivo è l'installazione di Rocrail Server, ci risparmieremo un paio d'ore di compliazione di questo componente.

ROCRAIL

Al momento della scrittura di questo articolo, gli sviluppatori di Rocrail prevedono due modi per installare il server sulla piattaforma Raspberry.
La prima consiste nello scaricare i sorgenti da GitHub mediante il tool Git, per procedere poi con l'installazione, oppure mediante i pacchetti precopilati (i famosi Nightly Builds) disponibili QUI.
Il vantaggio del primo metodo è quello di avere sempre l'ultima versione disponibile pronta da compilare, il secondo ovviamente la semplicità di installazione ma bisogna accontentarsi dell'ultima release disponibile.
Noi prenderemo la prima strada in quanto preferisco avere sempre tutto aggiornato.

Il primo passo è quello di installare Git e le librerie USB per permettere di riconoscere eventuale hardware aggiuntivo. In funzione della distribuzione che utilizzate il pachetto Git potrebbe essere già installato.

sudo apt-get install git
sudo apt-get install libusb-1.0.0-dev

Spostiamoci della directory per i sorgenti di Rocrail precedentemente creata 


cd /home/pi/rrsources

a questo punto siamo pronti per effettuare un clone del repository di Rocrail sulla nostra SDcard.

git clone --depth 1 https://github.com/rocrail/Rocrail.git sources

la procedura creerà una sottodir di nome 'sources' riempiendola con il contenuto del repository
Siamo pronti per lanciare la compilazione. Nel nostro caso vogliamo installare solo il server escludendo Rocview, quindi lanciamo i comandi:

cd ./sources 
sudo make server fromtar 

Terminate le operazione di making (potete tranquillamente andare a fare qualcosa d'altro, la compilazione richiederà parecchi minuti) installiamo il prodotto della compilazione con

sudo make install

A questo punto Rocrail server è correttamente installato. Per effettuare un aggiornamento quando disponibili nuove build sarà necessario lanciare il comando

cd home/pi/rocrail/Rocrail git pull

Questo scaricherà i sorgenti aggiornati dal repository alla direcotry locale, quindi con

sudo make server

verrà lanciata la compilazione della nuova versione, Quindi con

sudo make install

si procederà all'aggiornamento fisico degli eseguibili.
Per questa puntata è tutto, prossimamente vedremo come configurare Rocrail per il primo utilizzo e soprattutto come eseguire il server come demone.

lunedì 15 dicembre 2014

Rocrail e Raspberry PI - Installazione Raspbian

Come promesso nel precedente post vediamo come installare e configurare RocRail su un sistema basato su Raspberry PI. Questa guida fa riferimento all'ottimo Walktrough scritto da Manolo Serrano reperibile a http://tren.enmicasa.net

Innanzitutto occorre installare il vero sistema operativo sul nostro RasPI, quindi procuriamoci la Distro Raspbian scaricabile dal sito di Raspberry PI da questa pagina. Il download è "importante" (circa 800 MB) quindi viene offerta la possibilità di scaricare il file sia in formato .zip che nel più performante formato torrent.
Salviamo il file e scompattiamo l'archivio in una cartella a nostro piacimento.

A questo punto procuriamoci un scheda SD almeno da 4 GB. Al vero la Distro Raspbian necessita di 2 GB ma consiglio di avere un certo margine di sicurezza per installare eventuali altri software.
Ovviamente se il vostro PC non lo integra è necessario un lettore per schede SD esterno. Molti consigliano sui sistemi RasPI di utilizzare SDHC classe 10 per velocizzare gli accessi in lettura e scrittura, ma per questo uso può andare bene anche una qualunque scheda SD.

Una volta scaricata la distro Raspbian inseriamo la SD card nel lettore, quindi scarichiamo ed installiamo Win32DiskImager. Una volta terminato il processo di installazione lanciamo il programma e selezioniamo l'immagine della distro Raspbian precedentemente scaricata, selezioniamo la lettera di dispositivo rappresentante la SD e clicchiamo su scrivi. Il processo potrebbe durare anche qualche decina di minuti.



Al termine dell'operazione rimuoviamo la SD dal lettore ed inseriamola nel RasPI e godiamoci la fase di boot al termine della quale viene lanciato raspi-config, un tool che permette di configurare la nostra distribuzione.

Naturlamente se non disponiamo di monitor e tastiera da collegare al Raspberry possiamo utilizzare Putty (www.putty.com) o un qualsiasi emulatore di terminale per collegarci via SSH al nostro Raspberry Pi.

Le informazioni di login di default sono

user: pi
password: raspberry

utilizziamole per effettuare il login e come prima operazione lanciamo raspi-config con il comando

sudo raspi-config


Lanciamo la prima voce per estendere la dimensione della partizione di root a tutto lo spazio disponibile nella nostra SD.
Opzionalmente è anche possibile cambiare la password dell'utente pi
Consiglio anche di effettuare il boot non in desktop ma rimanere nel terminale. (opzione4).
Con l'opzione 5 infine settiamo su italiano le opzioni internazionali

Terminate le operazioni cliccando su Finish verrà effettuato un reboot.

CAMBIAMO L'INDIRIZZO IP

Risulta conveniente cambiare anche l'indirizzo IP della nostra Box da dinamico con DHCP a statico.

per fare questo effettuare prima una copia del file delle interfacce

sudo cp /etc/network/interfaces /etc/network/interfaces.sav

Editiamo il file


sudo nano /etc/network/interfaces

Il file aperto dovrebbe avere una riga simile a questa

iface eth0 inet dhcp

Aggiungere il simbolo di cancelletto all'inizio per disabilitarla

#iface eth0 inet dhcp

Modificare per aggiungere un IP fisso

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
#your static IP
address 192.168.1.118
#your gateway IP
gateway 192.168.1.1
netmask 255.255.255.0
#your network address "family"
network 192.168.1.0

broadcast 192.168.1.255

Editare il file degli hosts DNS


sudo nano /etc/resolv.conf

Aggiungere gli eventuali infirizzi IP dei DNS se non corrispondono con il default gateway

Arrivati a questo punto dopo un reboot avrete il vostro Raspberry pienamente funzionante e pronto a ricevere Rocrail.