Newsgroup: it.hobby.elettronica.digitale
Titolo: Python?

Ciao,
molto spesso mi capita di dover realizzare dei piccoli programmilli per 
interfacciarmi con le mie schede micro.
Tipicamente si tratta di impostare qualche parametro, caricare e 
scaricare la configurazione o altra robetta del genere.
Ovviamente serve l'interfaccia grafica.
Usare .NET è un overkill... infatti si deve installare tutto il 
framework (e, si, non tutti ce l'hanno già) per un programmino di poche 
righe.
Stavo facendo qualche esperimento con le QT4 ma mi è capitato 
sott'occhio Python.
L'ho scaricato e installato come Eclipse plug-in.
Domande:
1) secondo voi è valido per l'utilizzo che ho descritto? Diciamo che mi 
servono i comuni controlli (text box, pulsanti, combo box, tabelle, 
immagini, ecc....) e soprattutto un *buon* supporto per le seriali che 
ne uso a bizzeffe, cosa che le QT4 non hanno.
2) sto facendo i primi hello world e già ci sono problemi, ma questo è 
ovvio. Però pensando al futuro, la GUI si può disegnare stile VB oppure 
bisogna crearsela da codice?
Grazie!
Marco


wrote:

Dunque, veniamo con ordine :-)
Premetto che sono un fan di python, sono stato pure alal pycon l'anno
scorso e l'ho usato in mille modi
per testare i miei prototipi quando lavoravo coi microcontrollori.
Per quanto riguarda le interfacce grafiche puoi usare pyQT, WxPython,
pyGTK o Tkinter come preferisci.
In particolare per pyGTK, WxPython e QT ci sono dei designer (cerca
Glade e wxGlade per gtk e wxpython e qt designer per pyQT).
Per quanto riguarda l'interfacciamento delle porte:
http://org.csail.mit.edu/pybluez/
 libreria per bluetooth
http://bleyer.org/pyusb/
 libreria USB per i chip FTDI
http://pyserial.sourceforge.net/
 Libreria per la RS-232
Volendo c'è anche pyParallel per la porta parallela.
Poi segnalo un'altra chicca che è 
http://www.myhdl.org/doku.php/start
per trasformare il codice python in VHDL :-D
Se ti interessa imparare dai libri c'è Dive into python (http://
diveintopython.org/
) scaricabile dalla rete (c'è anche in italiano mi
pare) e Learning Python di Mark Lutz editore O'Reily.
Un altro interessante è How to think as a computer scientist (http://
www.greenteapress.com/thinkpython/thinkpython.html
) sempre scaricabile
da interent liberamente, c'è anche in italiano sia la versione Java
che Python.
Possono anche fare comodo:
http://www.scipy.org
 Libreria scientifica
http://www.python-excel.org/
 Usare python per lavorare coi fogli excel
http://opensource.nokia.com/projects/pythonfors60/
 Versione per i
nokia con symbian s60
Se poi qualcuno di Develer fa la grazia di rispondere giacché ne ho
visti diversi in questo ng ;-) loro sono molto molto ferrati su python
e lo usano per moltissime cose!
Di sicuro sanno darti più consigli e spiegazioni di me.
Saluti

Marco Trapanese ha scritto:

Ecco quello di Develer che risponde :-)
Python e Qt sono le tecnologie preferite nella nostra azienda.
Siamo partner Nokia Qt e siamo tra gli organizzatori della conferenza 
Pycon (
http://www.pycon.it
) che si tiene a Firenze tutti gli anni.
Quindi le mie opinioni sono ovviamente di parte.
Detto questo, io faccio *tutti* i software di controllo in Python e Qt.
Il supporto per la seriale è eccellente grazie al già nominato pyserial. 
L'ho usato più volte e funziona in modo eccellente.
Per disegnare le gui, come già indicato, puoi usare il Qt Designer e poi 
importare dinamicamente il file .ui che la descrive.
Il wizard di configurazione di BeRTOS è appunto fatto in PyQt disegnato 
con il Qt Designer.
Uso molto Python anche senza gui, per la creazione di script di collaudo 
e test automatici per le schede embedded che sviluppiamo.
Quando dobbiamo sviluppare software su Linux embedded, se possibile 
usiamo anche lì Python, che garantisce una produttività elevata.
Anche se è interpretato, è comunque possibile ottenere prestazioni di 
tutto rispetto, bindandosi con codice C nei punti critici.
Quindi, IMHO una validissima alternativa al mondo .NET, che oltretutto, 
non è altrettanto portabile.
Se hai domande specifiche chiedi pure!
-- 
  _|/ Francesco Sacchi - Develer S.r.l., R&D dept.
   |\ 
