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

martedì 13 aprile 2010

Un display TFT Touch Screen con interfaccia seriale


Reach Technology propone una serie di controller per display LCD a colori (da 4" fino a 10") con touch-screen, interamente gestibili attraverso una semplice porta seriale o USB.
I moduli della Reach Technology possono essere implementati in un qualsiasi progetto senza alcuna variazione all'hardware già esistente o l'uso di software o driver particolari; è sufficiente un semplice collegamento seriale per inviare comandi e per ricevere gli eventi generati, per esempio dalla pressione di un tasto disegnato sul display LCD.

Ma vediamo in pratica in 4 semplici passaggi quanto è semplice scrivere sul display
la classica videata "hello word".
Pronti ? via.....

STEP 1
Collegare la porta seriale AUX P2 del Kit Reach SLCD43, tramite cavo in dotazione, alla porta COM del proprio PC Windows ed alimentare l'unità LCD con l'apposito adattatore di rete 220V -5V.
In alternativa è possibile, utilizzando una prolunga USB (USB standard A <-> USB mini-B) collegare il modulo Reach SLCD43 alla porta USB del proprio PC (Se richiesti dal sistema operativo i driver per l'FT232R possono essere scaricati gratuitamente dall'indirizzo web: http://www.ftdichip.com/Drivers/). Solo controllando il modulo tramite USB non è necessario collegare l'adattatore di rete.

STEP 2
Individuare la porta COM assegnata dal sistema operativo al device della Reach.
In ambiente Windows è sufficiente visionare il pannello "gestione periferiche"

Sotto Linux, se nono sono collegati altri dispositivi con chip FTDI, il device seriale assegnato sarà /dev/ttyUSB0

STEP 3
Aprire una console seriale (si può usare Hyperterminal, Putty o Minicom) sulla porta individuata nello STEP2 e battere il tasto INVIO sulla console fino a quando il display ritorna il carattere di console ">".


STEP 4
A questo punto possiamo inviare i comandi al modulo per far comparire sul nostro display la classica scritta "hello word".
Digitare in sequenza sulla console i seguenti comandi ed attendere come conferma il carattere ">":

z

Il comando "z" resetta completamente lo schermo.

t "hello word" 100 120

Il comando "t" posiziona il testo "hello word" sullo schemro TFT a 100px per l'asse x e a 120px per l'asse y.
Di seguito il risultato:


Il set completo di comandi accettati dal modulo Reach SLCD43 è largamente descritto nella documentazione contenuta nel CD allegato al kit.

domenica 11 aprile 2010

Eseguire uno script Python su un modem Telit


I moduli Telit Python sono esteriormente e meccanicamente uguali ai modelli standard; la sostanziale differenza è racchiusa al loro interno. Infatti, oltre all'interprete Python 1.5, sono equipaggiati con ben 3MB di memoria per il salvataggio permanente degli script e 1.5MB di ram per la loro esecuzione.

Grazie a specifici moduli l'interprete Python può: inviare comandi AT direttamente al core modem GSM/GPRS, controllare i port di I/O e comunicare con la seriale supplementare che equipaggia solo alcuni modelli.

I moduli specifici del model Telit sono:

  • GPIOper comunicare con le linee di I/O (GPIO)
  • MDM per inviare comandi AT all'engine del modem
  • SER per comunicare con la seriale supplementare
  • MOD libreria d'interfaccia tra Python e le varie funzionalità del modulo
  • IIC libreria per la comunicazione I2C bus che può essere configurata per utilizzare qualsiasi GPIO disponibile
  • SPI libreria per la comunicazione SPI che, come la precedente, può essre configurata per utilizzare qualsiasi GPIO disponibile

La documentazione e la sintassi completa per usare le varie funzioni delle librerie appena elencate è disponibile nel PDF distribuito dal produttore e scaricabile dal seguente link: Telit_Easy_Script_Python_r10.pdf
Il sorgente che segue va copiato e salvato in un file con estensione .py ad esempio IO_SMS.py


#Importo i moduli

import MDM
import GPIO
import MOD



#VARIABILI
GSMNUMBER="xxxxxxxxxx"  #Numero del destinatario dell'SMS
SMSMESSAGE="Il modem Telit con python ti scrive ;)" #Messaggio dell'SMS inviato



#SETTO LA DIREZIONE DEI PORT
r=GPIO.setIOdir(5,0,1) #Setto GPIO5 come output e come valore di default 0
r=GPIO.setIOdir(6,0,1) #Setto GPIO6 come output e come valore di default 0
r=GPIO.setIOdir(7,0,1) #Setto GPIO7 come output e come valore di default 0
r=GPIO.setIOdir(4,0,0) #Setto GPIO4 come input




#lampeggio d'avvio
s=GPIO.setIOvalue(5,1) #Accendo il led su GPIO5
s=GPIO.setIOvalue(6,1) #Accendo il led su GPIO6
s=GPIO.setIOvalue(7,1) #Accendo il led su GPIO7
MOD.sleep(10) #Pausa per un secondo
s=GPIO.setIOvalue(5,0) #Spengo il led su GPIO5
s=GPIO.setIOvalue(6,0) #Spengo il led su GPIO6
s=GPIO.setIOvalue(7,0) #Spengo il led su GPIO7

#Abilito la modalità testo del modem
res = MDM.send('AT+CMGF=1\r', 0) #Invio comando AT
res = MDM.receive(3) #Attendo 3 sec
if(res.find('OK') != -1): #Ricevuto "OK"
  while (1): #Ciclo infinito
    s=GPIO.setIOvalue(6,1) #Accendo il led su GPIO6
    if(GPIO.getIOvalue(4)==0): #Verifico lo stato del port GPIO4
      s=GPIO.setIOvalue(5,1) #Accendo il led su GPIO5
      TXbuff="AT+CMGS=\"%s\"\r" % (GSMNUMBER)
      res = MDM.send(TXbuff, 0)
      res = MDM.receive(2) #Attendo 2 sec
      if(res.find('>') != -1): # se ricevo il prompt
        TXbuff = SMSMESSAGE + chr(26) + "\r" #appendo CTRL + Z
        res = MDM.send(TXbuff, 0) #invio la stringa al modem
        res = MDM.receive(3) #Attendo 3 sec
      s=GPIO.setIOvalue(5,0) #Spengo il led su GPIO5
    MOD.sleep(10) #Pausa per un secondo
    s=GPIO.setIOvalue(6,0) #Spengo il led su GPIO6
    MOD.sleep(10) #Pausa per un secondo
else: #Non ho ricevuto "OK"
  s=GPIO.setIOvalue(7,1) #Accendo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo
  s=GPIO.setIOvalue(7,0) #Spengo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo
  s=GPIO.setIOvalue(7,1) #Accendo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo
  s=GPIO.setIOvalue(7,0) #Spengo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo
  s=GPIO.setIOvalue(7,1) #Accendo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo




Per caricare il listato appena riportato nella memoria del modem l'unico software di cui abbiamo bisogno è Hyperterminal presente in qualsiasi versione di Windows (Start -> Programmi -> Accessori -> Comunicazioni ->Hyperterminal ).

Una volta lanciato Hyperterminal dobbiamo, nella finestra che ci appare, selezionare la porta COM del PC a su cui abbiamo collegato il modem Telit (SXPY, EZ863 o GT863) .
Successivamente impostiamo i parametri della comunicazione seriale con i seguenti valori: BPS 115200, Bit 8, Parità Nessuna, Bit di stop 1, Controllo di flusso Hardware; confermiamo cliccando su OK.
In automatico Hyperterminal& avvierà la connessione ma è necessario effettuare altre impostazioni; ci occorre quindi effettuare la disconnessione dal modem cliccando su: Chiama -> Disconnetti. A questo punto dal menu File selezioniamo Proprietà e nella finestra che appare Impostazioni.
Qui clicchiamo sul tasto Impostazioni ASCII.
Nella finestra che segue spuntiamo la voce "Aggiungi avanzamento riga ad ogni ritorno a capo inviato" sia in Trasmissione ASCII che in Ricezione ASCII . Conferminamo scegliendo due volte OK e ci connettiamo nuovamente con il modem cliccando su Chiama -> Chiama. Per vedere se il modem è correttamente connesso è sufficiente digitare sulla console il comando AT e aspettare la risposta OK.

Tra gli innumerevoli comandi AT supportati dal Telit EZ10-PY ve ne sono alcuni proprietari, aggiunti proprio per gestire gli script in Python. Uno dei più importanti è AT#WSCRIPT la cui sintassi completa è:

AT#WSCRIPT = "nome del file", size

Il parametro indica il nome con cui verrà salvato lo script nella memoria del modem, mentre il parametro indica lo spazio in byte occupato dallo script. Quest'ultimo valore si ricava cliccando con il tasto destro del mouse sul file .py (IO_SMS.py) precedentemente creato in cui abbiamo copiato il listato del nostro esempio di script e selezionando la voce Proprietà del menù a tendina che appare.

Come parametro dobbiamo mettere il valore per esteso indicato dalla voce "Dimensioni:".

Digitato sulla console il comando AT#WSCRIPT="t.py", 2826 e battendo invio dopo pochi attimi vediamo apparire il prompt ">>>", a questo punto dal menu Trasferimento di Hyperterminal clicchiamo sulla voce Invia file di testo.... e nella finestra che appare, selezioniamo la path di windows dove abbiamo salvato il file contente il sorgente Python di prova e clicchiamo su Apri.

Dopo pochi istanti riceviamo dal modem un OK a conferma del corretto download dello script. Da questo momento il nostro script è salvato permanentemente nei 3MB di memoria che equipaggiano il modem Telit.
Successivamente dobbiamo indicare quali sono gli script che vanno eseguiti al riavvio del modem, per far questo dobbiamo usare il comando AT#ESCRIPT con la sintassi che segue:

AT#ESCRIPT = "nome del file"

per abilitare il nostro file di test dobbiamo digitare sulla console il comando AT#ESCRIPT = "t.py" e attendere l'OK da parte del modem.

Da questo momento ad ogni riavvio del moden impostando il controllo di flusso DTE basso (basta tenere il modem scollegato dal PC) lo script Phyton t.py viene lanciato. La corretta esecuzione di quest'ultimo e rivelabile vedendo lampeggiare il LED sulla demo board connesso al port GPIO6 (pin 3 dell'RJ11 sul modem) . Cortocircuitando a massa con la pressione del pulsante montato sulla demo board il port GPIO4 dopo pochi attimi verrà inviato un SMS con il messaggio riportato nella variabile SMSMESSAGE al cellulare che ha per numero quello riportato nella variabile GSMNUMBER presente all'inizio del listato precedentemente riportato.

Per cancellare definitivamente uno script dalla memoria del modem basta digitare il comando AT#DSCRIPT rispettando la sintassi che segue

AT#DSCRIPT = "nome del file"