Programmare in Python la SXPiData di pubblicazione: 17-11-2015 | Versione Italiana | (No English Version)
|
In questo articolo vediamo passo passo come installare tutto il
necessario per programmare la SXPi in Python
La SXPi è una completa Linux Box da barra DIN. In un compatto box
plastico di 97mm x 105mm (6 moduli) la SXPi racchiude: un potente processore
ARM da 700Mhz con 512Mb di RAM (basato su Raspberry Pi 2);
un modem Telit HE910 GSM/UMTS con tecnologia GSM/GPRS/UMTS/HSPA(versione 3G).
Maggiori dettagli sul SXPi sono disponibili leggendo articolo: SXPi non solo una Linux Box
Scopo di questa pagina è mostrare come programmare la Linux box
SXPi usando il linguaggio di programmazione Python.
Python è un linguaggio ad alto livello,
orientato agli oggetti, largamente diffuso su molteplici piattaforme
e di facile apprendimento.
Requisiti hardware
Per cominciare a sviluppare sulla SXPi il corredo hardware
minimo necessario è il seguente:
Collegamenti elettrici
La SXPi va alimentata con una tensione compresa tra 9V e 24V CC (18V AC),
da applicare sul morsetto a vite da 2 poli.
La tensione di alimentazione può essere alternata (max 18v) o continua; in quest'ultimo caso non
è necessario rispettare alcuna polarità.
La SXPi-3G ha un consumo offline (GPRS e LAN non connessi) di circa 140mA, le due porte USB possono
alimentare dispositivi fino ad un massimo di 500mA per porta; pertanto l'alimentatore dovrà poter orogare una corrente
massima superiore ai 1000mA.
Per poter utilizzare il modem GSM/UMTS e GPS Telit integrato (SXPi 3G),
è necessario collegare le due rispettive antenne con contatto SMA:
La SXPi è dotata di due uscite open collector (corrente max 500mA) su connettore MicroFit. Per controllare i relè è necessario
rispettare lo schema elettrico che segue:
Accesso in console Seriale e SSH
L' accesso alla console del sistema operativo Linux Debian pre installato sulla SXPi,
è possibile tramite collegamento alla seriale su RJ11 sita sul lato antenna GSM, impostando una velocità di comunicazione di 115200bps;
oppure tramite accesso SSH da un PC collegato alla stessa rete LAN.
Di seguito lo schema elettrico del cavo console:
Per default la distribuzione Linux viene fornita con la configurazione della LAN in DHCP mode.
Le credenziali di accesso sono:
login: sxpi
password: sxpi
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 della SXPi è 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 alla SXPi
è 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 sulla SXPi è sufficiente digitare su console seriale o 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
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 per la SXPi.
Per caricare un programma Python sulla SXPi è 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 della SXPi
Di seguito sono rappresentate le connessioni elettriche all'interno della SXPi
Controllare le periferiche di I/O
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 |
Ingresso Optoisolato 1 | 10 | 19 | In |
Ingresso Optoisolato 2 | 9 | 21 | In |
Pulsante | 4 | 7 | In |
Open Collector 1 | 8 | 24 | Out |
Open Collector 2 | 7 | 26 | Out |
Led Rosso (bicolore) | 27 | 13 | Out |
Led Verde (bicolore) | 17 | 11 | Out |
Power Monitor Telit HE910 | 18 | 12 | In |
ON/OFF Telit HE910 | 22 | 15 | Out |
Reset Telit HE910 | 11 | 23 | 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(19, GPIO.IN, pull_up_down=GPIO.PUD_UP) #IN Optoisolato
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP) #IN Optoisolato
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Tasto Reset
GPIO.setup(13, GPIO.OUT, initial=GPIO.LOW) #OUT LED RED
GPIO.setup(11, GPIO.OUT, initial=GPIO.LOW) #OUT LED GREEN
GPIO.setup(24, GPIO.OUT, initial=GPIO.LOW) #OUT Out OC 1
GPIO.setup(26, GPIO.OUT, initial=GPIO.LOW) #OUT Out OC 2
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(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #Linea (INPUT) Status Modem
E come pilotarli:
while(1):
print "LED OFF"
GPIO.output(13, False) #Led Rosso off
GPIO.output(11, True) #Led Verde on
time.sleep(1.5)
print "LED ON"
GPIO.output(13, True)
GPIO.output(11, False)
#Test ingressi OPTO
print "Test Ingressi Optoisolati"
if(GPIO.input(19)==0):
print "IN1 OPTO OK"
if(GPIO.input(21)==0):
print "IN2 OPTO OK"
if(GPIO.input(7)==0):
print "Pulsante chiuso"
print "Test Uscite Open Collector"
print "OC ON"
GPIO.output(24, True)
GPIO.output(26, True)
time.sleep(1.5)
print "OC OFF"
GPIO.output(24, False)
GPIO.output(26, False)
Comunicare con il modem Telit HE910
Il modem Telit HE910 integrato nella SXPi è connesso al processore ARM 11 via USB
ed è controllato (start e reset) tramite i GPIO 23 e 15.
Al boot della SXPi 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 giallo presente sulla parte superiore della SXPi.
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 codice completo è disponibile nell'area download Test_MODEM.zip
Controllare la porta RS485 ed RS232
La SXPi integra un doppio convertitore USB<->RS232 direttamente connesso ad una porta USB della
Raspberry. Il convertitore FTDI FT2232 fornise alla SXPi due ulteriori porte seriali fisiche
accessibile dal sistema LINUX sui device /dev/ttyUSB0 e /dev/ttyUSB1.
Di seguito il pinout della porta seriale RS232 (/dev/ttyUSB0)
Di seguito il pinout della porta seriale RS485 (/dev/ttyUSB1)
ser = serial.Serial("/dev/ttyUSB1")
ser.baudrate = 11500
ser.open()
ser.write("Test SXPi!\r")
time.sleep(0.5)
rxchr=ser.inWaiting()
if(rxchr>0):
rxbuff=ser.read(rxchr)
print "RX:"
print rxbuff
time.sleep(2.0)
Il codice completo: Test_RS485.zip e Test_RS285.zip
Connessione ad un server MySQL
Scrivere un programma in Python che consenta alla SXPi 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 sulla SXPi 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
Sito: www.raspberrypi.org
Sito: www.telit.com
Documentazione
Telit_HE910_UE910_AT_Commands_Reference_Guide_r5.pdf
Manuale_SXPi.pdf
Download
Progrmma di test GPIO Test_SxPi.zip
Progrmma di test Modem Telit Test_MODEM.zip
Progrmma di test RS485 Test_RS485.zip
Progrmma di test RS232 Test_RS232.zip
Progrmma di test EXP485 Test_EXP485.zip
Segnala questo articolo:
|