http://www.develer.com/
 - 
http://www.bertos.org/

 nokia con symbian s60
Wow grazie dei link!
A questo punto la domanda è ovvia: quali sono le limitazioni di Python?
In quali casi non è più conveniente ed è quindi meglio usare .NET?
Grazie ancora
Marco

 scorso e l'ho usato in mille modi
Ah, ok, per fortuna non ho risposto subito. A me i linguaggi non "strongly
typed" mi fanno orrore. ;-)
Altra alternativa, per fare programmi "leggeri" e di facile installazione è
Delphi, ma ho visto i prezzi dei compilatori, assai poco appetibili...

 Se hai domande specifiche chiedi pure!
Come al solito se mi puoi segnalare un forum di riferimento 'attivo' 
dove leggere prima di fare domande banali :)
Grazie mille!
Marco

 dove leggere prima di fare domande banali :)
www.python-it.org

 
www.python-it.org
Bene, vado a studiare un po'.
Comunque sono già riuscito a richiamare una GUI creata dal Designer da 
un programma Python. Solo che mi sembra un po' scomodo ad ogni modifica 
fatta dal Designer andare ad eseguire da riga di comando il pyuic4 per 
ottenere il file py.
Sicuramente c'è un automatismo già nel Designer. Vado a spluciare il forum!
Grazie!
Marco

 Sicuramente c'è un automatismo già nel Designer. Vado a spluciare il forum!
Trovato:
uic.loadUiType() e passa la paura :)
bello bello.
Marco

Marco Trapanese ha scritto:

Dai un'occhiata anche qui:
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#using-qt-designer


 necessario?
Oltre a py2exe c'è anche pyinstaller:
http://www.pyinstaller.org/


 
http://www.pyinstaller.org/
Grazie!
Marco

 .ui che la descrive.
Quello che dici mi incuriosisce molto: noi sviluppiamo
i nostri software di controllo / configurazione / elaborazione
in C++ Builder (fratello del Delphi) o VB. Il primo è
eccellente da tutti i putni di vista, solo che le vicende
alterne del produttore ed il costo delle licenze cominciano
a creare qualche problema in prospettiva. Il VB era
decente prima che subentrasse il .NET, adesso oltre
ad avere un ambiente di sviluppo lento e pensante ti
costringe ad installare decine e decine di MB di
framework per eseguire programmi di pochi KB, che
per il mio modo di vedere "old school" è un delitto...
Se il Python in qualche modo può sostituirsi ad entrambi
senza dovere rinunciare a niente, sarebbe una bellissima
notizia. La domanda che volevo farti è proprio questa:
rispetto al Builder, Delphi, VB e simili, cosa ha in meno?
Cioè dammi un buon motivo per non passare di corsa
al Python! :-)
Ad esempio com'è la velocità di elaborazione rispetto
al C/C++? (Parliamo di aritmetica intera e dati grandi
diverse decine di MB, magari su file)
Com'è la velocità di risposta agli eventi? Si possono
implementare software di gestione della strumentazione
in tempo reale (con visualizzazioni tipo LabView per
intenderci)?.
Si poccono chiamare delle DLL esterne per accedere
ad hardware che non sia la porta seriale o comunque
quello "standard"?
Com'è il supporto della rete (Socket grezzo, UDP,
TCP/IP, etc.)?
Dimmi, dimmi, sono curioso... :-)
A.D.

 A questo punto la domanda è ovvia: quali sono le limitazioni di Python?
Mi pare solo la lentezza di esecuzione quando gli algoritmi sono scritti 
pensandoli come in altri linguaggi, e quindi non usando le 
caratteristiche intrinseche di Python che sono invece ottimizzate nella 
loro implementazione in C sottostante. Esempio: scorrere gli elementi di 
una lista usando una variabile indice incrementata "a mano" ogni ciclo 
invece di usare l'iterazione automatica for x in lista, o scriversi un 
algoritmo di sort invece di usare il metodo sort gia' disponibile 
nell'oggetto lista.
Cominque e' una lentezza davvero relativa sulle macchine attuali, ho 
scritto un assemblatore Z80 che compila in un attimo 
(
http://stor.altervista.org/python/pyfZ80/pyfZ80.html
), la versione 
Pascal di molti anni fa era a confronto terribilmente lenta nonostante 
fosse compilata.
ciao
Claudio_F

 al Python! :-)
