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"