Archivi categoria: Raspberry PI

Raspberry Terminal Server

Recentemente ho acquistato un giocattolino che mi servirà per studiare: si tratta di router Huawei modello AR1220VW. Una bella macchinina, nulla da dire, che consente di implementare tantissime funzioni.

Il problema è sorto quando ho cercato di condividere l’accesso alla macchina, per consentire ad altre persone di potersi esercitare con quell’hardware. La soluzione dell’accesso via telnet o ssh non è praticabile, in quanto mi costringerebbe a lasciare una interfaccia sempre configurata. Pertanto è necessario accedere via CONSOLE, utilizzando un terminal server.

Come fare per esportare via web una interfaccia seriale in modo BIDIREZIONALE? Viene in aiuto RFC2217 che tuttavia non è supportato da tutti i terminali (in realtà è supportato solo dal buon vecchio KERMIT). Allora occorre inventarsi qualche cosa di diverso: la risposta è arrivata dal programma “shellinabox“. Si tratta di un piccolo applicativo linux che esporta su un socket tutto lo I/O di un programma in esecuzione. Qualche informazione si trova anche QUI.

Io lo ho configurato in questo modo: shellinaboxd -p 4200 -s ‘/:root:root:/:minicom ‘ &

Una volta eseguita questa operazione… fine del gioco. E’ possible collegarsi con il browser alla server ed interagire con il dispositivo seriale.

terminal_server_01

Fichissimo, soprattutto se si pensa che il tutto gira su una raspberry pi 2 e la connessione con il router è effettuata con un adattatore USB-Seriale. Mettendo un Hub USB e altri adattatori è possibile creare una stazione multi terminale in poche, semplici mosse!

Raspberry PI e i2c

Per acquisire dei dati meteo, ho realizzato una piccola schedina figlia che si basa sue due sensori: SHT21 della Sensirion e MPL3115 della Freescale.

Nell’interfacciamento del primo sensore non ci sono state particolari difficoltà, anche per il fatto che il codice è piuttosto diffuso e ben funzionante, sia in pyhton che in c.

Qualche grattacapo in più è arrivato dal dispositivo Freescale. In effetti il sisitema riconosce il dispositivo ma non riesce ad accedere ai dati. Pertanto anche se il comando i2cdetect -y 1 consente di visualizzare correttamente il dispositivo, una successiva lettura dei dati fallisce. Leggendo il datasheet è possibile notare come lo scambio dati richieda una condizione di “repeated start” per l’accesso al bus I2C. Peccato che questo non sia supportato dalla corrente implementazione del Kernel su Raspberry Pi:

As part of guaranteeing reliability, mostly in a multi-master setup, SMBus requires the use of I2C’s repeated starts for read operations. The I2C master driver for Linux on the Raspberry Pi does not support this

Fantastico. Fortunatamente Jovian Jackowski ha sviluppato un hack per questo problema. informazioni possono essere reperite qui e qui. Il codice per il dispositivo mpl3115 lo si può trovare qui e restituisce questo output:
root@raspbeacon:~/weather/mpl3115# ./mpl3115_comma
WhoAmI:c4
Status Register: 0
---- PRESSURE FUNCTION ----
Press RT: M:62 C:39 L:30
Press Integer Complete: 188e4 100580
Complete: 1005.00
Final Value 1005.75
---- END PRESSURE ----
---- TEMPERATURE FUNCTION ----
Temp RT: M:15 L:70
Temp Decimal Integer Part: 21
Tcomplete 21.4375
---- END TEMPERATURE ----
---- ALTITUDE FUNCTION ----
Alt RT: M:0 C:3f L:80
alt  Integer Complete: 3f 63
Complete: 63.00
Final Value 63.50
---- END ALTITUDE ----
1005.75,63.50,21.44

A presto!