Non voglio illudermi, ma io sto iniziando a correre :)
Marco


Io mi trovo bene con la versione python(x,y) 
http://www.pythonxy.com/foreword.php
vado diretto con l'nstallazione completa che installa un mondo di software 
con librerie C gia' tutte compilate e funzionanti.
Installa anche MINGW, Eclipse e Qt.
Ciao,
-- 
RoV - IW3IPD
http://digilander.libero.it/rvise/

 Non voglio illudermi, ma io sto iniziando a correre :)
Sai che ti dico? Quasi quasi pure io... :-)
A.D.

 Sai che ti dico? Quasi quasi pure io... :-)
Beh, avevo già iniziato un progettino in .NET per uno dei soliti 
programmini... lo sto riscrivendo in Python + Qt4. Così vediamo sul 
campo come va :D
Marco

 Installa anche MINGW, Eclipse e Qt.
Interessante, utile se installi su una macchina vuota.
Io ho preferito l'installazione "manuale", perché già uso Eclipse per 
gli ARM, così come avevo già le QT e MinGw. Anzi, ho sempre il problema 
di dover specificare il percorso completo del compilatore e perdo sempre 
un'ora a capire quale è quello giusto tra tutte le varie toolchain :)
Marco

 è un problema che a volte è difficile affrontare perfino in C...
Sicuramente è possibile scrivere dei moduli in C e integrarli in
python ma non lo vedo adatto
a questo scopo, va troppo piano.
Per fare della strumentazione "virtuale" secondo me è meglio usare
cose come
Labwindows CVI o Labview


 TCP/IP, etc.)?
Ci sono i vari tipi di socket base, piu' moduli costuiti con essi che
incapsulano i protocolli piu' elevati, per cui realizzare un web
server e'   abbastanza elementare (il casino e' trovare gli esempi e
scavare nella documentazione). Usando i socket avevo scritto una
classe che permetteva a due applicazioni su due pc diversi della lan
di dialogare tra loro come se fossero collegate con una seriale.
ciao
Claudio_F

 di dialogare tra loro come se fossero collegate con una seriale.
E' possibile avere qualche dettaglio in più su questa applicazione?
Ciao!
Marco

 
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#using-qt-designer
Me lo sono letto tutto più volte ma c'è una cosa che mi sfugge.
Se io utilizzo un widget non di default (es. QLed) una volta compilato e 
ottenuta la dll che vado a piazzare in 
...\Python\Lib\site-packages\PyQt4\plugins\designer posso usarlo appunto 
nel Designer.
Però quando apro la ui da Python mi dice che non trova il modulo 
relativo (QLed nell'esempio).
Sembra che bisogni aggiungere uno script nella cartella 
...\Python\Lib\site-packages\PyQt4\uic\widget-plugins come per gli 
altri, ma non ho trovato nella documentazione come fare.
Marco
ps. ma ci sono problemi a usare i layout dei controlli? Perché quando 
richiamo la finestra, sempre da python, mi si spostano tutti... mentre 
da desginer e anteprima tutto ok.

 E' possibile avere qualche dettaglio in più su questa applicazione?
Parli del dialogo con i socket?
I principi li ho riassunti in:
http://stor.altervista.org/python/socket.html
Quello che avevo fatto era  creare un oggetto con gli stessi metodi di
pyserial, solo che invece di istanziare una seriale:
import serial
mia_seriale = serial.Serial(..parametri..)
facevo:
import udp_c_connector
mia_seriale_udp = udp_c_connector.UDP_c_connector(..parametri..)
dove i parametri nel primo caso sono quelli classici della seriale,
mentre nel secondo sono l' IP e la porta dell'altro lato.
Quando ho tempo faro ' un' aggiunta alla pagina di prima aggiungendo
questa classe come esempio.
ciao
Claudio_F

 questa classe come esempio.
Molto molto interessante! Tornerň a visitarla allora :)
Marco

 TCP/IP, etc.)?
