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 RGBLED RGB
- Pulsante
Requisiti Software:
Aggiorniamo:
sudo apt-get update
Installiamo pip per Python3:
Attenzione Python3 e Python2 non sono pienamente compatibili, non confonderli
sudo apt-get install python3-pip
Installiamo feedparser:
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):
sudo apt-get install python3-gpiozero
Controlliamo che si siano installate:
pip3 list
Preparazione dello Script:
Creiamo un file notificherss.py e rendiamo eseguibile con
sudo chmod +x notificherss.py
Precisiamo che deve usare Python3
#!/usr/bin/python3
Importiamo il modulo feedparser
import feedparser
Importiamo un LED RGB (red,green,blu) per distinguere gli autori
from gpiozero import RGBLED
Importiamo il LED normale per segnalare l’attività lettura/attesa, uso PWMLED per abilitare la funzione pulse
from gpiozero import PWMLED
Importiamo il pulsante per disabilitare la notifica dopo averla vista
from gpiozero import Button
Impostiamo il pulsante sul PIN GPIO 23
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
rgb = RGBLED(21,20,16,False)
Impostiamo il LED normale sul pin 12 e acceso all’avvio dello script
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) |
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) sleep(600)
Programmare l’avvio
Personalizzare, salvare e schedulare qb.
Per eseguirlo all’avvio
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.