Ciò che rende speciale il RaspberryPi sono anche le porte GPIO (General Purpose Input/Output) che gli permettono di interagire con il mondo reale (d’altronde la realtà è ciò che percepiamo con i nostri limitati sensori/sensi), quindi è divertente sfruttarle il più possibile, anche perché la Cina ci fornisce tutti i sensi per il nostro micro computer a prezzi veramente alla portata di tutti, il mio negozio preferito è GearBest seguito da AliExpress, ma se ho fretta Amazon è sempre il top.
L’idea di oggi è più che altro un esercizio per provare le comodissime librerie gpiozero e feedparser, in sostanza faremo questo:, leggeremo un feed RSS a nostra scelta, in questo caso opterò per i feed del blog WordPress di RaspberryItaly; analizzeremo i dati dell’ultimo articolo, e in base all’autore facciamo lampeggiare un LED o qualsiasi altra cosa ci venga in mente di fare.
Partiamo dai requisiti Hardware:
- RaspberryPi, io lo uso con Raspbian Lite
- LED, valuta se serve una resistenza in serie per limitare la corrente, in base ai dati del LED, io uso sempre LED ad alta luminosità da 3.2-3.4v
- LED RGB
- Pulsante
Requisiti Software:
Aggiorniamo:
1 |
sudo apt-get update |
Installiamo pip per Python3:
Attenzione Python3 e Python2 non sono pienamente compatibili, non confonderli
1 |
sudo apt-get install python3-pip |
Installiamo feedparser:
1 |
pip3 install feedparser |
feedparser è uno dei software in grado di leggere i feed RSS ed ATOM. Nota che è pip3 e non pip
Installiamo le librerie gpiozero (già preinstallate su qualche versione di Raspbian, ma dare il comando male non fa):
1 |
sudo apt-get install python3-gpiozero |
Controlliamo che si siano installate:
1 |
pip3 list |
Preparazione dello Script:
Creiamo un file notificherss.py e rendiamo eseguibile con
1 |
sudo chmod +x notificherss.py |
Precisiamo che deve usare Python3
1 |
#!/usr/bin/python3 |
Importiamo il modulo feedparser
1 |
import feedparser |
Importiamo un LED RGB (red,green,blu) per distinguere gli autori
1 |
from gpiozero import RGBLED |
Importiamo il LED normale per segnalare l’attività lettura/attesa, uso PWMLED per abilitare la funzione pulse
1 |
from gpiozero import PWMLED |
Importiamo il pulsante per disabilitare la notifica dopo averla vista
1 |
from gpiozero import Button |
Impostiamo il pulsante sul PIN GPIO 23
1 |
btn_letto = Button(23) |
Impostiamo il LED RGB sui pin (rosso:21,verde:20,blu:16,False) False solo nel caso tu avessi il quarto pin collegato ai 3.3v
1 |
rgb = RGBLED(21,20,16,False) |
Impostiamo il LED normale sul pin 12 e acceso all’avvio dello script
1 |
led_attivita = PWMLED(12,initial_value=True) |
i LED RGB si usano impostando l’accensione dei tre LED che li compongono (rosso,verde,blu) così da dare i vari colori usando la combinazione di valori compresi tra zero (cioè spento) ed uno (cioè acceso). Per semplificarci la vita incolliamo questa stringa, cosi al posto di scrivere, ad esempio, (1,0,0) basterà scrivere “verde”.
1 |
rosso, verde, blu , bianco, giallo, viola, azzurro, nero = (1,0,0), (0,1,0), (0,0,1), (1,1,1), (1,1,0), (1,0,1), (0,1,1), (0,0,0) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
while True: #iniziamo un loop infinito led_attivita.blink(0.1,0.1) #il led lampeggia per segnalare che sta leggendo i feed notizie = feedparser.parse('https://www.raspberryitaly.com/feed') #imposta le variabili con il feed completo data = notizie.entries[0].published #la data del feed più recente [0] titolo = notizie.entries[0].title autore = notizie.entries[0].author sommario = notizie.entries[0].summary if notizie.entries[0].id != id: #se l'id univoco del feed più recente è diverso dal precendente prosegue if 'Zzed' in autore: #se dentro la variabile autore c'è la parola Zzed allora rgb.pulse(on_color=giallo,fade_in_time=1,fade_out_time=2) #il LED RGB pulsa di giallo elif 'Gabriele' in autore: rgb.pulse(on_color=blu,fade_in_time=1,fade_out_time=2) elif 'Ivan' in autore: rgb.pulse(on_color=rosso,fade_in_time=1,fade_out_time=2) elif 'Bob' in autore: rgb.pulse(on_color=verde,fade_in_time=1,fade_out_time=2) elif 'Enrico' in autore: rgb.pulse(on_color=azzurro,fade_in_time=1,fade_out_time=2) id = notizie.entries[0].id # aggiorna la variabile id print('Autore:', autore) #scrive l'autore print("id:",id) led_attivita.off() btn_letto.wait_for_press() #lampeggia finchè non viene premuto il pulsante rgb.off() led_attivita.pulse() # il led pulsa per segnalare che è in standby sleep(600) #aspetta 600 secondi else: led_attivita.pulse() sleep(600) |
Programmare l’avvio
Personalizzare, salvare e schedulare qb.
Per eseguirlo all’avvio
1 |
sudo crontab -e |
@reboot /usr/bin/python3 /home/pi/notificherss.py &
Conclusione
Questo è un esempio semplicissimo, in un feed ci sono molte informazioni, aprilo con un browser e vedrai tutti i dati che puoi usare, leggi la documentazione di feedparser e poi espandilo con tutte le modifiche che ti vengono in mente.
Spero di esserti stato utile, alla prossima.
Per ogni consiglio scrivici sul forum
Enrico Sartori
Riferimenti utili:
Feed interessanti:
Se vuoi restare aggiornato seguici sui nostri social: Facebook , Twitter, YouTube, Google+, Telegram