Eseguire uno script Python su un modem Telit Data di pubblicazione: 30-04-2006 | Versione Italiana | (No English Version) Parole chiave: - Python - |
In questo articolo andiamo a scoprie tutte le potenzialit� dei nuovi modem Telit (http://www.telit.co.it/) caratterizzati dalla sigla PY. Questi modelli sono equipaggiati con un interprete Python 1.5.2+ che permette loro l'esecuzione di script caricati tramite collegamento seriale.
Python � un linguaggio di programmazione interpretato open source molto potente e flessibile caratterizzato da una
curva di apprendimento estremamenteripida, grazie anche ad una sintassi semplice e pulita. La sua implementazione, sempre pi� diffusa, rende oggi possibile l'esecuzione di un programma scritto in Python sui pi� vari sistemi operativi: Unix, Linux, Windows, DOS, OS/2, Mac, Amiga, Palm, Nokia Symbian serie 60.
Il sito di riferimento, in cui poter trovare i vari interpreti e tutta la documentazione necessaria per cominciare ad usare questo fantastico linguaggio di programmazione, � www.python.org.
I 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.
Nello schema a blocchi che segue � possibile vedere tutte le parti che compongono il modem e come interagiscano fra loro.
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_r15.pdf
oppure in fondo a questo articolo
L'applicazione di esempio che verr� descritta di seguito, oltre ad essere una rapida guida su come caricare ed usare gli script scritti in Python nei modem
Telit, vuole anche essere una dimostrazione potenzialit� fornite da questa nuova accoppiata.
In particolare andremo a realizzare un semplice dispositivo in grado di inviare un SMS alla pressione di un pulsante, il tutto usando esclusivamente un modem Telit PY e una manciata di componenti elettronici esterni.
Per comodit� il modello usato in questo articolo � il Telit EZ10-PCS PYG, versione boxata del GM862-QUAD-PY, gi� equipaggiata di circuito di alimentazione e adattatore di livelli RS232.
Oltre al modem per la stesura di questo articolo � stato usato:
Sul fianco destro del Telit EZ10-PCS PYG, quello dove si trova la porta seriale, � presente una presa RJ11 a sei poli che, solo nella versione equipaggiata con l'interprete Python, � collegata direttamente a quattro port di Input / Output. Questi port consentono di interfacciare il modem con eventuale elettronica esterna: LED, pulsanti, circuiti integrati, sensori, ecc.
Di seguito � riportato il pinout della presa RJ11.
PIN |
Segnale |
I/O |
Funzione |
Tipo |
1 |
GND |
- |
Power |
GND |
2 |
GPIO4 |
I/O |
Generico I/O configurabile |
CMOS 2.8V |
3 |
GPIO6 |
I/O |
Generico I/O configurabile / ALLARME |
CMOS 2.8V |
4 |
GPIO7 |
I/O |
Generico I/O configurabile / BUZZER |
CMOS 2.8V |
5 |
GPIO5 |
I/O |
Generico I/O configurabile |
CMOS 2.8V |
6 |
VMOD |
O |
Massa |
VCC |
Per realizzare la nostra applicazione di esempio dobbiamo realizzare su demo board un elementare circuito elettronico, composto da tre LED collegati a relativi resistori di limitazione da 150ohm e un pulsante con resistore di pull up da 10Kohm, secondo lo schema riportato di seguito:
I collegamenti tra modem e demo board possono essere realizzati usando una comune spina RJ11 a sei poli e circa dieci centimetri di piattina sempre a sei poli.
Terminati i collegamenti con la demo board dobbiamo collegare il modem ad un PC usando una prolunga seriale a 9 poli completa di tutti i controlli
di flusso. Nel caso il cui il PC che stiamo usando non fosse dotato di porta
seriale, sempre pi� rara nei nuovi modelli, possiamo ovviare all'inconveniente
con un convertitore USB - Seriale (http://www.areasx.com/index.php?page=scheda.php&id=263).
A questo punto possiamo inserire una SIM GSM (verificare che la SIM disponga di credito e non abbia impostato il codice PIN di protezione) nell'apposito alloggiamento push-push presente
sul fianco sinistro del modem Telit, collegare l'antenna GSM al connettore coassiale SMA e alimentare il modem tramite l'apposito alimentatore a parete.
Conclusi i vari collegamenti elettrici, passiamo ad analizzare il programma in Python da caricare nel modem.
Per chi volesse cominciare a programmare in Python di seguito vengono indicati solo alcuni dei siti che si trovano online contenenti corsi e documentazione
completamente gratuita.
http://www.python.org/doc/current/tut/tut.html
http://www.hetland.org/python/instant-python.php
http://www.python.it
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 l'EZ-10-PY.
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 <nome del file> indica il nome con cui verr� salvato lo script nella memoria del modem, mentre il parametro <size> 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 <size> 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>"
Conclusione
In questo articolo abbiamo visto solo una parte delle innumerevoli potenzialit� di questa nuova generazione di modem che da soli sono capaci di sostituire complicati circuiti basati su
microprocessore e che, grazie alla semplicit� di programmazione del linguaggio Python, permettono la realizzare in modo semplice ed economico di sistemi Mobile
To Mobile (M2M).
Link utili
http://www.telit.co.it/modules.asp
http://www.python.org/doc/current/tut/tut.html
http://www.hetland.org/python/instant-python.php
http://www.python.it
Download:
Sorgente in Python
Telit_Easy_Script_Python_r15.pdf
Segnala questo articolo:
Parole chiave: - Python -
|