Programmare in Python il Gatetel EzMOTOData di pubblicazione: 20-02-2015 | Versione Italiana | (No English Version)
|
In questo articolo vediamo passo passo come installare tutto il necessario per programmare il
Gatetel EzMOTO in Python
Il Gatetel EzMOTO è una compatto box che racchiude in soli 10cm x 12cm: un potente processore
ARM da 700Mhz con 512Mb di RAM (attualmente basato su Raspberry Pi);
un modem Telit HE910-EUG con tecnologia GSM/GPRS/UMTS/HSPA e A-GPS; un microprocessore di servizio
per la gestione delle periferiche di I/O.
Maggiori dettagli sul EzMOTO sono disponibili leggendo articolo: SXPi non solo una Linux Box
Scopo di questa pagina è mostrare come programmare la Linux box di Gatetel usando il linguaggio Python.
Python è un linguaggio di programmazione ad alto livello,
orientato agli oggetti, largamente diffuso su molteplici piattaforme
e di facile apprendimento.
Requisiti hardware
Per cominciare a sviluppare sul EzMOTO il corredo hardware minimo necessario è il seguente:
Collegamenti elettrici
Il Gatetel EzMOTO va alimentato con una tensione compresa tra 6V e 55V,
da applicare sui contatti 1 e 3 del MOLEX MICRO a 4 poli
rispettando la polarità visibile nell'immagine che segue:
L'alimentatore deve essere in grado di erogare una corrente di picco pari a 2A.
Per poter utilizzare il modem GSM/UMTS e GPS Telit integrato,
è necessario collegare le due rispettive antenne con contatto FAKRA:
Accesso in console Seriale e SSH
L' accesso alla console del sistema operativo Linux Debian pre installato sul EzMOTO,
è possibile tramite collegamento alla seriale su DB9 sita sul lato uscita GPIO, impostando una velocità di comunicazione di 115200bps;
oppure tramite accesso SSH da un PC collegato alla stessa rete LAN.
Per default la distribuzione Linux viene fornita con la configurazione della LAN in DHCP mode.
Le credenziali di accesso sono:
login: pi
password: pi
La modifica dell'indirizzo IP e l'impostazione dell'indirizzo del gatway per l'accesso
ad internet si effettua
editando il file interfaces presente in etc, con il comando:
:~# vi /etc/network/interfaces
Nel file interface è necessario cambiare i valori di:
address ,
netmask e
gateway
con i parametri compatibili con la propria rete LAN.
Oltre ai parametri di rete è indispensabile impostare sul EzMOTO
l'indirizzo dei server DNS. Quest'ultima operazione si effettua editando il file resolv.conf:
:~# vi /etc/resolv.conf
ed inserire:
nameserver 8.8.8.8
Dopo un reboot del EzMOTO è possibile testare la corretta configurazione dell'accesso ad internet
con un ping:
:~# ping www.areasx.com
Python e le librerie aggiuntive
Nell'immagine standard Linux Rasbian precaricata sulla micro SD da 8Gb,
fornita assieme al EzMOTO
è già installato l'interprete Python nella versione 2.7.
Utili se non indispensabili sono le librerie secondarie come:
pySerial è una libreria fondamentale per consentire all'interprete Python di
utilizzare le porte seriali per comunicare con il modem Telit integrato.
Per l'installazione sul EzMOTO è sufficiente digitare su console SSH il comando:
apt-get install python-serial
RPi è una libreria sviluppata per consentire a Python di interfacciarsi alle linee GPIO della famosa scheda Raspberry Pi.
sudo apt-get install python-rpi.gpio
python-smbus è un modulo Python che consente l'accesso SMBus attraverso l'interfaccia I2C / dev su host Linux.
Questo modulo è indispensabile per consentire alla Raspberry di comunicare con il coprocessore che gestisce le periferiche esterne del EzMOTO.
Se non già installata procedere con il comando:
sudo apt-get install python-smbus
pySqlLite è un modulo permette di creare e gestire dei database locali in SQLite.
Per l'installazione, sempre da console, digitare:
apt-get install python-sqlite
MySQLdb è una libreria che permette a Python di interagire con i server Mysql.
Da console:
apt-get install python-mysqldb
Si ricorda che per effettuare l'installazione dei pacchetti con il comando apt-get
è indispensabile configurare un accesso internet al EzMOTO.
Per caricare un programma Python sul EzMOTO è necessario disporre di un client
FTP o SFTP (es WinSCP); collegarsi all'IP della Linux Box autenticarsi e trasferire lo
script nella path es /home.
Prima di lanciare lo script, da console SSH è necessario renderlo eseguibile con il comando:
:/home/# chmod +x SCRIPT.py
Per eseguire il progrmmma:
:/home/#./SCRIPT.py
Schema e collegamenti interni del EzMOTO
Di seguito sono rappresentate le connessioni elettriche all'interno del EzMOTO
Controllare le periferiche connesse direttamente al processore ARM
Vengono direttamente controllati dai GPIO del processore Linux ARM 11
alcune periferiche come: modem,relè e LED.
La tabella che segue riporta il PIN fisico e il GPIO della Raspberry interna associato al
dispositivo connesso.
Dispositivo | GPIO Raspberry Pi | PIN Raspberry Pi | Direzione |
Relè 30V 1A | 25 | 22 | Out |
Power Monitor Telit HE910 | 18 | 12 | In |
ON/OFF Telit HE910 | 22 | 15 | Out |
Reset Telit HE910 | 11 | 23 | Out |
Enable USB Power | 23 | 16 | Out |
Linea watchdog cooprocessore | 4 | 7 | Out |
Led Verde (lato ethernet) | 27 | 13 | Out |
Il codice che segue mostra come, in Python, inizializzare le linee del processore ARM
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22, GPIO.OUT, initial=GPIO.LOW) #Linea (OUTPUT) RELE'
GPIO.setup(23, GPIO.OUT, initial=GPIO.LOW) #Linea (OUTPUT) Reset Modem
GPIO.setup(15, GPIO.OUT, initial=GPIO.LOW) #Linea (OUTPUT) Power Modem
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #Linea (INPUT) Status Modem
GPIO.setup(16, GPIO.OUT, initial=GPIO.LOW) #Linea (OUTPUT) USB Power
GPIO.setup(13, GPIO.OUT, initial=GPIO.LOW) #Linea (OUTPUT) Led Green
GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) #Linea (OUTPUT) watchdog
Il codice completo è disponibile nell'area download Test_GPIO_ARM11.zip
Comunicare con il modem Telit HE910
Il modem Telit HE910 integrato nel EzMOTO è connesso al processore ARM 11 via USB
ed è controllato (start e reset) tramite i GPIO 23 e 15.
Al boot del EzMOTO il modem è spento e va acceso portando alta la linea GPIO 15 per circa 3 sec.
Ricordiamo che prima di accendere il modem è necessario collegare l'antenna GSM ed inserire
nell'apposito alloggio una SIM GSM/UMTS.
Il corretto avvio del modem è segnalato dal lampeggio del led rosso vicino al connettore ethernet.
Una volta acceso,il modem è accessibile dal sistema LINUX sul device /dev/ttyACM0
ser = serial.Serial("/dev/ttyACM0")
ser.baudrate = 11500
ser.open()
ser.write("AT\r")
time.sleep(0.5)
rxchr=ser.inWaiting()
if(rxchr>0):
rxbuff=ser.read(rxchr)
print "RX:"
print rxbuff
Il Telit HE910 oltre ad essere un sofisticato modem GSM/GPRS/UMTS/HSDPA è anche un performante ricevitore A-GPS.
L'interrogazione del GPS da parte del ARM11 avviene attraverso lo stesso device del modem (/dev/ttyACM0) inviando comandi AT.
ser.write("AT$GPSP=1\r") #Comando AT$GPSP accende GPS
time.sleep(0.5)
rxchr=ser.inWaiting()
if(rxchr>0):
rxbuff=ser.read(rxchr)
print "RX:"
print rxbuff
time.sleep(5.0)
ser.write("AT$GPSACP?\r") #Comando AT$GPSACP recupera attuale posizione
time.sleep(0.5)
rxchr=ser.inWaiting()
if(rxchr>0):
rxbuff=ser.read(rxchr)
print "RX:"
print rxbuff
Ricordiamo che per utilizzare il ricevitore GPS, è necessario collegare l'apposita attena al EzMOTO, e posizionarla
all'aperto per avere un FIX valido.
Il codice completo è disponibile nell'area download Test_MODEM.zip
Controllare le preiferiche gestite dal coprocessore
All'interno del EzMOTO, collegato in I2C bus al processore ARM11 principale, trova posto un coprocessore basato su PIC18F65K22
pre programmato.
Grazie a questo coprocessore è possibile gestire ulteriori GPIO come: LED, linee di input (0-50V) e output (Open Collector max 250mA),
ADC a 12Bit in tensione 0-15V e in corrente 0-20mA e porte seriali
RS232/RS485.
Tutti questi GPIO supplementari sono disponibili sul connettore MOLEX da 24 poli:
import smbus
bus = smbus.SMBus(1)
bus.write_byte_data(0x04,0x03,0x00) #Disabilita il Watchdog
din = bus.read_byte_data(0x04,0x01) #Stato degli ingressi
Il codice completo: Test_I2C_IO.zip
Il circuito per testare gli ingressi ADC è il seguente:
adc_lsb = bus.read_byte_data(0x04,0x08)
adc_msb = bus.read_byte_data(0x04,0x09)
adc = adc_lsb + (adc_msb<<8)
print "ADC 1 = %.03f V [0x%X 0x%X] " % (float(adc) / 1000, adc_msb, adc_lsb)
Il codice completo: Test_I2C_ADC.zip
Il codice completo: Test_I2C_RS485.zip
Connessione ad un server MySQL
Scrivere un programma in Python che consenta al EzMOTO di collegarsi ad un server MySQL
grazie alla libreria MySQLdb diventa estremamente facile.
import MySQLdb
MYSQL_HOST = "127.0.0.1"
MYSQL_PORT = 3306
MYSQL_USER = "root"
MYSQL_PASSWD = "xxxxx"
MYSQL_DB = "test"
Conn = MySQLdb.Connect(host = MYSQL_HOST, port = MYSQL_PORT, user = MYSQL_USER, passwd = MYSQL_PASSWD, db= MYSQL_DB )
print "Connessione con il server MySql %s riuscita" % MYSQL_HOST
Cursor = Conn.cursor(MySQLdb.cursors.DictCursor)
Cursor.execute("SELECT * FROM prova")
rows = Cursor.fetchall ()
for row in rows:
print "%s, %s, %s" % (row["id"], row["nome"], row["cognome"])
Il server MySQL può essere remoto ma anche locale. E' possibile installare MySQL Server con il comando:
sudo apt-get install mysql-server --fix-missing
Gestione di un database locale SQLite
Se per il proprio progetto si ha la necessità di un piccolo e leggero
database da gestire su un semplice file SQLite è la soluzione.
Per lavorare con SQLite in Python:
import sqlite
dbFileName = "anagrafe.db"
conn = sqlite.connect(database=dbFileName,autocommit=0)
cur = conn.cursor()
query ="CREATE TABLE anagrafe (id INTEGER PRIMARY KEY, nome VARCHAR(25), cognome VARCHAR(25))"
cur.execute(query)
conn.commit()
Link utili
Articolo: SXPi non solo una Linux Box
Sito: www.python.org
Documentazione EzMOTO
EZmoto_Product_Description_R6_10_01_2014.pdf
Telit_HE910_UE910_AT_Commands_Reference_Guide_r5.pdf
Telit_HE910_A-GPS_Application_Note_r3.pdf
Download
Progrmma di test GPIO ARM11 Test_GPIO_ARM11.zip
Progrmma di test Modem Telit Test_MODEM.zip
Progrmma di test I/O su I2C Test_I2C_IO.zip
Progrmma di test ADC su I2C Test_I2C_ADC.zip
Progrmma di test RS485 su I2C Test_I2C_RS485.zip
Segnala questo articolo:
|