Corso di programmazione Python su Flip&Click: GPIO, interfaccia seriale e PWM

Nell'ultimo mese vi abbiamo raccontato Python attraverso una scheda di prototipazione che ha delle potenzilità davvero notevoli: Flip&ClickCon oggi, il nostro corso di Python si arricchisce di una struttura più precisa per spiegarvi nel merito i comandi principali, le funzioni elementari e punta a darvi gli strumenti per poter scrivere codice efficiente ed essenziale. Nella puntata di oggi parleremo dell'interfacciamento seriale, della gestione dei GPIO e del PWM in ambiente Python. E per contestualizzare il tutto ancora meglio, faremo dei riferimenti anche alla specifica scheda con cui abbiamo avuto a che fare. Sappiate fin d'ora, comunque, che quello che diremo resta vero ed utile in generale con tutte le board che supportano Python. Buona lettura.

Introduzione

Il Python è un linguaggio di programmazione estremamente versatile che vi consente, con una sintassi molto semplificata, di accedere a funzioni anche di alto livello e scrivere codice facilmente leggibile. Ne abbiamo visto le primissime basi insieme, sottolineando le caratteristiche principali. Sviluppare uno script Python diventa incredibilmente semplice se abbiamo chiare anche alcune semplici funzioni della programmazione. In particolare, questo corso è improntato alla programmazione di schede di prototipazione a microcontrollori e di sistemi che rilevano variabili ambientali e sono anche in grado di lavorare gestendo meccanismi di segnalazione (l'accensione di un LED oppure la visualizzazione di un messaggio su un display) oppure di attuazione (apertura o chiusura di relays o di un interruttore o di un comando a distanza).

Per poter svolgere queste funzioni è necessario comprendere come controllare le interfacce di input/output (genericamente indicate come I/O). Chi ha già lavorato nel campo dei microcontrollori ben conosce la sigla GPIO, che sta per General Purpose Input Output. Si tratta, infatti, di pin di interfaccia tra il microcontrollore ed eventuali altri sistemi o periferiche. Viene specificata la bidirezionalità, ovvero la possibilità utilizzare le interfacce in base al loro tipo (ingresso/uscita) e al loro numero. Il fatto che l'interfaccia si definisca general purpose dipende, invece, dalla possibilità di connettere ogni genere di periferica, a prescindere dalla sua natura, purché supporti uno specifico metodo di connessione. In particolare parliamo di interfacce SPI o I2C ma possono essere di altri tipi.

Dal momento che questo corso si concentra sulla programmazione, vedremo questi collegamenti in linea di massima, anche perché sono molto semplici. Se ne avete bisogno, però, sappiate che su queste pagine sono stati pubblicati molti articoli che hanno a che fare con l'interconnessione di sensori a circuiti a microcontrollore, soprattutto quando abbiamo parlato di Arduino. Fate quindi riferimento alla categoria in questo sito o comunque utilizzate i commenti se avete delle domande specifiche. Adesso possiamo cominciare.

La comunicazione seriale

Siamo abituati a collegare i nostri dispositivi via USB e ad utilizzarli come risorse di sistema. Spesso però questo non è immediato e comunque si tratta di un processo che ha bisogno di librerie specifiche, di software a corredo e di impostare alcuni parametri fondamentali. Chi si occupa di strumentazione elettronica, di misure e caratterizzazione di sistemi ha a che fare con questi argomenti tutti i giorni, e ben conosce le interfacce GPIB, USB, UART, I2C, Ethernet e tante altre ancora. Anche in questo caso, viene utilizzata una libreria specifica, all'interno della quale trovate le dichiarazioni di funzioni e metodi specifici per l'interfacciamento. La libreria in questione, che si chiama "serial" è tra quelle che di solito vengono installate insieme a quelle fondamentali, e questo accade qualsiasi sia l'ambiente di sviluppo software che avete scaricato, e a prescindere dal sistema operativo.
In Python, aprire una comunicazione su interfaccia seriale è abbastanza semplice e vi basterà scrivere:

import serial
porta = serial.Serial("com1", 38400, 8, "N", 1, timeout=1)

In questo caso, avete deciso di lavorare con una porta seriale che è conosciuta dal Sistema Operativo con il nome di "com1". In questa istruzione avete anche specificato che volete che la comunicazione sia mantenuta con un baudrate pari a 38400, con un bytesize pari ad "8". "N" è il parametro relativo alla parità. Infine, con l'ultimo parametro, avete specificato il valore del timeout, ovvero il fatto che le richieste scadano oltre il tempo specificato.

Una volta aperta la comunicazione, possiamo iniziare a lavorare. Per poter scrivere sull'interfaccia seriale così aperta, basta utilizzare la funzione write(dati) definita nella libreria, per cui avremo:

porta.write(dati)

Il metodo per leggere dalla seriale è read(), e viene utilizzato in questo modo:

dati = porta.read(n)

Una specifica sul parametro timeout: se impostato a None (o "N", come di default) la lettura è bloccante e read ritorna solo quando sono stati ricevuti n byte. Se è stato impostato a 0, la lettura è non bloccante e il valore restituito è pari a ciò che è stato letto entro n byte. Se il valore del tempo di timeout è maggiore di 0, viene atteso il valore specificato, trascorso il quale vengono restituiti fino a n byte letti.

La lettura può anche riguardare dati binari, per i quali è prevista una funzione specifica che è readline(), che può essere utilizzata come segue:

dati = porta.readline()

Tutto chiaro? Bene, allora vediamo di rendere questo costrutto utile anche in un caso così semplice e con un esempio concreto.

Supponiamo di lavorare sempre con Python ma questa volta in ambiente Linux e supponiamo di avere la nostra scheda di prototipazione rapida (nello specifico potrebbe essere la Flip&Click ma anche un Arduino), collegata via USB. Per poter scoprire come si chiama la porta seriale, utilizziamo [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2931 parole ed è riservato agli abbonati PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici PREMIUM e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA con PAYPAL è semplice e sicuro.

Abbonati alle riviste di elettronica

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio 24 novembre 2016

Scrivi un commento