C'è tutto nella libreria standard.
Se però usi un toolkit grafico come Qt, ti conviene usare la loro API 
per l'accesso alla rete, perché si integra con il loro loop degli eventi 
e puoi farci quindi applicazioni asincrone più facilmente.
Io per esempio ultimamente ho realizzato un controllo per un esperimento 
scientifico.
L'applicazione funzionava solo da shell e si occupava di acquisire dei 
dati da schede di acquisizione e da un oscilloscopio tramite ethernet.
La mole di dati acquisita era dell'ordine di alcuni MB al secondo.
L'applicazione prendeva i dati, ci faceva una semplice elaborazione 
sopra (trovava il max e il min) e salvava tutto su file.
Il collo di bottiglia era nell'oscilloscopio, che sebbene fosse connesso 
con una rete a 100MBit, inviava dati a meno di 10MBit.
Per il resto, la parte python non prendeva CPU in modo significativo.


 da desginer e anteprima tutto ok.
I layout funzionano, bisognerebbe vedere il codice per capire.
Se vuoi ti metto in contatto con un mio collega.


 Se vuoi ti metto in contatto con un mio collega.
Ti ringrazio della disponibilità. Ho provato a esporre il problema (e il 
file) sul forum:
http://www.python-it.org/forum/index.php?topic=3728.msg31021#msg31021
vediamo se risolviamo. Altrimenti potrei accettare la tua cortesia :D
Marco

 [...]
Grazie, molto esaustivo! :-)
A.D.

 perché appunto non si tratta di un caso isolato ma sarà la regola :)
Forse è questa?
http://www.rkblog.rk.edu.pl/w/p/making-pyqt4-widgets-sip/
Marco

Marco Trapanese ha scritto:

Sì, è una.
A dire la verità sip è noto per la sua pessima documentazione :-)
In ogni caso, per widget semplici come quello fai prima a 
reimplementarteli direttamente in python.


 reimplementarteli direttamente in python.
Mumble, quindi l'idea sarebbe di crearmi un widget con python da 
utilizzare poi direttamente nel designer?
In questo caso andrebbe bene, vado a studiare altra documentazione... :)
Marco

> Usare .NET ...
Che sistema di sviluppo usi per .net?
ciao grazie.

 Che sistema di sviluppo usi per .net?
Visual Basic .NET Express e in qualche caso C# sempre Express
Marco

 si possono ottimizzare solo le parti necessarie.
Non ho seguito in dettaglio tutta la discussione, non conoscendo
Python. Tuttavia, mi permetto di correggere un dettaglio.
Con Java è benissimo possibile collegarsi a codice nativo scritto in C
o C++. L'avevo fatto per prova sei o sette anni fa (usavo ancora
Windows), collegandomi ad una libreria DLL che avevo scritto e
compilato sulla stessa macchina.
Non ho più utilizzato questa opportunità interessante, perché in
seguito mi sono interessato molto di più a Java per via della sua
completa portabilità e quindi ho fatto a meno di tutto quello che mi
legasse ad una architettura specifica. Quello che mi ricordo è che non
era una cosa troppo difficile da mettere in atto.
Non so se va incontro appieno alle esigenze dell'OP, ma negli ultimi
anni sono diventato un sostenitore di Java (senza nulla togliere ad
altre soluzioni come Python). E' un linguaggio moderno, molto
espressivo, estremamente potente, robusto e parecchio veloce. Dispone
di IDE ben fatti (che peraltro io non amo e non uso, ma quello non
importa), il linguaggio e le librerie sono documentate in maniera
eccellente, è disponibile su una quantità di architetture diverse, una
volta scritto e "compilato" un programma lo si distribuisce molto
facilmente con un singolo archivio jar...
Conosco molto bene il C e me la cavo in C++, li apprezzo e li uso
quasi quotidianamente per certe applicazioni di calcolo ad alte
prestazioni su cluster distribuiti. In quasi tutti gli altri campi,
però, la mia scelta è sempre Java, nonostante ovviamente non sia privo
di difetti.
Ancora una volta, non voglio togliere nulla ad altre soluzioni
validissime come quelle evocate in questa discussione, solo non vorrei
che Java fosse lasciato da parte a priori.

 ha scritto nel messaggio 
news:ho2kk2$9d1$1...@tdi.cu.mi.it...

Ho capito male, pensavo ti riferissi ad hardware che utilizza il .net.
Ciao.
 

 Marco
