In questa sezione presentiamo una guida completa di sorgenti d'esempio
per iniziare a lavorare con la SX-PY.
Sommario:
La scheda SX-PY in sintesi
La SX-PY � una scheda sviluppata per sfruttare al massimo le potenzialit� dei
modem con interprete Pytnon 1.5 prodotti dalla Telit
www.telit.com.
In soli 156 x 85 cm trovano posto oltre al modem GM862 (fornito a parte) un
completo circuito di alimentazione a range esteso dotato di batteria di
backup le seriali per il debug e la gestione del modem e tutta l'elettronica indispensabile per controllare carichi e
controllare
lo stato di linee d'ingresso.
Le caratteristiche principali della scheda SX-PY sono:
- Alimentazione filtrata a range esteso 9-15V CC/CA
- Connettore per batteria di backup (non compresa) con
circuito di ricarica
- Power fail detection per la rilevazione della caduta di
alimentazione
- Livello residuo di carica direttamente disponibile negli
script Python tramite comandi AT
- Ricevitore GPS (disponibile solo utilizzando il modulo
GM862-GPS)
- Seriale RS232 per l'upload degli script
- Seriale RS232 per il debug degli script
- 2 linee di ingresso optoisolate configurabili
- 2 uscite a rele (48V/2A)
- 1 expander FLEX per la scheda SX16B (SX16B - Scheda di espansione IN/OUT) per estendere il numero
di ingressi ed uscite
- 1 expander per il collegamento di hardware proprietario
- 1 connettore per il collegamento di un modulo seriale in
radiofrequenza ER400TRS (Guida all'utilizzo della SX ARM Linux)
- 1 pulsante di reset
- 1 pulsante di test
- Led di alimentazione, carica batteria, rilevazione rete
GSM, transito dati RF e test
La SX-PY pu� essere equipaggiata a scelta con un modem
modello GM862-PY, dotato del solo interprete Python, oppure con il GM862-GPS che oltre
all'interprete integra un ricevitore GPS SiRFstarIII�. Fruttando
quest'ultimo binomio e scrivendo uno script in Python �
possibile realizzare un semplice localizzatore geografico.
Per provare tutti gli esempi descritti in questa guida � necessario disporre
di:
- Una SX-PY
- Un modem Telti GM862-PY o GPS
- Una antenna dotata di connettore MMCX
- Un alimentatore 220v -12V
- Un batteria a ioni di litio da 3.7V
- Cavo flat 9 poli con connettore seriale DB9 femmina
- Trasmissioni in Radiofrequenza ER400TS
- Due prolunghe seriali DB9poli maschio/femmina
- Un PC con sistema operativo Windows
- Due convertitori USB - RS232 (solo se il PC � sprovvisto di porta RS232
)
Parte degli articoli citati possono essere acquistati nella sezione posta
alla fine di quest'articolo.
L'ambiente di sviluppo
Per cominciare al lavorare con la SX-PY non � richiesta l'installazione di
alcun ambiente di sviluppo particolare. Gli unici strumenti software
indispensabili
sono: un buon editor di testo come ad esempio Ultraedit
www.ultraedit.com
e una software console seriale come: Hyperterminal disponibile
gratuitamente su ogni installazione di
Windows oppure CRT a pagamento ma molto pi� professionale (www.vandyke.com).
Il linguaggio Python � di tipo interpretato e non richiede alcun
compilatore � sufficiente scrivere il nostro codice all'interno file di testo
tramite un editor (anche Notepad va bene), salvarlo con estensione .PY ed e
farlo eseguire dall'interprete presente nei modem Telit.
Per chi volesse cominciare a programmare in Python di seguito � presente una
lista che riporta solo alcuni dei siti contenenti corsi e
documentazione completamente gratuita.
http://www.python.org/
http://www.hetland.org/python/instant-python.php
http://www.python.it/
http://www.telit.co.it/data/uploads_EN/products/80000ST10020a_r0.pdf
I file .PY possono poi essere
caricati nella memoria del modem Telit tramite particolari comandi AT da inviare
attraverso console seriale.
La console deve essere aperta sulla porta seriale del nostro PC che � connessa
tramite cavo dritto (oltre alle linee GND,TX e RX � richiesto anche il controllo
di flusso DTE) alla porta etichettata "SERIAL DCE" sulla SX-PY.
Verificare che i contatti 1 e 2 del dipswitch S5 siano sulla posizione ON.
Per caricare e gestire gli script nel modem bisogna usare degli speciali
comandi AT:
- Scrivere un file nella memoria AT#WSCRIPT = "<nome del file>", <size>
- Abilitare all'esecuzione AT#ESCRIPT = "<nome del file>"
- Cancellare un file AT#DSCRIPT = "<nome del file>"
- Visualizzare la lista dei file AT#LSCRIPT
L'uso dettagliato di questi comandi � descritto nell'articolo: Eseguire uno script Python su un modem Telit
Una comoda alternativa alla macchinosa procedura di
upload file tramite console � l'impiego del tool SxPyDownloadTool sviluppato
da Area SX e scaricabile gratuitamente dal link che segue: SxPyDownloadToolSetup.zip
Il programma SxPyDownload permette in pochi e semplici passaggi: di
caricare i file nella memoria del modem Telit, cancellarli e selezionare lo
script da eseguire all'accensione del modem.
Maggiori informazioni sull'impiego del tool sono riportate nell'articolo: SxPyDownloadTool: gestione degli script Pyhton sui moduli Telit
Alimentare la SX-PY
La SX-PY va alimentata applicando una tensione continua o alternata compresa
tra un minimo di 9V e un massimo di 24V sul morsetto etichettato PWR IN e
visibile al punto uno della foto che segue.
(Foto 1)
La SX-PY � predisposta per montare e gestire la carica di una batteria di
backup a ioni di litio (punto 6 nella foto sopra riportata) che garantisce al
modem Telit in assenza dell'alimentazione principale un autonomia di circa
due giorni (modem registrato ma non in trasmissione).
Quando la scheda SX-PY viene alimentata dalla batteria di backup non � possibile
attivare i rel� K1 e K2 e prelevare i 5V dai vari espander.
Alimentazione senza batteria di backup
Se si usa la SX-PY senza batteria di backup � necessario: posizionare il
jumper S3 (vedi punto 3 nella foto 1) su VCC e aprire il ponticello W1 (vedi
punto 4 nella foto 1). Per accendere o spegnere la scheda � sufficiente aprire o
chiudere il ponticello S1 (vedi punto 2 nella foto 1). Lo stato di
corretta alimentazione � indicato dall'accensione del LED rosso "PWR" posto
affianco al jumper S2 (punto 3).
Alimentazione con batteria di backup
La configurazione da impostare sulla SX-PY per usare la batteria di backup
prevede il posizionamento del jumper S3 (vedi punto 3 nella foto 1)
su "BAT" e la chiusura del ponticello W1 (vedi punto 4 nella foto 1).
Il montaggio della batteria a ioni di litio sul pinstrip maschio a tre vie
etichettato JP1, visibile al punto 5 della foto sopra riportata, va effettuata
prestando la massima attenzione alla polarit�.
Un inversione potrebbe causare il danneggiamento del modem.
L'uso di questa configurazione senza la batteria potrebbe danneggiare il modem.
Il funzionamento della SX-PY con batterie differenti da quelle vendute sul sito
di Area SX non � garantito.
Lo stato di carica della batteria � indicato dal LED "CHG" posto vicino al
LED "PWD".
Il diverso stato di questo LED indica:
- Il LED CHG acceso fisso indica batteria in carica.
- Il LED CHG lampeggiante indica batteria quasi carica.
- Il LED CHG spento indica batteria completamente carica.
Il primo esempio
Il primo esempio messo a disposizione � molto semplice e serve principalmente
per prendere un po' di confidenza con il linguaggio Python e la SX-PY.
Nelle poche righe che compongono il sorgente di prova viene mostrato come:
includere i vari moduli esterni, configurare e settare lo stato delle linee di
IO, settare variabili, cicli, strutture decisionali e implementare ritardi di
esecuzione.
A differenza di altri linguaggi come il C o PHP in Python l'indentazione non �
solo un fatto estetico ma sostituisce le parentesi "{" "}"
per semplificare la spiegazione vediamo di seguito come cambia l'istruzione IF
dal C al Pythhon.
Codice in C o PHP: |
Codice in Python: |
if(condizione){
istruzione
} |
if(condizione):
istruzione |
Una scorretta indentazione pu� comportare il mancato
funzionamento del nostro programma Python.
Per mangiare documentazione sulle vaie sintassi del Python si consiglia di visitare il
sito ufficiale www.python.org
Il sorgente riportato di seguito va copiato tramite il nostro editor preferito
in un file di testo e quest'ultimo va salvato con con l'estensione ".PY" (es
PRIMO_ESEMPIO.py).
Si sconsiglia di usare nomi di file che contengano spazzi vuoti.
#Import dei moduli
import GPIO #Gestione delle linee di IO
import MOD #Gestione timer
#SETTO LA DIREZIONE DEI PORT
r=GPIO.setIOdir(2,0,1) #setto il port 2 come output e ha come valore di default
0
r=GPIO.setIOdir(6,0,1) #setto il port 6 come output e ha come valore di default
0
r=GPIO.setIOdir(7,0,1) #setto il port 7 come output e ha come valore di default
0
i=0 #setto la variabile i
while (1): #Ciclo while infinito
#Linea di debug
print "Ciao sono la linea %d di debug" % i
i=i+1
#Un istruzione IF
if(i==10):
print "la variabile i vale 10!!"
elif (i==5):
print "La variabile i vale 5"
else: #else
print "" #scrivo una riga vuota
#Lampeggio del led "TEST"
s=GPIO.setIOvalue(2,0) #Setto a 0 la linea GPIO2
MOD.sleep(10) #Ritardo di un secondo
s=GPIO.setIOvalue(2,1) #Setto a 1 la linea GPIO2
MOD.sleep(10)
Usando il tool SxPyDownloadTool per caricare il nostro esempio nella memoria
del modem Telit � sufficiente seguire cinque semplici
passaggi descritti qui di seguito.
- Cliccare sul tasto "Connetti" dopo aver selezionato la porta Com
su cui � stata precedentemente collegata la SXPY al nosto PC tramite
cavo seriale.
- Appena termina il check del modem il tasto "Scegli file" si
abilita e cliccandolo � possibile selezionare il file che
vogliamo caricare sul modem.
- Cliccare sul tasto "Download" e attendere il completamento del processo il
cui stato di avanzamento � riportato sulla status bar del programma.
- A download completato nella finestra "Elenco file" � possibile
selezionare il file con un semplice click.
- Per rendere lo script attivabile al prossimo riavvio � sufficiente
cliccare sul tasto "Attiva script".
- Chiudere la connessione seriale o scollegare il cavo.
- Riavviare il modem.
- Se invece si vuole cancellare il file basta cliccare su "Cancella
Script".
Le operazioni sopra descritte sono possibili soltanto
se non ci sono script in esecuzione. In caso contrario � necessario premere il
tasto Reset sulla SX-PY.
Riavviando il modem dopo qualche secondo cominciamo a veder lampeggiare il LED
"TEST".
Per effettuare il debug degli dei programmi scritti in Python per Telit �
sufficiente inserire nel proprio piacere nel sorgente dei
prinf "stringa da visualizzare"
In fase di esecuzione tutte le stringhe presenti dopo l'istruzione print vengono inviati dal modem sulla seriale
di debug che nella SX-PY � disponibile su un connettore a 10 poli (5+5)
etichettato "SERIAL DEBUG" al quale � possibile connettere una prolunga
opzionale con un DB9 poli femmina (SX.FLAT.RS232) da
collegare al proprio PC.
La seriale di debug non � disponibile sul modem GM862-GPS. In questa versione la seriale viene usata per inviare le sentence NMEA del GPS
Dal PC per visualizzare le stringhe di debug � sufficiente aprire una console e
impostare i parametri di comunicazione della seriale a 115200bps e disabilitare
tutti i controlli di flusso.
Sorgente:
PRIMO_ESEMPIO.zip
Controllare i rel�
La SX-PY � equipaggiata con due rel�, capaci di pilotare carichi a 48V
con una corrente massima di 2A. I rel� sono controllati dalle linee GPIO6 e 7 del modem Telit.
La linea GPIO6 controlla il rel� K1 mentre la linea GPIO7 controlla il rel� K2.
Le due linee possono essere attivato o disattivate oltre che da programma Python
anche con speciali comandi AT.
Per attivare il rel� K1 � sufficiente inviare sulla seriale "SERIAL DCE" il
comando AT:
AT#GPIO=6,1,1
mentre per disattivarlo:
AT#GPIO=6,1,0
La stessa operazione pu� essere effettuata con la linea GPIO 7.
Lo stato di ogni singolo rel� � indicato da un LED verde posto accanto.
Il sorgente che segue una volta copiato in un file .py, caricato ed eseguito
dal modem Telit accender� e spegner� i rel� ogni due secondi.
import GPIO
import MOD
print "\r\nTEST RELE'\r\n"
#SETTO LA DIREZIONE DEI PORT
r=GPIO.setIOdir(2,0,1) #setto il port 2 come output e ha come valore di default
0
r=GPIO.setIOdir(6,0,1) #setto il port 6 come output e ha come valore di default
0
r=GPIO.setIOdir(7,0,1) #setto il port 7 come output e ha come valore di default
0
while(1):
print "Rele' K1 ON\r\n"
s=GPIO.setIOvalue(6,1)
MOD.sleep(20)
print "Rele' K2 ON\r\n"
s=GPIO.setIOvalue(7,1)
MOD.sleep(20)
print "Rele' K1 OFF\r\n"
s=GPIO.setIOvalue(6,0)
MOD.sleep(20)
print "Rele' K2 OFF\r\n"
s=GPIO.setIOvalue(7,0)
MOD.sleep(20)
Sorgente:
TEST_RELE.py
Controllare lo stato delle linee di ingresso
La SX-PY � dotata di due ingressi optoisolati configurabili singolarmente
tramiti appositi jumper per operare in modalit� TTL/contatto pulito o in
modalit� optoisolata.
La modalit� TTL o contatto permette di collegare sui morsetti JP10 (INPUT2) e
JP11 (INPUT2) una tensione di 5V oppure un contatto pulito proveniente per
esempio da un interruttore o un pulsante. Impostando la modalit� optoisolata, �
possibile applicare sui morsetti una tensione continua o alternata che va da un
minimo di 5 V ad un massimo di 24V.
Per settare la modalit� TTL bisogna posizionare i jumper S11 e S9 per
l'ingresso INP1 e jumper S8 e S6 per l'ingresso INP2 su TTL come visibile nella
foto che segue.
Per impostare la modalit� Optoisolata basta spostare i jumper S6 S8 S9 S11 su
OPT
Naturalmente i due ingressi sono completamente indipendenti quindi �
possibile configurare ad esempio l'ingresso 1 in modalit� TTL e l'ingresso 2 in
modalit� optoisolata o viceversa.
L'ingresso etichettato "INP1" � connesso alla linea GPIO1 mentre l'ingresso
"INP2" e il pulsante S12 posto vicino al morsetto JP10 sono connessi alla linea
GPIO8 del modem Telit.
import GPIO
import MOD
print "\r\nTEST INPUT'\r\n"
#SETTO LA DIREZIONE DEI PORT
r=GPIO.setIOdir(7,0,1) #setto il port 7 come output e ha come valore di default
0
r=GPIO.setIOdir(6,0,1) #setto il port 6 come output e ha come valore di default
0
r=GPIO.setIOdir(1,0,0) #setto il port 1 (INP2) come input
r=GPIO.setIOdir(8,0,0) #setto il port 8 (INP1) come input
while (1):
if(GPIO.getIOvalue(1)==0):
print "VALORE GPI 1 == ZERO\r\n"
s=GPIO.setIOvalue(7,0) #Rele' K2 Off
else:
print "VALORE GPI 1 == UNO\r\n"
s=GPIO.setIOvalue(7,1) #Rele' K2 ON
if(GPIO.getIOvalue(8)==0):
print "VALORE GPI 8 == ZERO\r\n"
s=GPIO.setIOvalue(6,0) #Rele' K1 Off
else:
print "VALORE GPI 8 == UNO\r\n"
s=GPIO.setIOvalue(6,1) #Rele' K1 ON
MOD.sleep(10) #Pausa di un secondo
Sorgente: TEST_INPUT.py
Trasmissione seriale su RF con modulo ER400TRS
La SX-PY, opzionalmente, pu� essere equipaggiata con un modulo Easy Radio
ER400TRS, per la trasmissione via radio di dati seriali. Tale modulo consente di
stabilire un affidabile link seriale senza utilizzare fili. Il modulo integra
gi� tutte le funzionalit� necessarie ad una trasmissione radio: codici a
controllo di errore, gestione delle ritrasmissioni, controllo di potenza, ecc.
La copertura massima teorica del modulo ER400TRS � di
250m.
Per maggiori informazioni sull'ER400 Trasmissioni in Radiofrequenza facili con Easy Radio
Per installare il modulo ER400TRS sulla SXPY � sufficiente: saldarlo
nell'apposito spazio etichettato con la sigla U5 affianco al modem Telit
(vedi punto 1 nella foto che segue), montare uno spezzone di filo (vedi punto 2
nella foto che segue) con lunghezza di 17
cm (lamba/4) oppure 34 cm (lamba
mezzi) e posizionare su ON i contatti 3 e 4 del dipswitch S5 .
Il dipswitch S5 serve per commutare la seriale del modem verso: l'uscita RS232 sul
connettore DB9 femmina, il modulo RF oppure sull'espander "EXP 2".
Posizione Dipswitch |
Periferica |
1 e 2 ON |
Seriale RS232 "SERIAL DCE" |
3 e 4 ON |
Modulo RF |
5 e 6 ON |
Seriale su EXP2 |
Le periferiche seriali non possono operare contemporaneamente.
Prima di ridirigere la seriale verso le altre periferiche, � necessario caricare il proprio
firmware usando la seriale "SERIAL DCE".
Per consentire all'interprete Python presente nel modem di interagire con la
seriale � necessario includere nei propri script il modulo SER.
import MOD
import SER
r=SER.set_speed('19200') #Setta la velocit� della seriale
i=0
while (1):
text='Test Seriale Modem TELIT Py %d\r\n' % i
r=SER.send(text) #trasmette dati
i=i+1
r=SER.receive(10) #riceve dati
print "RX> "
print r
print "\r\n"
MOD.sleep(10)
Sorgente:
TEST_SERIALE.zip
Il link seriale RF pu� essere adoperato per: comandare la
SX16-RF una completa scheda d'espansione I/O wireless, oppure per
connettere via onde radio la SXPY direttamente ad un PC dotato del modulo
USBRF04.
Inviare un SMS
Scrivere un semplice programma Python che invii un SMS alla pressione di un pulsante usando un modem Telit e la SXPY � un operazione molto semplice.
Grazie alla speciale libreria MDM inclusa nell'interprete Python 1.5
integrato nel GM862-PY/GPS � possibile inviare comandi AT direttamente al core del
modem senza passare per collegamenti esterni.
Possiamo quindi con pochissime righe di codice inviare qualsiasi comando AT
supportato dal Telit ed attendere una risposta.
MDM.send("AT") #Invia la stringa AT al modem
MDM.receive(3) #Attende la risposta per 3 sec ptima di uscire per timeout
Nel nostro programma di prova useremo il comando AT che permette di inviare un
SMS in formato TEXT
AT+CMGS="xxxxxxxxx"
>messaggio
^Z
dove xxxxxxxxx � il numero del destinatario.
Maggiori informazioni su tutti i comandi AT supportati dai modem Telit GM862
sono disponibili nella documentazione ufficiale disponibile sul sito del
produttore
www.telit.com.
Sorgente:
TEST_SEND_SMS.zip
Analizzando il sorgente vediamo che oltre alla funzione per inviare l'SMS
def SendSMS(gsmnumber, message):
� presente una seconda funzione:
def InitModem():
Questa oltre a verificare lo stato del modem, imposta la modalit� TEXT
per la gestione degli SMS e il centro servizi.
Quest'ultimo � un numero GSM che varia a seconda dell'operatore telefonico scelto
e va richiesto direttamente a quest'ultimo. Si imposta con la variabile
_SERVICE_CENTER.
Prima di caricare il programma nella memoria del modem � necessario impostare
nel sorgente anche il numero del destinatario contenuto nella variabile
_GSMNUMBER.
La SIM card da usare in questo esempio deve avere il codice di sicurezza PIN
disabilitato.
Con i modem Telit GM862 � possibile usare solo SIM card GSM (il
modem non supporta SIM card UMTS)
Ricevere un SMS
Sempre usando la libreria MDM descritta nel paragrafo precedente � possibile
realizzare un semplice programma in Python capace di legge gli SMS
ricevuti dal modem e visualizzarli su console.
Il comando AT per leggere un SMS posto in una specifica locazione di memoria
della SIM �:
AT+CMGR=index
index � un valore numerico che va normalmente da 1 a 10.
Se � stata precedentemente impostato il trattamento degli SMS in modalit� TEXT
con il comando AT+CMGF=1 e se nella SIM � contenuto almeno un SMS inviando in
sequenza i comandi
AT+CMGR=1
AT+CMGR=2
....
AT+CMGR=10
appena il messaggio viene trovato riceviamo dal modem una
risposta simile a quella che segue:
+CMGR: "REC READ","+393xxxxxxx",,"07/01/15,18:36:34+04"
Prova desantix
OK
in caso di locazione vuota il modem ritorna la stringa:
+CMS ERROR: 310
Il sorgente fornito esegue la procedura appena descritta in automatico
visualizzando il testo dell'SMS trovato sulla console di debug.
Sorgente:
test_read_sms.zip
Rivelare la caduta di tensione
Per far si che il modem Telit sia in grado di rivelare l'assenza di rete
elettrica � fondamentale che sia montata la batteria a ioni di litio di backup e che la
SX-PY sia configurata per gestirla (vedi paragrafo Alimentare la SX-PY),
altrimenti in caso di mancata alimentazione il modem si spegner�.
Il comando AT che ci permette di verificare lo stato dell'alimentazione � AT+CBC?.
Inviando il comando al modem questo ritorna la stringa +CBC: seguita da due numeri separati da virgola.
Il primo numero ha valore 0 se il modem � alimentato dalla batteria o 1
se � presente l'alimentazione principale.
La seconda cifra ha valore sempre uguale 0 se � presente l'alimentazione
esterna mentre pu� assumere i valori : 100, 75, 50, 25 o 0 che rappresentano in
percentuale lo stato di carica della batteria, in assenza di rete.
Alimentazione esterna presente:
AT+CBC?
+CBC: 1,0
OK
Alimentazione da batteria di backup:
AT+CBC
+CBC: 0,100
OK
Il sorgenti di test fornito invia ciclicamente il comando AT+CBC? ed effettua il
parser della risposta. In caso di assenza di rete visualizza su console il
messaggio di allarme e lo stato di carica della batteria. Se il valore di quest'ultima
scende al 25% il firmware invia al modem il comando AT#SHDN per effettuare lo
shutdown di quest'ultimo.
Sorgente:
test_alimentazione.zip
Download
Schema
elettrico della SX-PY:
SXPY_SchemaElettrico.pdf
Posizione componenti sulla SX-PY:
SXPY_Topologico.pdf
SxPyDownloadToolSetup.zip
Articoli correlati
Piattaforma di Telecontrollo GSM-Python: potenza e semplicitÃ
Eseguire uno script Python su un modem Telit
Espandere ingressi e uscite della GSM485 collegando la scheda EXP485
Connessioni GPRS con la SXPY e modem Telit GM862
Compilare i programmi Python per modem Telit
Segnala questo articolo:
Parole chiave: - Domotica - How-To - Python - Schede Area SX - Telecontrollo -
|