Inizia oggi una serie di articoli dedicati alla programmazione ed allo sviluppo nonché alla prototipazione rapida. Solo che questa volta non parliamo del "solito" Arduino ma di qualcosa che gravita nella sua orbita, ovvero di una scheda di prototipazione rapida che prende il nome di Flip & Click, e di un linguaggio di programmazione che si dimostra assolutamente versatile e facilmente utilizzabile su diverse piattaforme; stiamo parlando di Python. Abbiamo un'agenda piuttosto fitta per questo corso per cui prima di tutto vogliamo parlarvi di quali saranno gli argomenti che tratteremo.
Introduzione
Python è un linguaggio di programmazione che si è diffuso molto velocemente e attorno al quale è cresciuta un'intera comunità di programmatori e sviluppatori con grandi capacità e molta voglia di fare. Python, lo vedremo tra un attimo, non è soltanto sintassi e codice ma è anche metodo ed inventiva. Tutti argomenti che si sposano perfettamente con la prototipazione rapida e la passione che i makers di tutto il mondo stanno dimostrando nel creare i loro progetti, rendendoli sempre più completi e variegati, dotandoli dei più innovativi ed utili sensori disponibili sul mercato ma soprattutto divulgando il loro metodo ed il loro approccio basato sulla passione e sull'accrescere le loro competenze. Ma anche quando tutto questo non manca, le idee fervono e le capacità ci sono, restano sempre delle difficoltà tecniche soprattutto quando bisogna riuscire ad effettuare un test di ciò che è stato programmato. Tutti quelli che hanno esperienza di questo genere di attività sanno bene che un’IDE completo che consente di scrivere codice, compilarlo, caricarlo sulla scheda ed effettuare anche una buona fase di debugging è davvero il migliore amico del programmatore. Troppo spesso, però, ci troviamo nella condizione di non avere uno strumento adeguato per le mani. Ed ecco, quindi, che parleremo anche di questo aspetto, proponendovi una soluzione molto valida. Vi abbiamo incuriositi? Bene così. Ora possiamo iniziare.
Il Python
Python è un linguaggio di programmazione molto utilizzato e diffuso, che viene oggi impiegato in diversi campi applicativi. Alcune delle sue proprietà lo rendono, infatti, incredibilmente versatile dal momento che è:
- di alto livello;
- general purpose;
- interpretato;
- dinamico.
Iniziare a programmare con Python non è particolarmente difficile per chi ha grande esperienza di coding, soprattutto quando si tratta di programmazione ad oggetti. Per chi comincia, invece, soprattutto se comparato con alcuni altri linguaggi di programmazione, può risultare incredibilmente semplice. La sua facilità d'uso dipende dal fatto che l'esecuzione delle istruzioni è particolarmente intuitiva non soltanto per l'utilizzo delle parole chiave e del nome di alcune funzioni ma anche perché la scrittura avviene in maniera tale da identificare quasi univocamente il funzionamento del codice.
Python è stato scritto, tra le altre cose, in maniera tale che il codice sia estremamente leggibile, ovvero facilmente interpretabile anche ad una prima lettura. Per osservare questa filosofia, la sintassi si dimostra estremamente snella. Molti programmatori, per esempio, sanno che spesso alla fine di una linea di codice è indispensabile utilizzare un "terminatore", ovvero un carattere particolare la cui funzione è univocamente specificata, identificata univocamente dall'interprete dei comandi e sarà sempre uguale a se stessa, salvo ipotesi di override. Ciò non vale soltanto per i caratteri speciali, però, perché come ben sappiamo anche un operatore matematico come il segno "+" può essere soggetto a ridefinizione, per esempio, quando si voglia introdurre un metodo "aggiungi" ad una classe che rientra all'interno di un codice per esempio per la gestione di una rubrica oppure di un database.
La prima differenza macroscopica di un codice Python, quindi, è proprio la sintassi. Ciò nondimeno, al pari del C++ o del Java, gestisce con grande "naturalezza" diversi paradigmi di programmazione, come quello ad oggetti o funzionale.
Un'altra grande differenza con molti linguaggi di programmazione è la disponibilità di librerie. Imparare un linguaggio di programmazione oggi è una cosa relativamente semplice dal momento che, man mano che si sviluppano, più o meno tutti implementano le stesse funzioni e sebbene la sintassi sia diversa e alcuni paradigmi siano differenti, per chi ha già esperienza la difficoltà principale diventa quella di adattarsi alla nuova regola sintattica.
Python fa qualcosa di diverso perché, per esempio, sostituire un'istruzione ancorché semplice come “cout” con “print” rende più semplice per il programmatore la realizzazione di un codice snello e leggibile. Praticamente, utilizzando questo linguaggio, a volte vi sembrerà di scrivere un programma in cui dite al compilatore di “zappare” e sembrerà quasi che inizia farlo. Ok, questo esempio è davvero banale però tra poco lo vedrete sia nelle funzioni sia in alcuni esempi di codice. Sappiate però che la lista dei "reminders” nello sviluppo di questo linguaggio è stata la seguente:
- Beautiful is better than ugly;
- Explicit is better than implicit;
- Simple is better than complex;
- Complex is better than complicated;
- Readability counts.
Soprattutto l'ultimo punto, per chi ha avuto esperienze di programmazione, è fondamentale. Provate a prendere in mano il codice di un altro programmatore e dovrete fare i conti con la sua logica. Ma non solo perché se prendete in mano il codice che voi stessi avete scritto qualche mese prima, dovrete fare i conti con la vostra logica di allora ed è facile che la soluzione geniale che avete trovato poco tempo prima non vi sia già più chiara. E dal momento che molto spesso un programmatore lavora secondo la filosofia “write first, document later” (che facilmente diventa “never”), quest'aspetto diventa di grande utilità.
Ancora dal punto di vista strutturale, Python non è un linguaggio di programmazione “event-driven”. Il termine fa riferimento ad un paradigma nel quale il flusso di programma è determinato da specifici eventi, come per esempio l'interazione dell'utente che preme un tasto oppure utilizza il mouse. Tali condizioni possono certamente essere emulate dall'utilizzo di sensori oppure da messaggi provenienti da programmi. Di solito si parla di linguaggi di programmazione “event-driven” quando si gestiscono interfacce grafiche oppure applicazioni Web, ovvero strati software in cui fondamentalmente il sistema resta in attesa di input dall'esterno ai quali segue l'attivazione di specifiche funzioni. Nei sistemi embeeded e nelle schede di prototipazione, l'interazione con i GPIO è, in qualche modo, proprio a questi casi.
Un altro grande vantaggio di questo linguaggio di programmazione è che l'interprete è disponibile su diversi sistemi operativi ed in particolare non è importante quali sia il sistema operativo sul quale state seguendo il codice: l'interprete sarà in grado di lavorare comunque. Vi facciamo un esempio: supponete di voler scrivere un programma che ad un certo punto si interrompe e vi propone su terminale la classica scelta "Premi un tasto per continuare". L'istruzione che dovrete utilizzare è:
os.system("pause")
Quando il codice arriverà all'esecuzione di questa istruzione, si aprirà il terminale specifico del vostro sistema operativo che vi proporrà il messaggio che vi aspettate. Com'è successo?
L'interprete è cross-platform e pertanto è in grado di lavorare con ciascuno dei sistemi operativi supportati in maniera tale da richiamare la specifica funzione che segue quella istruzione. Davvero una grande comodità. Questo specifico esempio riporta all'attenzione due aspetti fondamentali: l'utilizzo e l'implementazione di funzioni e metodi nonchè l'estendibilità del linguaggio di programmazione. Dato il rapporto di causa ed effetto che li lega, è importante precisare che Python è stato scritto per essere facilmente espandibile. Non tutte le funzioni che esistono, infatti, sono definite tra quelle di base. Devono, pertanto, essere incluse tutte le librerie che contengono le funzioni di nostro interesse e che sono divise, logicamente, per argomento.
Quella che abbiamo visto, ovvero “os” riguarda la gestione del sistema operativo, potendo considerare, per esempio l'interazione con le periferiche. Ciascuna libreria ha la sua documentazione ed una volta che avrete capito qual è la libreria che fa al caso vostro, prima di cominciare a scrivere il codice vero [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3075 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
Un ottimo corso che coinvolge la flip&click. Qui tutte le informazioni a riguardo http://it.emcelettronica.com/flip-click-arduino-e-python-compatibile-in-omaggio-per-i-nuovi-abbonati
Finalmente un corso Python embedded…. vogliamo vedere i programmatori accendere i led 🙂
Gran bella iniziativa. complimenti. A livello professionale non ho mai incontrato programmatori python embedded…aspetterò un vostro corso su assembly o mplabx …è in cantiere?
Salve a tutti,
l’iniziativa del corso di Python su piattaforma embedded è veramente interessante. Sono molto interessato all’interfacciamento delle periferiche MicroBus e per questo desideravo sapere dove poter acquistare la scheda Flip & Click per poter cominciare a provare a realizzare qualche prototipo.
Saluti
Salve.
Mi sono abbonato proprio per questa bella iniziativa.
Avrei una osservazione ed una domanda sull’articolo.
La prima osservazione è che mi ha molto sorpreso è leggere che “Python non è un linguaggio di programmazione event-driven.”. Questa definizione non mi torna perché di solito si parla di s/w sviluppati con la metodologia event-driven. Perché associare questo termine ad un linguaggio? Forse un linguaggio di programmazione può essere più o meno adatto per tale scopo? Mi piacerebbe avere il punto di vista dell’articolista sul punto.
La domanda è relativa al fatto che non so dove recuperare le librerie che fanno riferimento agli elementi presenti nel codice (ad es PinMode()). Grazie
Ciao