Raspberry Pi: lanciare script on boot

Uno degli aspetti più interessanti di Raspberry Pi è senza dubbio quello di poter lanciare script on boot, quindi di avviare un programma interamente scritto da noi nel preciso istante in cui accendiamo il nostro computer con il lampone. In questo articolo ho il piacere di guidarti un passo per volta alla realizzazione di questo sistema.

Raspberry Pi, come dicevo un paragrafo fa, poiché un computer a tutti gli effetti, prima di poter essere operativo e quindi fare uso del suo sistema operativo, deve attraversare la fase di accensione e di caricamento del sistema operativo. Questa fase, nota come "boot", dove il nostro Raspberry Pi si accinge a caricare il sistema operativo presente su SD, è quella in cui il nostro piccolo computer single board si mette a disposizione.

La domanda che ti stai facendo, altrimenti non saresti qui, è questa. Ovvero: "Ci sarà mai modo di far sì che Raspberry Pi esegua il codice scritto da me medesimo in fase di boot?".

La risposta è "ovviamente sì" e scoprirai come lanciare script on boot leggendo fino alla fine questo articolo.

C'è una premessa che ci tengo a farti prima che tu prosegua nella lettura di questo articolo: il metodo che ti mostrerò funziona su sistemi operativi "Linux-based" incluso Raspbian, quanto a Windows purtroppo non ho ancora una soluzione.

Prima di cominciare la nostra avventura mi presento: sono Lorenzo Neri, all'interno di Elettronica Open Source mi occupo di realizzare articoli come questo per permettere a persone come te di comprendere al meglio questo mondo e gestisco Makers Academy, la prima piattaforma online che ti permette di imparare tutto quello che ti serve per realizzare i tuoi progetti open source.

La directory "init.d": la base con cui possiamo lanciare script on boot

Ciò di cui abbiamo bisogno affinché si possa lanciare uno script on boot e quindi all'avvio del sistema operativo stesso, è una directory, quindi una cartella nota come "init.d".

La cartella in questione è nata per contenere al suo interno tutti gli eseguibili che vengono per l'appunto eseguiti all'avvio del sistema operativo stesso e quindi in fase di boot.

Non posso che lasciarti maggior riferimenti in merito qui se desiderassi approfondire, ma per proseguire il nostro discorso ti è sufficiente sapere che essa è presente in tutti i sistemi operativi Linux-based, incluso Raspbian.

Al suo interno, quindi, dovremo scrivere lo script che desideriamo eseguire in fase di avvio.

Poiché si tratta di Raspberry Pi ed è ovvio parlare di Linux, è doveroso anche dare il giusto apporto di elettronica 😉

Sfrutteremo quindi come esempio il classico lampeggio di un LED collegato alla GPIO di Raspberry Pi.

Lo script da lanciare in fase di boot: un codice Python in grado di far lampeggiare il LED

Prima ancora di vedere lo script che sarà scritto in Python per praticità, vediamo il circuito che andremo a costruire:

Un LED collegato alla GPIO di Raspberry Pi

Nell'esempio illustrato, colleghiamo un LED alla GPIO di Raspberry Pi, per la precisione al pin numero 8 l'anodo, mentre il catodo alla massa.

Lato codice invece, sfrutteremo la libreria nativa "RPi.GPIO" offerta direttamente da casa Raspberry Pi.

Il nostro obiettivo sarà quello di eseguire 10 cicli di accensione/spegnimento del LED in fase di boot: in questo modo evitiamo un'esecuzione infinita dello script stesso ogni volta che avvieremo Raspberry Pi.

Il codice quindi, si compone così:

import RPi.GPIO as GPIO    # Importo la libreria
from time import sleep     # Importo la sleep dal modulo time per temporizzare il lampeggio del LED
GPIO.setwarnings(False)    # Spegniamo i vari avvisi
GPIO.setmode(GPIO.BOARD)   # Usiamo la numerazione fisica dei pin
GPIO.setup(8, GPIO.OUT, initial=GPIO.LOW) # Impostiamo il pin come output e inizialmente spento

for i in range (0,10):        # Impostiamo il ciclo affinché si ripeta 10 volte
    GPIO.output(8, GPIO.HIGH) # Accendiamo il LED
    sleep(1)                  # Attendiamo un secondo
    GPIO.output(8, GPIO.LOW)  # Spegniamo il LED
    sleep(1)                  # Attendiamo un secondo

Prima di passare alla messa in pratica del tutto ci tengo a dirti una cosaSe non fossi sicuro di come sia impostata la GPIO del tuo Raspberry Pi, perché sì, cambia da modello a modello, ho scritto un articolo dove ti guido a capire come sono impostati i pin: lo trovi a distanza di un click qui.

I passi necessari per lanciare al boot il nostro script

Una volta scritto tutto il necessario, dobbiamo spostare il nostro scritto nella directory "init.d". Come?

Così:

sudo cp /percorso/dove/si/trova/il/tuo/script/nome_del_nostro_script.py /etc/init.d/

In questo modo abbiamo copiato il nostro script nella directory "init.d" ma non basta.

Ci dobbiamo spostare nella cartella e aprire un editor di testo per aggiungere in testa allo script una piccola serie di direttive Linux.

Quindi, ci spostiamo nella cartella e apriamo nano per comodità:

cd /etc/init.d
sudo nano nome_del_nostro_script.py
# /etc/init.d/nome_del_nostro_script.py
### BEGIN INIT INFO
# Provides:          nome_del_nostro_script.py
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Esecuzione al momento di avvio
# Description:       Abilita servizio offerto dal daemon.
### END INIT INFO

Dobbiamo fare degli ultimi step per poter far partire tutto.

Il primo è modificare i permessi dello script così che si possa far eseguire dal daemon:

sudo chmod +x nome_del_nostro_script.py

Eseguiamo questo comando:

sudo update-rc.d nome_del_nostro_script.py defaults

E la conclusione: on boot!

L'unica cosa che resta da fare per verificare se il nostro script viene eseguito all'avvio è una cosa: riavviare Raspberry Pi e vedere se il LED collegato alla GPIO lampeggia.

Come?

Beh... Molto semplice:

sudo reboot
Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend