venerdì 11 novembre 2011

Una WEBCAM USB per l'embedded SX ARM Linux

Nell'articolo che segue vediamo come collegare una WEBCAM con interfaccia USB 2.0 alla SX ARM Linux e come inviare in streaming su LAN il video acquisito.

In questo articolo vediamo come: collegare una mini WEBCAM con interfaccia USB 2.0 alla Linux box SX ARM Linux, caricare i driver necessari al funzionamento e come inviare il flusso video acquisito in streaming su LAN tramite il software MJPG-streamer.

Requisiti Hardware

Per la stesura di quest'articolo è stato utilizzato:

  1. Una SX ARM Linux 1L (SX Arm Linux 1L: scheda Linux Embedded con supporto SD/MMC e linee di IO)

  2. Una alimentatore 220v - 12V CC (Alimentatore da barra DIN switching 220V - 12V 1500mA)

  3. Un WEBCAM con interfaccia USB (DLP-IO8 Modulo con ingressi/uscite TTL ingressi ADC a 10bit)

Collegamenti

I collegamenti da effettuare sono veramente minimali, è sufficiente alimentare la SX ARM Linux 1L con una tensione continua o alternata di almeno 12V, e collegare la WEBCAM ad una delle due porte USB 2.0 che equipaggiano la SX ARM Linux.

In questo esempio è necessario collegare l'embedded Linux ad una rete LAN su cui è connesso un PC client Linux o Windows. L'IP di default della SX ARM Linux 1L è: 192.168.2.127.

Installazione dei driver per la WEBCAM

Per il corretto funzionamento della WEBCAM calsse UVC con la SX ARM Linux 1L, è necessario caricare i driver contenuti nella cartella "driver" presente nel file compresso VIDEO_ARMLINUX.zip presente nel CD fornito a corredo dell'embedded.
I driver uvcvideo.ko v4l1-compat.ko v4l2-common.ko videodev.ko vanno installati sulla SX ARM Linux seguendo le istruzioni che seguono:

  • Decomprimere il file VIDEO_ARMLINUX.zip (il file viene fornito con l'acquisto di una SX ARM Linux) in una cartella del PC collegato in LAN con la SX ARM Linux.
  • Collegarsi in SSH alla 1L (ssh: 192.168.2.127 username: root password: root)
  • Creare sulla SX ARM Linux la cartella video/driver con il comando:

    mkdir -p /disk/video/driver

  • Tramite un client FTP connettersi alla SX ARM Linux (ftp: 192.168.2.127 username: root password: root modalità di trasferimento binaria).
  • Trasferire via FTP nella cartella /disk/video/driver/ della SX ARM Linux tutti i file contenuti nella directory "driver" dell'archivio archivio zip
  • Rendere eseguibili i driver con il comando:
    chmod +x /disk/video/driver/*
  • Da console SSH lanciare i seguenti comandi:

    insmod /disk/video/driver/v4l1-compat.ko
    insmod /disk/video/driver/videodev.ko
    insmod /disk/video/driver/v4l2-common.ko
    insmod /disk/video/driver/uvcvideo.ko

  • Verificare il corretto riconoscimento della WEBCAM con il comando: dmesg

    uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (18ec:3299)
    uvcvideo: Failed to query (135) UVC control 1 (unit 0) : 0 (exp. 26).
    usbcore: registered new driver uvcvideo
    USB Video Class driver (v0.1.0)

A questo punto la WEBCAM è correttamente installata sulla SX ARM Linux ed è disponibile sul device /dev/video0

Installare MJPG-Streamer

MJPG-streamer ( mjpg-streamer.sourceforge.net/) è una applicazione a riga di comando per lo streaming di video acquisito da una webcam, su rete LAN. Lo streaming del tool MJPG-streamer può essere visualizzato su un browser internet come Firefox o Chrome; oppure con il client video VLC, o su un cellulare dotato di browser web.

Sfruttando la compressione hardware della webcam, il programma MJPG-streamer è in grado di ridurre i cicli CPU, rendendolo la soluzione ideale per dispositivi embedded e piccoli server.

Il programma MJPG-streamer viene fornito crosscompilato per l'embedded SX ARM Linux 1L all'interno del file VIDEO_ARMLINUX.zip.
Per l'installazione del tool è necessario procedere come segue:

  • Decomprimere il file VIDEO_ARMLINUX.zip (il file viene fornito con l'acquisto di una SX ARM Linux)
  • Tramite un client FTP connettersi alla SX ARM Linux (ftp: 192.168.2.127 username: root password: root modalità di trasferimento binaria).
  • Copiare nella SX ARM Linux tramite FTP, la cartella "mjpg-streamer" contenuta nel file precedentemente decompresso.
  • Rendere eseguibili il programma con il comando:
    chmod -Rf +x /disk/video/MJPG-streamer/

  • Linkare la libreria libjpeg necessaria al funzionamento del programma con il comando:
    ln -s /disk/video/mjpg-streamer/libjpeg.so.62 /lib/libjpeg.so.62

  • Esportare la variabile LD_LIBRARY_PATH con la path in cui sono contenuti i plugins del programma MJPG-streamer; con il comando:
    export LD_LIBRARY_PATH=/disk/video/mjpg-streamer/plugins/

  • Caricare i driver per la WEBCAM UVC come descritto nel paragrafo "Installazione dei driver per la WEBCAM".
  • Avviare il programma con il comando che segue:
    /disk/video/mjpg-streamer/mjpg-streamer -i "input_uvc.so -n" -o "output_http.so -w /disk/video/mjpg-streamer/www/ -p 8080"

    MJPG Streamer Version.: 2.0
    i: Using V4L2 device.: /dev/video0
    i: Desired Resolution: 640 x 480
    i: Frames Per Second.: 5
    i: Format............: MJPEG
    o: www-folder-path...: /mnt/disk/video/mjpg-streamer/www/
    o: HTTP TCP port.....: 8080
    o: username:password.: disabled
    o: commands..........: enabled

    In alternativa per velocizzare tutta la procedura di avvia del programma è possibile lanciare lo script "start" contenuto nella cartella "mjpg-streamer":

Con il demone MJPG Streamer in esecuzione, possiamo verificare se tutto funziona semplicemente aprendo con il browser internet di un PC collegato in rete con la SX ARM Linux, l'url http://[ip della SX ARM Linux]:8080

Dalla pagina web del programma MJPG Streamer sono visibili vari soluzioni di streaming come per esempio: in java o in javascript e anche con VideoLAN.
Per testare lo striming sul client VideoLAN (o VLC) è necessario scaricare il programma gratuito dall'URL
http://www.videolan.org/vlc/,
installarlo e lanciarlo.Dal menù "Media" selezionare la voce "Apri flusso di rete..." e digitare nel campo "Indirizzo" l'URL http://[ip della SX ARM Linux]:8080?action=stream

dopo pochissimi istanti il client VLC visualizzerà il flusso video acquisito dalla WEBCAM collegata alla SX ARM Linux.

Tra le molteplici possibilità di visualizzazione dello stream generato dal demone MJPG Streamer di particolare interesse risulta essere quella su terminali mobili come: IPdad, iPhone e Android:

Catturare singoli frame dalla WEBCAM

Nel caso la necessità fosse quella di catturare dalla WEBCAM un singolo frame e salvarlo in un file JPEG, nell'archivio VIDEO_ARMLINUX.zip è presente il programma CaptureFrame.

CaptureFrame non richiede alcuna installazione, è sufficiente trasferirlo via FTP nella memoria della ARM Linux, renderlo eseguibile con il comando:
chmod +x CaptureFrame

ed avviarlo.
./CaptureFrame

CaptureFrame accetta come opzioni:

-O file name o file path
-D device (default /dev/video0)
-V per impostare la modalità verbose.

giovedì 18 agosto 2011

Una scheda di I/O controllata via Wi-Fi

L'applicazione descritta in questo articolo mostra come collagare la scheda di espansione SX16 al modulo OpenPicus FlyPort per realizzare un nodo con ingressi ed uscite a relè controllabile via LAN Wi-Fi.

In questo articolo vediamo come collegare una scheda di espansione ingressi/uscite SX16 ad un modulo FlyPort della serie OpenPicus, per realizzare un sistema che ci permette: di controllare tramite relè fino a sei carichi (48V/2A), di sorvegliare lo stato di 24 linee di cui 8 optoisolate e di rilevare la temperatura; tramite una semplice interfaccia WEB o una applicazione desktop il tutto su una connessione LAN Wi-Fi.

Hardware e collegamenti elettrici

Realizzare il dispositivo descritto è necessario disporre di: una scheda espansione I/O SX16B (SX16B - Scheda di espansione IN/OUT) nella versione stand alone e di un modulo FlyPort (Modulo openpicus FlyPort con interfaccia Wi-Fi 802.11 certificata b/g/n) completo di SDK Nest.
La scheda SX16B stand alone, a differenza della versione base, è equipaggiata con il blocco di alimentazione ed un micro PIC. Il PIC 16F628 montato sullo zoccolo U9 andrà rimosso in quanto il programma di controllo delle linee I/O verrà fatto girare sul micro PIC 24F256FJ106GA presente sul FlyPort.

Nella tabella che segue vengono riportati i 10 collegamenti da effettuare tra la scheda SX16 e il modulo FlyPort montato sull'SDK Nest e il modulo FlyPort da solo.

SX16B - EXPANDER IN FlyPort su NEST FlyPort SEGNALE
JP2 PIN 1 JP9 SDA PIN 3 I2C SDA
JP2 PIN 2 JP9 SCL PIN 1 I2C SCL
JP2 PIN 3 JP2 IN5 PIN 2 IN CLOCK
JP2 PIN 4 JP1 IN2 PIN 7 IN DATA
JP2 PIN 5 JP1 IN1 PIN 5 IN STROBE
JP2 PIN 6 JP2 IN5 PIN 2 OUT CLOCK
JP2 PIN 7 JP1 IN3 PIN 9 OUT STROBE
JP2 PIN 8 JP2 IN4 PIN 11 OUT DATA
JP2 PIN 9 JP10 +5V PIN 16 Vcc +5V
JP2 PIN 10 JP10 GND PIN 22 GND

Il sistema SX16 & FlyPort può essere alimentato direttamente a 5V se il FlyPort è montato sulla Nest o da 9V a 12V AC/DC (corrente 500mA) se si passa dalla SX16B (PWR JP13)

Programmare il modulo FlyPort

In questo articolo vengono forniti, nella sezione download, due firmware per il FlyPort. Il primo programma, presente nel file FLYPORT_SX16_BASE.zip, contiene le funzioni base per interfacciare il FlyPort alla SX16, il cui unico funzionamento consiste nel legge ciclicamente: ingressi, temperatura e attiva i sei relè.
Il secondo programma, contenuto nel file FLYPORT_SX16_PRO.zip, trasforma il binomio FlyPort & SX16 in un vero e proprio nodo input/output controllabile tramite interfaccia WEB (integrata nel modulo FlyPort) o socket TCP/IP. Oltre a poter monitorare lo stato dei 24 ingressi, la temperatura tramite il sensore DS1621 presente sulla SX16, e controllare i 6 relè;


tramite interfaccia WEB è possibile impostare i parametri di rete LAN del modulo FlyPort:

e i parametri necessari al FlyPort per collegarsi alla rete Wi-Fi:


Per caricare uno dei due programmi nella memoria del FlyPort è necessario scaricare ed installare su un PC Windows l'IDE OpenPicus Ambiente di sviluppo IDE per il FlyPort Wi-Fi.
Successivamente decomprimere il file FLYPORT_SX16_BASE.zip o FLYPORT_SX16_PRO.zip sul proprio hard disk. Montare il FlyPort sulla scheda Nest e collegarla via USB al PC (Se richiesti i driver : CDM 2.04.16 WHQL Certified.zip). Dall'IDE cliccare OpenProject e selezionare il file .conf contenuto nella path in cui è stato precedentemente decompresso il file Zip. Se non vogliamo modificare nulla nel progetto, compilarlo cliccando sul tasto CompileProject e trasferirlo sul FlyPort cliccando sul tasto DownloadFirmware. Dalla finestra Picus - Brutus Bootloader selezionare la porta COM assegnata dal sistema operativo alla Nest e cliccare su download.



Al primo avvio il FlyPort partirà con la configurazione Wi-Fi ad-hoc con: ssid AREASX, nessuna protezione e DHCP server (192.168.1.100) che assegna un unico IP. Per riconfigurare il sistema sarà necessario collegarsi da un PC con scheda wireless Wi-Fi al nodo FlyPort & SX16, accedere tramite browser (Firefox o Chrome) all'indirizzo http://192.168.1.100 ed effettuare i settaggi necessari per accedere alla propria rete wireless.

Software di controllo desktop

Per controllare apparato così realizzato via TCP possiamo utilizzare qualsiasi tipo di linguaggio che ci consenta che ci consenta di gestire dei socket TCP/IP come per esempio: python, C, Visual Basic, PHP e così via.
L'applicazione di esempio distribuita sia in formato sorgente che in pacchetto autoinstallante, esegue poche semplici operazioni.
Una volta aperto un socket TCP/IP all'indirizzo IP del modulo FlyPort (porta tcp/ip 1470) in ascolto sulla rete, invia comandi composti da pacchetti di sei byte.
Il programma in esecuzione sul FlyPort, una volta riconosciuto ed eseguito il comando, restituisce un pacchetto di risposta composto sempre da sei byte; tale pacchetto effettua il percorso inverso rispetto al precedente fino ad arrivare all'applicazione client in VB6 che lo interpreta e ne mostra a video il risultato.

Protocollo di comunicazione con la SX16B & FlyPort

Nelle tabelle che seguono vengono riassunti i comandi da inviare e le risposte ricevute dal FlyPort collegato alla scheda SX16B.

Acquisizione della temperatura

Comando da inviare alla SX16

Byte Descrizione Esadecimale
1 START 0x66
2 INDIRIZZO 0x01
3 COMANDO 0x02
4 ZERO 0x00
5 ZERO 0x00
6 ZERO 0x00

Risposta dalla SX16

Byte Descrizione Esadecimale
1 SOR 0x55
2 INDIRIZZO 0x01
3 COMANDO 0x02
4 TEMPERATURA da 0x00 a 0xC9
5 TEMPERATURA 0x00 o 0x80
6 ZERO 0x00

Comando per il controllo dei relè

Comando da inviare alla SX16

Byte Descrizione Esadecimale
1 START 0x66
2 INDIRIZZO 0x01
3 COMANDO 0x03
4 RELE' da 0x01 a 0x06
5 STATO 0x00 OFF - 0x01 ON
6 ZERO 0x00

Risposta dalla SX16

Byte Descrizione Esadecimale
1 SOR 0x55
2 INDIRIZZO 0x01
3 COMANDO 0x03
4 STATO RELE' da 0x00 a 0x63
5 ZERO 0x00
6 ZERO 0x00

Acquisizione dello stato dei 24 ingressi

Comando da inviare alla SX16

Byte Descrizione Esadecimale
1 START 0x66
2 INDIRIZZO 0x01
3 COMANDO 0x01
4 ZERO 0x00
5 ZERO 0x00
6 ZERO 0x00

Risposta dalla SX16

Byte Descrizione Esadecimale
1 SOR 0x55
2 INDIRIZZO 0x01
3 COMANDO 0x01
4 INPUT CTC da 0x00 a 0xFF
5 INPUT TTL da 0x00 a 0xFF
6 INPUT OPT da 0x00 a 0xFF

Link utili

Articolo: Modulo openpicus FlyPort con interfaccia Wi-Fi 802.11 certificata b/g/n
Articolo: Ambiente di sviluppo IDE per il FlyPort Wi-Fi

Download

Download Programma per FlyPort versione base
Download Programma per FlyPort versione estesa

Download Sorgente programma di controllo in VB6: LAN2Sx16_Sorgente.zip
Download Programma di controllo: LAN2Sx16_Setup.zip

mercoledì 20 luglio 2011

Domotizziamo l'acquario...

In questo articolo vediamo come realizzare una lampada con tecnologia LED che possa essere comandata da un PC remoto tramite collegamento in rete LAN Wi-Fi.
Il sistema qui descritto viene impiegato per illuminare un acquario da 50 litri con effetto alba tramonto e notte (LED blu), il tutto gestito da un software che gira su un PC connesso in Wi-Fi.


Quello che ci occorre è: un convertitore Wi-Fi – Serila RS232 CSW80 della Sollae (link prodotto), un PIC 16F628A e relativo quarzo da 10Mhz, due LED Luxeon da 3W bianchi 5500K (o equivalenti) un LED BLU da 1W e due driver per LED ZXLD1362ET5TA e pochi altri componenti discreti.
Quest'ultimo è un interessante driver a basso costo che con pochi componenti discreti è in grado di pilotare LED ad alta potenza con un ottimo rendimento.
Di seguito è disponibile il semplice schema elettrico da realizzare:

La lampada va alimentata con un alimentatore (si consiglia di tipo switching) in grado di erogare una tensione continua di 5 V ed una corrente di almeno 1.5A (consumo di circa 7.5W).


Il modulo Sollae CSW80 prima di essere collegato all'unità lampada va configurato tramite il software ezManager (www.sollae.com) per impostare: i dati del proprio Access Point, l'indirizzo IP, la porta TCP/IP su cui restare in ascolto (1470 per default) e la velocità della seriale (19200bps). Completata e salvata la configurazione è possibile ri-collegare il convertitore alla lampada.


Il funzionamento del firmware da caricare nella memoria del PIC è estremamente semplice,
alla ricezione sulla seriale del pacchetto esadecimale

0x66 0x03 0x01 0x01 0x01 0x00

provvede ad accende i LED Luxeon in maniera progressiva fino al raggiungimento dell'intesità massima. Quando il firmware riceve il comando esadecimale

0x66 0x03 0x01 0x01 0x00 0x00

I due Luxeon vanno progressivamente spegnendosi lasciando acceso solo il LED Blu per l'effetto notte :) .
Ad ogni comando da 6 byte inviato il programma ritorna un pacchetto sempre sa 6 byte con lo stato dei LED.
Per esempio inviando il comando 0x66 0x03 0x01 0x01 0x01 0x00 riceveremo come risposta

0x55 0x03 0x01 0x01 0x01 0x00

LED accesi.

Per interrogare il sistema è possibile inviare il comando:

0x66 0x04 0x01 0x00 0x00 0x00

come risposta riceveremo

0x55 0x04 0x01 0x00 0x01 0x00

se i LED sono accessi o

0x55 0x04 0x01 0x00 0x00 0x00

se i led sono spenti.



Un modulo RFID facile da usare e molto economico...

Vediamo una carrellata di esempi su come interfaccaiare il Modulo OEM RFID reader da 125Khz, alle schede di Area SX.

Descrizione Hardware del RFID Reader

Il modulo RFID reader proposto da Area SX è un compatto PCB di soli 45x24mm dotato di interfaccia seriale RS232 (TTL 0-5V) e Wiegand, ideale per leggere TAG da 125Khz. Alcune delle principali caratteristiche tecniche:

  • Interfaccia seriale:TTL, 9600bps, N, 8, 1
  • Interfaccia Wiegand: TTL, formato wiegand da 26 bits (1 even verify bit,24 data bits,1 odd verify bit)
  • Distanza massima di sensibilità: 7cm
  • Alimentazione:5V CC
  • Consumo: 45mA
  • Dimensioni: 45 mm x 25 mm
Grazie all'interfaccia seriale il reader può essere facilmente interfacciato con tutti i microprocessori dotati di una porta RS232 TTL(0-5V) o CMOS(0-3.3V).
In questo articoli vediamo alcuni esempi pratici di interfacciamento del modulo OEM.

Interfaccia tramite connessione USB

Iniziamo con l'interfacciamento del lettore RFID 125Khz più semplice, tramite USB ad un normale PC. Come convertitore USB <-> Seriale RS232 TTL usiamo una SX20 (SX20: connettività USB e XBee su tutte le schede di Area SX)


Sulla SX20 è necessario posizionare i dipswitch etichettati con la "U" (1 e 4) su ON mentre vanno messi ad OFF tutti gli altri.
L'interfaccia USB che equipaggia la SX20 è basata sul popolare chip FT232R della FTDI compatibile con tutti i sistemi operativi attualmente in commercio (Windows, Linux e MacOS) e con buona parte dei sistemi embedded (come FOX e SX ARM Linux).
Per maggiori informazioni sulla compatibilità e la disponibilità di driver per il chip FTDI, si consiglia di visitare il sito del produttore: www.ftdichip.com
I collegamenti da effettuare tra la SX20 e il lettore di tag sono riportati nella tabella che segue:

Pin SX20DescrizionePin Reader
1N.C.
2N.C.
3N.C.
4LED STAT (pin 15 Xbee)
5RX (Input)3
6TX (Output)4
7N.C.
8VCC +5V2
9GND1

Per verificare il corretto funzionamento del lettore alleghiamo un semplice tool per windows che va lanciato con la sintassi che segue:

c:\TOOLTEST\RFID-test_tool.exe [porta com assegnata alla SX20]



Download Programma di test per Windows: RFID-TEST-TOOL.zip

Interfaccia con modulo Rabbit

Di seguito è descritto l'interfacciamento del tag reader con un micrprodessore Rabbit RCM3700 montato sulla scheda di sviluppo SX3000 (SX3000EVO tutta la versatilità del modulo RCM3700 e della tecnologia ZigBee in pochi cm).


Di seguito vengono riportati i collegamenti da effettuare tra il reader e la SX3000:

SX3000 JP6DescrizioneReader
1RX (Input)3
2TX (Output)4
9Vcc (+5V)2
10GND1

Per testare il corretto funzionamento con il modulo Rabbit RCM3700 è necessario compilare e caricare tramite il Dynamic C nella memoria del processore il programma di test allegato di seguito:
Download Programma di test per Rabbit: RFID_READER_RABBIT.zip

Interfaccia con modulo BasicX 24

Di seguito è descritto l'interfacciamento del tag reader con un micrprodessore della Netmedia BX24 montato sulla scheda di sviluppo SX18-BX24 (SX18 -BasicX24: una scheda completa per lavorare con i BasicX24).


Di seguito vengono riportati i collegamenti da effettuare tra il reader e la SX18:

SX18 JP3DescrizioneReader
1RX (Input)3
2TX (Output)4
9Vcc (+5V)2
10GND1

Per testare il corretto funzionamento con il modulo BasicX 24 è necessario compilare e caricare tramite l'apposito SDK della Netmedia nella memoria del processore il programma allegato di seguito:
Download Programma di test per BX24: RFID_READER_BX24.zip

Interfaccia con il modem TELIT GM862-PY

Di seguito è descritto l'interfacciamento del tag reader con un modem Telit GM862-PY montato sulla scheda di sviluppo SXPY (Guida all'utilizzo della SX-PY).

Di seguito vengono riportati i collegamenti da effettuare tra il reader e la SXPY:

SXPY EXP2DescrizioneReader
1RX (Input)4
2TX (Output)3
9Vcc (+5V)2
10GND1


Per testare il corretto interfacciamento con il modem della Telit è necessario caricare tramite il tool SxPyDownload il file TEST_RFID.pyo presente nel file compresso di seguito allegato:
Download Programma di test per BX24: RFID_READER_SXPY.zip
La corretta esecuzione del programma e il riconoscimento dei TAG può essere ispezionato tramite console seriale:

Download

Download Datasheet 125K_RFID_Readerv0.9b.pdf