Raspberry

Raspbian

Installazione Raspbian
Raspbian, è il principale sistema operativo per Raspberry PI.  Esso è basato sulle distribuzioni di Debian, adattato per l'architettura ARM.

STRUMENTI:

Per installare Raspbian ci servono le seguenti componenti:
- Scheda SD
- Raspberry Pi imager (si scarica dal sito ufficiale)

INSTALLAZIONE:

- Prima cosa bisogna andare al seguente sito e scaricare Raspberry Pi Imager, (https://www.raspberrypi.com/software/).
-Installare l'applicazione e avviarla
-Premere la prima voce e selezionare il S.O. preferito
- scegliere la scheda SD di destinazione e in fine premere il tasto "SCRIVI"

Comandi Debian

Comandi terminale per Raspberry


- Comandi APT (Advanced Packaging Tool)

- apt-get update = scarica la lista aggiornata dei pacchetti e delle nuove versioni disponibili.
- apt-get upgrade = installa le versioni più recenti dei pacchetti che hai.
- apt-get dist-upgrade = aggiorna la versione di Ubuntu.
- apt-get install <nome-pacchetto> = installa il pacchetto <nome-pacchetto> da internet risolvendo 
le necessarie dipendenze.
- apt-get remove <nome-pacchetto> = rimuove il pacchetto <nome-pacchetto> dal sistema.
- apt-get remove --purge <nome-pacchetto> = rimuove il pacchetto <nome-pacchetto> dal sistema e i relativi file
di configurazione configurazione.

- Comandi per muoversi e visualizzare Directory

- ls = è usato per elencare file o cartelle in Linux o in altri sistemi operativi basati su Unix.
- pwd = serve a visualizzare il percorso della directory corrente.
- cd = comando per cambiare directory es:(cd /etc).
- cd .. = comando per spostarsi nella directory precedente.

- Comandi per la creazione di cartelle e file

- touch (nome_file) = comando per creare un file.
- mkdir (nome) = comando per creare una cartella.
- nano (nome_file) = comando per modificare file, se non esiste lo crea.
- cp (nome_file_da_copiare)= comando per copiare file, mi posiziono nella directory desiderata e con cp 
do la directory del file da copiare.
- cp -i = evita di sovrascrivere un file che si sta copiando.
- mv (nome_file) (nuovo_nome) = comando per rinominare un file, si può usare anche per spostare 
file in un altra directory.
- rm (nome_file) = comando per cancellare file.
- rmdir (nome_cartella) = comando per eliminare cartella se è vuota.

- Altri comandi

- sudo = comando per utilizzare super user (da scrivere prima di altri comandi).
- ifconfig = visualizzo stato interfacce di rete (vedo ip).
- reboot = riavvia sistema
- shutdown = arresta sistema
- clear = pulisce il terminale
- raspi-config

Impostare IP fisso su Raspberry

vedere se il servizio è attivo

sudo service dhcpcd status

se non è attivo attivarlo

sudo service dhcpcd start 
sudo systemctl enable dhcpcd 

- Per prima cosa dobbiamo utilizzare il comando cd per spostarsi nella directory del file. 
cd /etc
- Dopodiché bisogna utilizzare il comando nano per modificare il file.
sudo nano dhcpcd.conf
- Dentro al file si troverà una configurazione come la seguente.
#interface eth0
#static ip_address=Ip visto da ifconfig/16
#static routers=10.0.0.1 (gateway)
#static domain_name_servers=172.16.0.21 172.16.0.11
- Modificare il file cancellando i vari # davanti ai comandi, e poi modificare i parametri a piacimento.
       - static ip_address è l'IP da assegnare.
       - static routers è l'IP del gateway ovvero il router.
       - static domain_name_servers è l'IP del del DNS.

- Finito di modificare il file bisogna salvarlo con "ctrl o" poi bisogna premere invio per sovrascrivere, in fine per uscire dal editor nano, bisogna premere "ctrl x".

-Riavviare Raspberry con il comando "reboot"  e in fine, una volta riavviato, utilizzare il comando ifconfig per visualizzare l'IP. 


PS: non è necessario spostarsi nella directory per modificare i file basta specificarla quando si usa il comando es:
nano /etc/dhcpcd.conf
Ricordarsi di usare sudo ove necessario

Installazione php
- Per installare php su Raspberry, dobbiamo utilizzare il solito comando "apt".
sudo apt-get install php

- Installato il php, proviamo a creare una pagina index.php nella directory di apache.
sudo nano /var/www/html/index.php

- Proviamo a modificare il file .php inserendo la seguente stringa.
<?php echo (phpinfo()) ?>

- Salviamo il file e se php è stato installato in modo corretto quando andremo a richiamare la pagina web da browser, dovrebbe apparire la seguente immagine.

Primo programma in Python

Proviamo  a creare il nostro primo programma in Python

- Creiamo un file con l'apposito comando. 
(ricordo che si può utilizzare direttamente nano perché oltre a crearlo puoi subito modificarlo)nano prova.py
- Dopo essere entrati nel editor nano, digitare i seguenti comandi.
#!/usr/bin/python commento directory python
print ("ciao a tutti")

- Dopo aver salvato provare a digitare il comando "python", seguito del nome del file (in questo caso prova).
python prova.py

oppure:
python3 prova.py


- Se il codice è stato scritto correttamente allora avremo una stampa a video con scritto "ciao a tutti".

COMANDARE GPIO DA PYTHON

Le GPIO(general purpose input output) di Raspberry sono i pin che possono essere configurati sia come input che output. Per vedere lo schema delle GPIO del nostro Raspberry basta digitare da terminale il seguente comando.
pinout

- Fatto ciò da terminale dovrebbe far vedere la seguente configurazione:

CODICE PYTHON

Per poter "comandare" le GPIO da python dobbiamo utilizzare i seguenti comandi
import time   #import serve per importare una libreria, in questo caso importo la libreria per il tempo 
import RPi.GPIO as GPIO   #importo la libreria per gestire GPIO

GPIO.setwarnings(False)    #comando per togliere eventuali warnings quando si esegue il programma
GPIO.setmode(GPIO.BCM)     #chiamo la funzione setmode della libreria, e dico che utilizzo il metodo BCM
GPIO.setup (4, GPIO.OUT)   #dichiaro che il GPIO 4 è un output
while True:
 GPIO.output(4, True)    #do i 3,3V in output
 time.sleep(2)    #delay di 2 secondi
 GPIO.output(4, False)   #do i 0V in output
 time.sleep(2)    #delay di 2 secondi

Dopo aver scritto il codice se si collega un led al GPIO numero 4 di Raspberry, esso di dovrebbe accendere lanciando il programma python.

Comandare programma da PHP
Per comandare un programma da PHP dobbiamo come prima cosa verificare se è installato sul nostro Raspberry
php -v
Se dopo aver digitato questo comando da php esce la versione, allora è installato.

 Dopo aver installato php dobbiamo creare all'interno della directory /var/www/html un file index.php e in fine scrivere il seguente codice.
<html>
<head>
<link rel="styesheet" type="text/css" href="bott.css">                   //collegamento a css
<form action = "index.php" method="post">
<input type = "submit" name="acceso" value="accendi led" class="ban-css">   //tasto submit
</form>
</head>

<?php
if ($_POST['acceso']){                                   //se premuto il submit allora eseguo il programma python
$commandToExec= "sudo python /home/lab15/Desktop/ledd.py";  //do la directory di dove è il file python
$output = shell_exec($commandToExec);
echo $output;
}
?>
</html>


Controllare che siano abilitati i permessi root all'utente www-data. Per fare ciò dobbiamo spostarsi nella directory /etc e lanciare il comando sudo visudo. Dopo aver lanciato il comando si aprirà un documento dove dobbiamo inserire la seguente stringa o togliere il commento.
www-data ALL=NOPASSWD: ALL
pi ALL=(ALL)NOPASSWD:ALL
apache ALL=(ALL)NOPASSWD:ALL

potrebbe essere scritta anche così:
www-data ALL=PYTHON, NOPASSWD: ALL

Server Web

Server web con Apache
Per utilizzare Raspberry come server web dobbiamo installare il pacchetto apache2

- Per prima cosa utilizziamo il corretto comando apt per aggiornare sia lista che pacchetti
sudo apt-get update (aggiorno lista)
sudo apt-get upgrade (aggiorno i pacchetti)
- Dopodiché utilizzo il comando apt per installare un pacchetto
sudo apt-get install apache2


- Per verificare il funzionamento di apache provo ad aprire un browser e a digitare sulla barra di ricerca l'indirizzo IP di raspberry. Se tutto funziona allora dovrebbe apparire la seguente pagina web.

- Se volessi creare una mia pagina web basta utilizzare il comando cd per spostarsi nella directory della pagina index.html
cd /var/www/html
-Dentro la precedente directory troverete già un file index.html (pagina di default apache2). Per cancellarlo basta utilizzare il comando rm e poi per crearne uno nuovo e modificarlo uso il comando nano. 
rm index.html
nano index.html
- Dentro il file che creare potete direttamente scrivere in html e poi per salvare bisogna utilizzare sempre "ctrl O" e per uscire "ctrl X". per verificare il funzinoamento basta riprovare a collegarsi da Browser con l'IP di Raspberry


PS: non è necessario spostarsi nella directory per modificare i file basta specificarla quando si usa il comando es:
nano /var/www/html/index.html
Ricordarsi di usare sudo ove necessario

Installazione VS code e Node JS

VS CODE

Per l'installazione di VS code da terminale digitiamo il seguente comando:

sudo apt install code


Node JS

Mentre per l'installazione di node JS utilizziamo il seguente comando:

wget -O - https://raw.githubusercontent.com/audstanley/NodeJs-Raspberry-Pi/master/Install-Node.sh | sudo bash;
node -v;

Per verificare che si sia installato scriviamo da terminale:
node -v


Cambiare root directory Apache2
Di default la root directory (Directory dove Apache si pesca index.html) di Apache 2 è /var/www/html , se volessimo impostare una root directory diversa dobbiamo seguire i prossimi step:

  1. Dobbiamo modificare il primo file che si chiama 000-default.conf
  2. il file si trova in /etc/apache2/sites-available
  3. Modificare la seguente stringa con la nuova directory:  DocumentRoot /path/to/my/project
  4. Riavviare il servizio Apache: sudo service apache2 restart


Se provando a collegarsi a Raspberry in HTTP da il seguente errore: Forbidden You don't have permission to access / on this server. Allora dobbiamo seguire questi step per modificare i permessi


  1. Trovare apache2.conf situato in /etc/apache2
  2. Trovare la seguente stringa 
  3. <Directory />
         Options FollowSymLinks
         AllowOverride none
         Require all denied
     </Directory>
  4. Modificarla come segue 
  5.  <Directory />
         Options Indexes FollowSymLinks Includes ExecCGI
         AllowOverride All
         Require all granted
     </Directory>
  6. Riavviare apache2


Approfondimento a questo link