Eko fato:
http://stor.altervista.org/python/socket.html

 
http://stor.altervista.org/python/socket.html
Che velocità!
Slurp! Grazie mille, molto molto interessante!
Marco

 
http://www.pyinstaller.org/
Ultima domanda per voi, prometto, ma questo thread è stato utilissimo.
Anzi, coppia di domande, visto che vanno a braccetto:
- quale è il sistema minimo per cui vale la pena utilizzare python? Ad 
esempio ora sto seguendo un progetto su PC104 (Atom, 2 GB RAM) che deve 
acquisire immagini da 2 camere FireWire, ricevere dati via seriale, fare 
un minimo di elaborazione sulle immagini (compressione, resize) e 
inviarle sempre via seriale. Avrebbe senso usare Python? Mi riferisco al 
discorso prestazioni... chiaramente semplificherebbe molto lo sviluppo.
- c'è modo di eseguire lo sviluppo su una macchina diversa dal target? 
Potendo però effettuare facilmente il debug remoto?
Grazie ancora
Marco

 Che velocità!
Era da tempo che volevo fare l'aggiunta, mi hai dato il via :)
Come single che sta mettendo a posto la casa nuova ho ben altri impegni, 
ad esempio imparare a cucinare in modo decente... non vedo l'ora che sia 
tutto a posto per dedicarmi a cose piu' interessanti.
ciao
Claudio_F
PS: ho appena aggiunto una riga in fondo alle classi, appena prima del 
return res finale, con tutte le prove di ieri l'avevo dimenticata. Se 
riscontri problemi nel loro uso fai un fischio.



 riscontri problemi nel loro uso fai un fischio.
Volentieri e grazie ancora!
Marco

 compilato sulla stessa macchina.
Sě, questo č possibile in (quasi) tutti i linguaggi.
Devi perň appunto scrivere una dll.
Quello che Python permette in piů, č di scrivere proprio *moduli* che 
verranno importati direttamente come se fossero moduli python.
Con una dll sei limitato ad esportare funzioni, in python puoi proprio 
scrivere una parte del tuo programma e, se ti accorgi che va 
ottimizzata, riscriverla in C/C++.
Certo non č banale come embeddare l'assembly nel C, ma č comunque un 
meccanismo molto potente.


 Potendo però effettuare facilmente il debug remoto?
Un'applicazione del genere io la svilupperei tutta su un normale PC 
linux e poi solo alla fine la proverei sul target.
Per il debug in questi casi si usano molto i file di log.


 Per il debug in questi casi si usano molto i file di log.
Ottimo, farò almeno un tentativo. Purtroppo il sistema operativo sarà 
Win XPE perché l'SDK (dll) delle telecamere FireWire per linux è troppo 
limitato.
Ciao e grazie!
Marco

 Per il debug in questi casi si usano molto i file di log.
Allora, dopo questi giorni di studio e prove sono giunto alla 
conclusione che Python + pyqt mi piace assai. Il progetto che stavo 
seguendo e sviluppando in .NET l'ho rifatto appunto in Python ed è una 
meraviglia :)
Però non riesco bene a cogliere il senso del tuo suggerimento circa lo 
sviluppo per un target embedded.
Ho provato sulla macchina "di sviluppo" a installare le librerie 
dell'SDK delle camere firewire e a importare in Python. Mi sembra 
perfino troppo semplice, ma pare funzionare.
Il problema è che se non ho sotto l'hw serve a poco, nel senso che non 
posso chiamare alcuna funzione se non quelle di versione o test. per 
questo dicevo che durante lo sviluppo devo necessariamente eseguire il 
codice sul target.
Senza installare tutto l'ambaradan sul target che non ha senso, l'unica 
cosa plausibile mi sembra di generare l'exe (con pyinstaller ad esempio) 
tramite uno script e attraverso la rete aggiornarlo di volta in volta 
che modifico il sorgente...
Ma voi come fate?
Quando appunto avete la macchina target con hardware specifico e 
differente da quella di sviluppo.
Marco

 differente da quella di sviluppo.
Se sono camere firewire, perché non le puoi collegare direttamente al 
tuo PC di sviluppo?
Puoi io replicherei l'ambiente di sviluppo su entrambi i pc (librerie 
necessarie, etc...) e collegherei entrambi i PC tramite rete.
Sul target esporti uno share di rete su cui copi i sorgenti python 
quando vuoi fare delle prove.
Mi sembra di aver capito che il pc target non avrà interfaccia verso 
l'utente, in questo caso puoi far loggare tutto su un file che 
controllerai in caso di errori.
Su Linux tutto è un po' più veloce da fare grazie alla shell remota, 
nfs, syslog e tutti i tool vari da riga di comando, ma anche con 
windows ci dovresti riuscire.


 ci dovresti riuscire.
Certo, forse è meno immediato ma si può fare!
Grazie come sempre
Marco