Wiki Raspberry Pi

Indice dei contenuti

1. Installazione e configurazione generale 2

1.1 Creazione della scheda SD 3

1.2 La prima volta 3

1.3 Il comando raspi-config 4

1.4 Accessibilità via rete - impostazione dei numeri di IP 4

1.5 Impostazione server DNS 6

1.6 Connessione SSH 6

1.6.1 Impostazione sul server 6

1.6.2 Impostazione del client. In pratica normalmente si parte da qui 6

1.7 Running out of space 6

1.8 Come creare un collegamento diretto PC-Raspi 7

1.9 Spegnimento/riavvio 7

1.10 Come fare un'immagine della scheda SD in Linux 7

2. Come cambiare nome alla macchina (host) 8

3. Software utile 9

3.1 Editor: Midnight commander e Geany 9

3.2 Trasferimento file: SFTP 9

3.3 Gestore grafico di pacchetti su Raspberry 9

4. Connessione per desktop remoto con VNC server 9

4.1 Server sul Raspberry 9

4.1.1 Partenza VNC server dentro ssh del client verso Raspi 10

4.2 Client su Ubuntu Linux o Windows 10

4.2.1 sul client Linux 10

4.2.2 sul client Windows 10

4.2.3 poi, sia da Linux che da Windows 10

5. Running VNCServer at Startup 10

5.1 Step 1. 11

5.2 Step 2. 11

5.3 Step 3. 11

6. Attivazione CGI 11

6.1 1- installazione di Apache2 11

6.2 2-attivazione di una pagina CGI di prova. 12

7. Attivazione di script CGI in Python 12

8. Come assegnare privilegi root ad altri utenti 13

8.1 Metodo 1 13

8.2 Metodo 2 13

9. Configurazione Apache 13

9.1 Dare ad Apache il permesso di eseguire comandi come root 13

9.2 Restringere l'accesso a una directory su server di cui non si ha il completo controllo (es. Aruba) 13

9.3 vediamo come abilitare l'interpretazione del file ".htaccess". 14

10. Come installare PHP sul server web Raspberry 16

11. Accesso a vari parametri interni del Raspberry PI 16

12. Automatizzazione del caricamento di servizi (daemon) alla partenza 16

13. cron: automatizzazione della partenza di programmi ad un certo intervallo di tempo 17

14. Leggere i sensori 1-wire 17

14.1 Automatizzazione del caricamento moduli 18

15. Configurazione device col nuovo sistema DT 18

16. I sensori I2C e 1wire 18

16.1 Installazione: 18

16.2 Messa in esercizio: (moduli del kernel da attivare) 19

16.3 Comandi shell utili: 19

17. Webcam 20

17.1 Installazione 20

17.2 Time-lapse 20

18. Modulo relè 2 canali 5 V 21

19. Avviare applicazioni in automatico al boot 22

19.1 Avviare un programma dopo il server X 22

19.2 Avviare un programma che non richiede il server X 23

APPENDICI 23

1. Passi per l'allestimento di un nuovo Raspberry 23

2. Installazione delle risorse per il telecontrollo 25

2.1 Server web e PHP 25

2.2 GPIO 26

3. Dati fisici Raspberry PI 27

4. Troubleshooting 27


1.Installazione e configurazione generale

In generale si può seguire questa interessante guida generale alla preparazione del Raspberry:

http://www.wikihow.com/Make-a-Raspberry-Pi-Web-Server

orientata a farne un web server.

1.1 Creazione della scheda SD

Per prima cosa occorre creare una scheda SD che contenga in sostanza il BIOS e separatamente il sistema operativo. Perciò vedi http://elinux.org/RPi_Easy_SD_Card_Setup. BerryBoot è un sistema particolarmente semplice.

In ogni caso il sistema più diretto è scaricare l'immagine e copiarla sulla SD, dopo averla formattata come FAT 32, seguendo ad esempio le indicazioni di

http://www.raspberrypi.org/documentation/installation/installing-images/README.md

che in sostanza suggerisce di utilizzare in Linux il software gparted.

Se si utilizza Linux per la preparazione si può seguire:

http://www.raspberrypi.org/documentation/installation/installing-images/linux.md

In questo link si propone di seguire la seguente procedura.

Dopo aver formattato la scheda, con il comando

df -h

si individua la partizione attuale, che (a parte altre considerazioni riguardanti la grande accortezza da adottare per evitare di formattare tutto il disco) ipotizziamo chiamarsi xxxYY. Attenzione che xxx è il nome dell'intera scheda, e Y indica la partizione. Ad esempio mmcblk0p1 (mmcblk0 + p1), sdd1 (sdd + 1), sdc2 (sdc + 2) etc.

Quindi si smonta con il comando

umount /dev/xxxYY

A questo punto si carica l'immagine della scheda con

sudo dd bs=4M if=percorso+file.img of=/dev/xxxYY

Infine

sudo sync

per misteriose ragioni, ma importanti (serve comunque a permettere il rilascio della scheda).

1.2 La prima volta

A questo punto si inserisce la scheda nella fessura del Raspi e si impostano i principali parametri nella schermata blu che appare. In questo modo si sta editanto il file /boot/config.txt, cosa che si può ripetere ogni volta che si vuole.

Fatto partire il Raspi, arriva la richiesta di login, con

username: pi
password: raspberry

poi normalmente si fa partire l'interfaccia grafica:

startx

Per accedere dall'esterno occorre sapere l'IP number. Se non lo si sa in anticipo (es. utilizzando un IP statico) si può trovare l'ip con:

ifconfig

1.3 Il comando raspi-config

Si è visto che alla partenza Raspi propone l'impostazione della configurazione generale. Per impostare diversi parametri generali, cosa che in genere si fa una volta per tutte, come accennato si utilizza dunque il programma raspi-config. Da terminale digitare:

sudo raspi-config

e configurare tutto quello che serve, in particolare

1.4 Accessibilità via rete - impostazione dei numeri di IP

Occorre anzitutto fare in modo che il Raspi sia raggiungibile via rete. Un ottimo articolo è questo.

Prima di tutto digitare ifconfig per avere le informazioni sulla situazione attuale di rete del Raspi. Volendo anche sudo route -n per avere altre informazioni sulla strada verso Internet.

A questo scopo occorre editare, per esempio con nano, il file /etc/network/interfaces:

sudo nano /etc/network/interfaces

Per il caso della rete Ethernet, via cavo, occorre poi rimpiazzare l'interfaccia di eth0 con la

.....................................
auto lo

#Loopback ==========================
iface lo inet loopback

##Ethernet DHCP =====================
#iface eth0 inet dhcp

#Ethernet static --------------------------
iface eth0 inet static
address 192.168.1.202  <=========CAMBIARE!
netmask 255.255.255.0
gateway 192.168.1.1   <=========CAMBIARE!
network 192.168.1.0   <=========NON NECESSARIO. NEL CASO CAMBIARE!
broadcast 192.168.1.255   <=========NON NECESSARIO. NEL CASO CAMBIARE!

auto wlan0
allow-hotplug wlan0

##Wi-Fi DHCP =====================
#iface wlan0 inet dhcp
#pre-up wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant.cond -B

iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

#Wi-Fi static --------------------------
iface wlan0 inet static
address 192.168.1.202  <=========CAMBIARE!
netmask 255.255.255.0
gateway 192.168.1.1   <=========CAMBIARE!

#----------------------
#iface default inet dhcp
.....................................

Conviene anche installare wpasupplicant che propone una gui di gestione di wlan

sudo apt-get install wpasupplicant
quindi per la gui digito
sudo wpa_gui

Una volta cambiato il file, si possono riavviare subito le nuove interfacce di rete prima spegnendo quella interessata, ad esempio la eth0:

sudo ifdown eth0

e poi riaccendendola:

sudo ifup eth0

Con ifquery si possono verificare quali interfacce sono attivate.

Verificare poi con

ifconfig

se i numeri vengono assegnati bene.

1.5 Impostazione server DNS

Si edita il file /etc/resolv.conf, con le righe del tipo

nameserver 8.8.8.8

per esempio se si vuole usare quello di Google

1.6 Connessione SSH

Per pilotare dall'esterno si utilizza normalmente SSH. Sul Raspi si imposta il suo server per inviare i comandi da un'altra macchina in rete.

1.6.1 Impostazione sul server

Siccome può far comodo farlo sempre, è prevista la possibilità di farlo partire alla partenza direttamente da raspi-config (cfr.)

1.6.2 Impostazione del client. In pratica normalmente si parte da qui

Se il client da cui ci si collega è Linux, non occorre installare nulla. In ambiente Windows occorre procurarsi un'applicazione client. Si può utilizzare putty, che fornisce un eseguile “putty.exe” che va semplicemente fatto partire da terminale oppure direttamente dal menù Start.

Dopo essersi procurati questo programma client per connettersi, occorre sapere il numero di IP del Raspi (v. prec.) Volendo, si può provare da terminale la connessione con ping:

ping 192.168.1.x

Durante l'esecuzione chiede

Are you sure you want to continue connecting (yes/no)? 

La risposta è

yes

a questo punto lui chiede la password dell'utente pi, che naturalmente è

raspberry

A questo punto deve apparire il prompt

pi@raspberrypi ~ $

1.7 Running out of space

When running sudo apt-get upgrade, it will show how much data will be downloaded and how much space it will take up on the SD card. It's worth checking with

df -h

that you have enough disk space free, as unfortunately apt will not do this for you. Also be aware that downloaded package files (.deb files) are kept in /var/cache/apt/archives. You can remove these in order to free up space with

sudo apt-get clean.

1.8 Come creare un collegamento diretto PC-Raspi

Editare il file /boot/cmdline.txt aggiungendo in fondo:

ip=192.168.1.x

1.9 Spegnimento/riavvio

Per spegnere (e basta) immediatamente:

sudo shutdown now

Per fare il reboot, subito

sudo shutdown -r now 

oppure

sudo reboot

o anche (dovrebbe velocizzare perché non fa il controllo del disco)

sudo shutdown -f now

1.10 Come fare un'immagine della scheda SD in Linux

(da http://www.makeuseof.com/tag/easily-clone-your-sd-card-for-trouble-free-raspberry-pi-computing/)

Before inserting the SD card into the reader on your Linux PC, run the following command to find out which devices are currently available:

df -h

Which will return something like this:

    Filesystem 1K-blocks Used Available Use% Mounted on
    rootfs 29834204 15679020 12892692 55% /
    /dev/root 29834204 15679020 12892692 55% /
    devtmpfs 437856 0 437856 0% /dev
    tmpfs 88432 284 88148 1% /run
    tmpfs 5120 0 5120 0% /run/lock
    tmpfs 176860 0 176860 0% /run/shm
    /dev/mmcblk0p1 57288 14752 42536 26% /boot

Insert the SD card into a card reader and use the same df -h command to find out what is now available:

    Filesystem 1K-blocks Used Available Use% Mounted on
    rootfs 29834204 15679020 12892692 55% /
    /dev/root 29834204 15679020 12892692 55% /
    devtmpfs 437856 0 437856 0% /dev
    tmpfs 88432 284 88148 1% /run
    tmpfs 5120 0 5120 0% /run/lock
    tmpfs 176860 0 176860 0% /run/shm
    /dev/mmcblk0p1 57288 14752 42536 26% /boot
    /dev/sda5 57288 9920 47368 18% /media/boot
    /dev/sda6 6420000 2549088 3526652 42% /media/41cd5baa-7a62-4706-b8e8-02c43ccee8d9

The new device that wasn't there last time is your SD card.

The left column gives the device name of your SD card, and will look like '/dev/mmcblk0p1' or '/dev/sdb1'. The last part ('p1' or '1') is the partition number, but you want to use the whole SD card, so you need to remove that part from the name leaving '/dev/mmcblk0' or '/dev/sdb' as the disk you want to read from.

Open a terminal window and use the following to backup your SD card:

    sudo dd if=/dev/sdb of=~/SDCardBackup.img

As on the Mac, the dd command does not show any feedback so you just need to wait until the command prompt re-appears.

2.Come cambiare nome alla macchina (host)

Editare /etc/hosts, ad esempio:

sudo nano /etc/hosts

in fondo

127.0.1.1 raspberry

cambiare in xxxxx

poi hostname, al solito:

sudo nano /etc/hostname

contiene solo lo stesso nome, cambiarlo in xxxxx

poi attivare con

sudo /etc/init.d/hostname.sh

e fare il reboot, per esempio con

sudo reboot

3.Software utile

3.1 Editor: Midnight commander e Geany

Midnight Commander permette di usare fin da subito I file da riga comando. Parte con

mc

Invece Geany è un editor da interfaccia grafica. Si installa con:

sudo apt-get install geany

3.2 Trasferimento file: SFTP

Sin da subito è attivo il server SFTP con username e password dell'utente (pi e raspberry). La porta di default è la 22, quindi non c'è bisogno di impostarla.

3.3 Gestore grafico di pacchetti su Raspberry

Si tratta di synaptic

4.Connessione per desktop remoto con VNC server

Per vedere il desktop di Raspberry da un'altra macchina in rete, si può utilizzare il software VNC, composto da un server (sul Raspberry) ed un client (su qualunque macchina, Linux o Windows).

4.1 Server sul Raspberry

Anzitutto va installato il server, che è una versione ottimizzata, e si chiama tightvncserver. Al solito si installa da dentro Raspberry con

sudo apt-get install tightvncserver

Per farlo partire, banalmente si digita

tightvncserver

[per smanettoni: Lui risponde con

New 'X' desktop is via-oretti:n

dove “n” è un numero che indica il numero della sessione. In pratica questo determina il numero della porta di accesso, nel senso che (come si vedrà più avanti) la porta di default per n = 1 sarà la 5901, per n = 2 la 5902 etc.]

Attenzione! La prima volta chiede di impostare una password per chi accede. Logico. Solo che lo fa in un modo che fa pensare che voglia una password già impostata da prima (commenta infatt i ”using password file xxxx”), come fosse un normale login, e quindi uno non sa bene cosa impostare. Quindi ricordarsi che la password digitata sarà quella “ufficiale” per accedere. Chiede poi anche una seconda password per chi accede in sola lettura. Lunghezza della password: tra 6 e 8 caratteri.

Per accedere si utilizzerà una porta, che di default sarà la 5901. Da ricordare quando si accederà (teoricamente potrebbe poi avere più sessioni, ma lasciamo stare)

Si può cambiare la password (v. link http://www.tightvnc.com/vncpasswd.1.php) con il comando vncpasswd. Esso richiama la stessa richiesta di password della prima volta (cfr. più sopra)

4.1.1 Partenza VNC server dentro ssh del client verso Raspi

Volendo si può far partire da remoto, con l'interfaccia remota a carattere SSH, l'interfaccia remota grafica VNC! A questo fine, una volta dentro raspi con ssh, si fa ovviament partire il server vnc, nello stesso modo che si seguirebbe lavorando direttamente sul Raspi, digitando

tightvncserver

seguendo la stessa trafile di impostazione password etc. indicata in precedenza.

4.2 Client su Ubuntu Linux o Windows

A quel punto si ritorna al client (si esce dal Terminale, se si è andati con SSH). Sia con Linux che con Windows ricordare che la connessione andrà impostata a:

192.168.1.x:porta

Ricordo che la porta di default è 5901 – oppure 5902 etc., vedi sopra il capitolo sul server

4.2.1 sul client Linux

Si possono usare Remote Desktop Viewer oppure Remmina (migliore, perché mi sembra più configurabile, cosa abbastanza importante con i viewer remoti, soprattutto per quanto riguarda i colori, la compressione e la risoluzione, che sono fondamentali per una buona visione).

Per Remote Desktop Viewer in un colpo solo via riga di comando

vinagre 192.168.1.x:porta

Ovviamente l'utente sottinteso è nel nostro caso pi, e lui chiede la password. Si immette la password, che per il momento è

password

Con questa si entra dunque come utente pi.

4.2.2 sul client Windows

Si può usare TightVNC. Anche qui si fa partire e si entra come in Linux, inserendo nella configurazione l'indirizzo

192.168.1.x:porta 

(solita 5901 come default). Anche qui si segue la procedura come sul client Linux.

4.2.3 poi, sia da Linux che da Windows

A questo punto parte l'interfaccia normale di Raspberry.

5.Running VNCServer at Startup

Tratto da: http://learn.adafruit.com/adafruit-raspberry-pi-lesson-7-remote-control-with-vnc/running-vncserver-at-startup

This method will only work if you have set your Pi to automatically log into the desktop environment. See Lesson 2.

Connecting to your Raspberry Pi remotely with VNC is fine as long as your Pi does not reboot. If it does, then you either have to connect with SSH and restart the VNC Server or arrange for the VNC Server to run automatically after the Raspberry Pi reboots.

There are several different methods of arranging for some code to be run as the Pi starts. The method described below is probably the easiest to use. You can adapt it to run other commands instead of starting the VNC server.

5.1 Step 1.

Open a Terminal session on the Pi, or connect using SSH. A new terminal or SSH session will automatically start you off in your home directory of /home/pi. If you are not in this directory, change to it by typing:

$ cd /home/pi

Then cd to the .config directory by typing:

$ cd .config

Note the '.' at the start of the folder name. This makes it a hidden folder that will not show up when you type 'ls'.

5.2 Step 2.

Issue the command below to create a new directory inside .config called 'autostart'.

$ mkdir autostart

cd into that new directory by typing:

$ cd autostart

5.3 Step 3.

All that remains is to edit a new configuration file. So type the following command to open the nano editor on the new file:

$ nano tightvnc.desktop

Edit the contents of the file with the following text.

[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false

Type ctrl-X and then Y to save the changes to the file.

Thats all there is to it. The next time you reboot the VNC server will restart automatically.

6.Attivazione CGI

6.1 1- installazione di Apache2

Per sicurezza, digitare

apg-get update

poi:

sudo apt-get install apache2 

Per controllare che tutto sia a posto, chiamare da un'altra macchina in rete col browser

http://xxx.xxx.xxx.xxx

dove xxx.xxx.xxx.xxx è l'indirizzo della pagina (se si chiama dallo stesso Raspberry chiamare 127.0.0.1.

I file della root sono nella directory /var/www/, in particolare lui ci mette index.html.

6.2 2-attivazione di una pagina CGI di prova.

Start Leafpad by opening a terminal and typing

sudo leafpad /usr/lib/cgi-bin/hello.cgi &

Type this code into leafpad:

#!/bin/bash
echo -e "Content-type: text/html\n\n" 
echo "<h1>Hello World</h1>"

First row to specify the interpreter, then a row for the header. Very important that the row ends with “\n\n”. Everything put after that is displayed on client's browser.

Save it, and make the file executable with this command:

sudo chmod +x /usr/lib/cgi-bin/hello.cgi 

A questo punto basta chiamare dal browser

http://xxx.xxx.xxx.xxx/cgi-bin/hello.cgi

7.Attivazione di script CGI in Python

Occorre dire ad Apache di interpretare gli script Python.

Allora digitare:

sudo leafpad /etc/apache2/sites-enabled/000-default & 

Il file abilita il sito di default ed eventualmente altri siti. Cercare la sezione

<Directory "/usr/lib/cgi-bin">
...
</Directory> 

Aggiungere la riga

AddHandler cgi-script .py 

e ovviamente salvare. Ricaricare poi Apache con le sue configurazioni:

sudo service apache2 reload 

Poi in un editor di testo creare il file /usr/lib/cgi-bin/hello.py :

#!/usr/bin/env python
print "Content-type: text/html\n\n"
print "<h1>Hello World</h1>"

Anche qui valgono ovviamente le regole del caso CGI per la formazione del file.

Rendere poi eseguibile il file:

sudo chmod +x hello.py

A questo punto basta chiamare dal browser

http://xxx.xxx.xxx.xxx/cgi-bin/hello.py

8.Come assegnare privilegi root ad altri utenti

8.1 Metodo 1

Occorre usare visudo per assegnare i privilegi di root ad altri utenti. Anzitutto lo si chiama con

sudo visudo

Una volta dentro, lui edita un file con nano. Usare le frecce per spostarsi ed aggiungere le istruzioni che servono, di solito del tipo

userxxxx ALL = ........

Alla fine si salva con Ctrl+X e si sceglie S (=Sì oppure Y=Yes) per confermare il salvataggio

Mi sembra che crei un file /etc/sudoers.tmp, che poi probabilmente viene sostituito a quello ufficiale /etc/sudoers.

8.2 Metodo 2

Brutalmente si edita sudoers con privilegi root!:

sudo nano /etc/sudoers

9.Configurazione Apache

9.1 Dare ad Apache il permesso di eseguire comandi come root

Tenere presente che Apache gira come utente www-data. Quindi si deve editare come indicato in altro paragrafo il file sudoers, aggiungendo la riga:

www-data ALL=(ALL) NOPASSWD: ALL

9.2 Restringere l'accesso a una directory su server di cui non si ha il completo controllo (es. Aruba)

Tra le tantissime, una buona guida è http://www.htaccess-guide.com/

Comunque il sistema più diretto è quello di creare il file .htaccess nella directory da proteggere (con le sue sottodirectory). Esso contiene la path ed il nome di un altro file (.htpasswd) che contiene la coppia o le coppie username:password autorizzati ad entrare. Il file .htpasswd andrebbe messo in una directory non visibile dal web, ma io in Aruba non ne ero capace e come molti l'ho messo insieme all'altro. Attenzione però che la path ci deve lo stesso essere, ed essere completa (almeno su molti sistemi, compreso quello di Aruba).

Il problema principale è che la password va criptata, quindi occorre servirsi di uno dei tanti siti o programmi che lo fanno. Per complicare le cose, bisogna scegliere con che sistema vuole criptare, ma fortunatamente mi sembra che accetti diversi sistemi, e si accorga da solo qual'è quello utilizzato.

Esempio brutale minimo, che funziona ma senza pretese.

Allora, .htaccess:

AuthUserFile /nfs/stak/u4/z/[username]/public_html/private/.htpasswd
AuthName "Secret Stuff" 
AuthType Basic
require valid-user

Importante: la path della prima riga è quella vista dal server, nel caso di Aruba è un problema, perché non si ha accesso ad esso. Io me la sono cavata copiandolo da quello automatico del sito in Joomla, e nel mio caso è, per intenderci:

/web/htdocs/www.trovaperditaacqua.it/home//dati/falcon/.htpasswd

Attenzione alle doppie barre a metà. Il resto va solo copiato.

Per il file . Htpasswd, un buon sito per preparare la password è http://tools.dynamicdrive.com/password/ , che non fa scegliere niente, così si fa prima.

Si immette per esempio a sinistra

userrnamePippo 

e a destra

passwordPluto 

ottenendo

userrnamePippo:68UDoGQi3hIJs

che va messo come unico contenuto di .htpasswd.

Alla fine se si cerca di aprire un file nella directory protetta il sistema chiede username e password e protegge il tutto.

9.3 vediamo come abilitare l'interpretazione del file ".htaccess".

Questo file, residente solitamente nella root del sito, viene utilizzato per sovrascrivere (in inglese "override") la configurazione base del server. Funzionalità che risulta utile per modifiche "on the fly", quali la restrizione all'accesso ad alcune cartelle, con l'inserimento di username e password, il rewrite degli url, il blocco di indirizzi IP, utile contro bot o per limitare l'accesso ai crawler.

Normalmente Apache all’avvio legge il suo file di configurazione (httpd.conf), regolando così a seconda di quest'ultimo, il comportamento che tenere alla richiesta HTTPdi un client. Mentre attivata l'interpretazione del file .htaccess, prima di mandare una risposta, controlla se nella cartella in cui è presente il file visualizzato (es. index.html), o in quelle superiori, è presente quest'ultimo file. Se la ricerca è affermativa lo legge modificando "al volo" la configurazione di Apache.

Innanzitutto diamo otteniamo i permessi di root, da terminale, digitando:

sudo -i

Successivamente abilitiamo il mod_rewrite, con

a2enmod rewrite

Questa funziona scriverà il seguente link simbolico: LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so, nel file /etc/apache2/mods-available/rewrite.load.

Ora dobbiamo dire ad Apache di trovare un eventuale file .htaccess, modificando la sua configurazione base,

sudo gedit /etc/apache2/sites-enabled/default

E sostituiamo il seguente testo...

[...]      
        Options FollowSymLinks
         AllowOverride None

        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
[...]

con...

[...]
        Options FollowSymLinks
        AllowOverride None

        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,
        allow from all
[...]

Infine, come dopo ogni modifica al server, riavviamo!

service apache2 restart


10.Come installare PHP sul server web Raspberry

Chiamare:

sudo apt-get install php5 libapache2-mod-php5 -y

A questo punto si può fare già tutto, aggiungendo le pagine php al sito. Eventualmente vedere

http://www.raspberrypi.org/documentation/remote-access/web-server/apache.md

11.Accesso a vari parametri interni del Raspberry PI

Seguono, in ordine sparso, alcune indicazioni su come accedere a parametri interni.

Info sulla CPU

cat /proc/cpuinfo

Versione firmware

uname -a

Temperatura processore:

vcgencmd measure_temp 

che restituisce temp=50.8'C

Le principali frequenze di clock

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

Altri valori su http://www.maketecheasier.com/finding-raspberry-pi-system-information/

12.Automatizzazione del caricamento di servizi (daemon) alla partenza

Il caricamento dei servizi si può automatizzare alla partenza creando un file, ad esempio 1wire_kernel_mod.sh, che contiene come prima riga:

#!/bin/bash

più altre righe con le normali chiamate di bash. Il file va messo in /etc/init.d e gli vanno dati i diritti di esecuzione.

Infine occorre inserirlo nella lista dei programmi da eseguire alla partenza nel seguente modo:

sudo update-rc.d nomescript.sh defaults

13.cron: automatizzazione della partenza di programmi ad un certo intervallo di tempo

Nella directory /etc ci sono le directory cron.daily, cron.hourly etc, il cui contenuto viene eseguito in modo corrispondente, nel senso che vengono eseguiti tutti I file eseguibili che si trovano al loro interno, appunto, ogni ora, giorno, mese etc..

Per dei file bash è importante che non siano nomi con il punto. Ovviamente ci deve essere il permesso all'esecuzione e l'owner deve essere dato a root.

Per farlo andare con periodi inferiori all'ora intera, o anche semplicemente per attivarli ogni certo periodo di tempo senza utilizzare la scorciatoia delle directory .hourly. monthly etc., si edita il file /etc/crontab.

crontab -e (con questo codice si edita il file e poi con ctrl-x si esce salvando)

Qui, per l'eseguibile xxxxxxxxxxxx, si aggiunge una riga tipo:

*/2 * * * * root /etc/cron.hourly/xxxxxxxxxxx

se lo si vuole far partire ogni 2 minuti.

Si può farlo partire anche a minuti scelti, tipo 5,18, 49, ma non sappiamo esattamente come.

14.Leggere i sensori 1-wire

Anzitutto vanno collegati i fili. Per l'esattezza, guardando il chippino in modo da vedere la scritta:

I sensori onewire si leggono attraverso un modulo del kernel, che si carica alla partenza. Per caricarlo:

sudo modprobe wire
sudo modprobe w1_gpio
sudo modprobe w1_therm

Adesso possiamo andare a vedere il contenuto della directory /sys/bus/w1/devices:

cd /sys/bus/w1/devices/
ls

La risposta dovrebbe essere simile a questa:

10-0008021884c0 w1_bus_master1

La directory a sinistra rappresenta il sensore. Ogni sensore ha il suo numero di serie e quindi se ripetete questo esperimento con un vostro sensore il numero che vi comparirà sarà differente (per avere lo stesso numero dovrei prestarvi il mio). Potete anche mettere piu' sensori collegati in parallelo, vi compariranno piu' sottodirectory contrassegnate con il numero di serie dei vari sensori.

Per leggere la temperatura basta leggere il file virtuale w1_slave nella directory del sensore:

cat /sys/bus/w1/devices/10-0008021884c0/w1_slave 

risposta:

24 00 4b 46 ff ff 10 10 0d : crc=0d YES
24 00 4b 46 ff ff 10 10 0d t=17750

La temperatura e' in millesimi di grado: 17750 significa che ora qui ci sono 17.750 gradi centigradi. Il range di temperatura del ds18s10 e' -55/+125 gradi, con accuratezza di 0.5 gradi.

Se il CRC non fosse verificato significa che occorre controllare il cablaggio (oppure c'e' stato un disturbo, e.g. un fulmine)

14.1 Automatizzazione del caricamento moduli

Il caricamento dei moduli si può anche automatizzare alla partenza semplicemente aggiungendo nel file /etc/modules le righe coi nomi dei moduli del kernel da aggiungere:

wire
w1_gpio
w1_therm

Si apre dunque il file /etc/modules con un editor in “modalità sudo”, in modo che il file sia rilasciato coi diritti di root, gli si aggiungono le 3 righe precedenti e si salva.

Poi si riavvia il Raspi.

Seguendo le indicazioni del paragrafo riguardante l'automatizzazione della partenza all'accensione, si può preparere un file di nome per esempio 1wire_kernel_mod.sh, che

....


15.Configurazione device col nuovo sistema DT

Tenere presente che nell'ultima versione di Raspbian, la configurazione dei device si è allineata a quella generale di Linux, con l'utilizzo del DT (directory tree).

Se avete del software fatto in precedenza che smette di funzionare all'aggiornamento di Raspi, per far ripartire velocemente il vecchio sistema, si edita il file config.txt (v. capito sull'installazione).

16.I sensori I2C e 1wire

16.1 Installazione:

OneWire : nulla

I2C :

sudo apt-get install i2c-tools
sudo apt-get install python-smbus

16.2 Messa in esercizio: (moduli del kernel da attivare)

OneWire :

sudo modprobe wire
sudo modprobe w1_gpio
sudo modprobe w1_therm

(wire può essere omesso perché è automaticamente caricato con w1_gpio, vedere con lsmod)

I2C :

sudo modprobe i2c_dev
sudo modprobe i2c_bcm2708

16.3 Comandi shell utili:

OneWire :

ls /sys/bus/w1/devices/

qui la dir. con nome numerico lungo 15, con il segno '-' in terza posizione, rappresenta il codice identificativo del sensore OneWire; al suo interno il file w1_slave ha la temperatura espressa in fondo con t=nnnnn in cui le prime due cifre sono i gradi C° e la successiva cifra sono i decimi di grado.

I2C :

sudo i2cdetect -y 1

cerca tutti i devices sul bus I2C n.1 e li mappa ad es. così:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- 26 -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77

mostrandone l'indirizzo esadecimale.

I2C prevede che gli integrati comunichino tramite registri, ogni registro ha un indirizzo. In semplici casi è possibile usare i comandi i2cget/i2cset per scrivere o leggere i registri.

sudo i2cset -y 1 0x26 0x00 0x00
sudo i2cget -y 1 0x26 0x09

17.Webcam

17.1 Installazione

Mi sono basato su

https://www.raspberrypi.org/learning/python-picamera-setup/worksheet.md

a cui rimando. Nel caso cambino il link, cercarlo con “Python Picamera Setup by Dave Jones “.

Sintetizzando, anzitutto con raspi-config si va alla voce apposita e si imposta la disponibilità della webcam, selezionando la voce

Enable Camera

quindi Finish e Yes.

Si riavvia e, una volta ripartiti, si digita

raspistill -o image.jpg

Si vede l'immagine per qualche secondo, poi si spegne e si torna al terminale.

Poi si fa partire Python.

qui il link dello script che salva l'immagine della webcam sul sito

http://grechi.it/blog/2014/10/22/realizzazione-webcam-esterni-raspberry-pi/

- qui l'essenziale:

Gli unici requisiti per il suo funzionamento dello script sono i seguenti:

mkdir /home/pi/images
sudo apt-get install ftp imagemagick

Lo script (che è nelle apps) può essere eseguito ad intervalli regolari tramite Cron, per esempio ogni 5 minuti con un’impostazione come questa:


*/5 * * * * /home/pi/apps/webcamscript.sh

Che ricordo va inserita digitando “crontab -e” nel terminale. ATTENZIONE: se si esegue uno script con crontab bisogna dare i permessi di esecuzione (tipo "anyone") a questo file se no crontab non lo esegue.

NON FUZIONAVA PIU': ho risolto togliendo l'estensione .script sia al file che in cron, leggi qui http://www.blandino.it/cron-non-funziona-controlla-lestensione-degli-script/

17.2 Time-lapse

Oltre al link già citato, suggerisco questo, che punta anche youtube:

https://www.raspberrypi.org/timelapse-tutorial-from-carrie-annes-geek-gurl-diaries/

18.Modulo relè 2 canali 5 V

la scheda riporta due "connettori":
1) a tre poli con un JUPER con inciso [(JD-VCC) (VCC)(GND) ]
2) a quattro poli con inciso [(GND)(IN1)(IN2)(VCC)]

osservando da sotto la scheda (ha su entrambe le facce le piste di rame)
si vede che GND e VCC  del primo connettore sono collegati rispettivamente
a GND e VCC del secondo connettore.

Alimentando con 5Volt
(appunto, come appena detto, sia dal connettore di DX che dal connettore di SX è lo stesso, non cambia niente)


posso avere due modi di funzionamento:
(CON JUMPER) (SENZA JUMPER)
NB. IL JUPER, QUANDO INSERITO SERVE A PONTICELLARE IL MORSETTO tripolare  DI DX
OSSIA [(JC-VCC)--(VCC) ]

CASO (1) : SENZA JUMPER  (funzionano solo i micro LED sullo stampato, nel mio caso sono rossi)
SE CON UN PONTE collego [(IN1)] a massa [(GND)] -----> SI ACCENDE IL LED DI SINISTRA (non il relè)
SE CON UN PONTE collego [(IN2)] a massa [(GND)] -----> SI ACCENDE IL LED DI DESTRA  (non il relè)

CASO (2) : CON JUMPER  (funzionanoSIA i micro LED sullo stampato, SIA i relè )
SE CON UN PONTE collego [(IN1)] a massa [(GND)] -----> SI ACCENDE IL LED DI SINISTRA INSIEME AL  relè DI SINISTRA
SE CON UN PONTE collego [(IN2)] a massa [(GND)] -----> SI ACCENDE IL LED DI DESTRA  INSIEME AL  relè DI DESTRA


TUTTO QUA.

NOW, ADESSO, IL MIO CONSIGLIO PER I NOVELLI
E' DI NON ALIMENTARE IL CIRCUITO DIRETTAMENTE
CON ARDUINO MA DI ALIMENTARLO CON UNA FONTE A 5V
ESTERNA (anche i relè si eccitano a 5Volt)

se proprio non sapete come reperire una 5Volt tagliate uno spezzone
di maschio usb, costa un euro dai cinesi, saldateci un connettore e
un led di segnalazione come ho fatto io. (con una foto si capirebbe meglio...)

altrimenti se volete fare solo delle prove, usatelo senza JUPER, cosicchè accendete
solo i led senza sovraccaricare troppo il povero arduino.

TAG relè, arduino, doppio relè, due relè,
TAG HCARDU0043
TAG 2 channel 2 way 5V Relay Module

19.Avviare applicazioni in automatico al boot

19.1 Avviare un programma dopo il server X

La gran parte dei programmi che utilizziamo hanno un interfaccia grafica... e come tali, richiedono che il sistema abbia già avviato in precedenza un gestore grafico che sia in grado di supportarli.
Si sta parlando dell'X Window system, disponibile per tutti i sistemi Linux.
Alla luce di questo diventa chiaro come sia indispensabile rispettare una sequenza di avvio affinchè tutto funzioni a dovere: ogni programma (con interfaccia grafica) in esecuzione all'avvio dovrà aspettare che il server X sia pronto, e quindi avviarsi dopo di lui.

Per avviare un programma solo dopo l'avvio dell'X server dovremo procedere in questo modo:

Visto che si sta parlando di modalità grafica, apriamo un terminale.
Creiamo la cartella "autostart" dando il seguente comando:

Codice:

mkdir ~/.config/autostart

...e all'interno della cartella autostart creiamo un file vuoto:

Codice:

touch ~/.config/autostart/nomeprogramma.desktop

Chiaramente al posto di "nomeprogramma" potremo mettere qualsiasi nome ci aiuti a riconoscere il file, l'importante è che abbia l'estensione .desktop.
Ora dovremo modificare il file fornendogli le informazioni del programma che ci interessa avviare:

Codice:

sudo leafpad ~/.config/autostart/

In questo modo si aprirà l'editor di testo predefinito all'interno di Raspbian.

Compiliamo il contenuto del file come segue:

[Desktop Entry]
Name=nomeprogramma
Exec=comando
Type=application

"nomeprogramma" e "comando" saranno le uniche informazioni che dovrete modificare.
Dovrete a questo punto identificare quale comando permette l'avvio da terminale del programma che vi interessa, e inserirlo sotto la voce Exec=, in sostituzione al testo "comando".
Salvate, chiudete l'editor ed il gioco è fatto.
Ad ogni accensione il programma verrà avviato come richiesto.

19.2 Avviare un programma che non richiede il server X

In questo caso andremo a richiedere al sistema di avviare un programma prima della richiesta di login da linea di comando. Il server X sarà quindi disattivato o addirittura assente.
Da linea di comando richiediamo tramite l'editor "nano" la modifica del file rc.local (se non presente verrà creato):

Codice:

sudo nano /etc/rc.local

Appena prima della linea "exit" inseriamo il programma che vogliamo eseguire. In alternativa è possibile anche richiedere l'esecuzione di uno script python inserendo nel file di testo il comando

Codice:

python /posizione/dello/script.py

Fatto questo sarà sufficiente salvare, confermare ed uscire.
Al riavvio lo script/programma verrà eseguito.


Fonte:
Moddingstudio.com - Raspberry: Come avviare un programma in automatico all'accensione. http://www.moddingstudio.com/content.php?1474-Raspberry-Come-avviare-un-programma-in-automatico-all-accensione&s=40edbf40196be899ec8c4e51115d6e24#ixzz3kqb8dv00

APPENDICI

1.Passi per l'allestimento di un nuovo Raspberry

- scaricare l'ultima versione del sistema

- creare la SD con l'immagine scaricata

- inserirla nel Raspi e avviare

- configurare tutto il raspi-config (sudo raspi-config), in particolare

in particolare data e impostazione nazionale (locale) si possono chiamare così:

sudo dpkg-reconfigure tzdata

- aggiornare i sorgenti ed i pacchetti

sudo apt-get update
sudo apt-get upgrade

- installare Geany

sudo apt-get install geany

Quasi tutte le operazioni iniziali seguenti vanno fatte con sudo, per esempio

sudo pcmanfm
sudo geany

per far partire il file manager e l'editor

- aprendo geany, cambiare il nome della macchina, per non confonderlo, editando /etc/hosts (sostituire con xxxx il nome raspberrypi collegato all'IP 127.0.1.1?) e salvando

- sempre da geany cambiare anche in /etc/hostname allo stesso modo in xxxx, salvare e uscire (importante se no non funziona il seguente)

- riattivare con

sudo /etc/init.d/hostname.sh

- riavviare (sudo reboot)

- impostare l'IP statico nel file /etc/network/interfaces. In pratica prima si edita l'attuale /etc/network/interfaces con le righe

iface eth0 inet dhcp
iface default inet dhcp

- poi lo si avvia con ifdown, ifup (cfr. il par. rel.)

- a questo punto con ifconfig si guarda l'IP attuale assegnato da DHCP e lo si può utilizzare con SFTP per caricare il file interfaces precompilato in una directory dove non ci siano problemi di permessi, per esempio /home/pi, altrimenti SFTP non permette il caricamento. Ricordarsi che l'account dovrebbe essere pi + raspberry

- copiare interfaces nel posto giusto (/etc/network).

- su interfaces controllare

Alla fine sudo ifdown eth0 + sudo ifup eth0. Ricordarsi di reimpostare FTP dal client sul nuovo IP del file interfaces definitivo.

- verificare

- verificare in /etc/resolv.conf il DNS

A questo punto Internet le questioni di rete dovrebbero essere a posto in modo definitivo. Poi

- installare VNC server

sudo apt-get install tightvncserver

-far partire tightvncserver per impostare le password (password).

- impostare la partenza automatica di VNC server (praticamente copiare il file tightvnc.desktop nella directory - da creare - /home/pi/.config/autostart). Controllare che abbia i permessi di root.

- riavviare e controllare da un client (consiglio remmina) di un'altra macchina che VNC funzioni.

-controllare lo spazio disponibile con df -h (cfr. par. Running out of space)

2.Installazione delle risorse per il telecontrollo

2.1 Server web e PHP

- Controllare che sia installato Python (digitare python)

- installare Apache (cfr. anche apposito paragrafo)

sudo apt-get install apache2

- controllare da altra macchina che vada

-installare php (cfr. anche apposito paragrafo)

sudo apt-get install php5 libapache2-mod-php5 -y

oppure installarli insieme con

sudo apt-get install apache2 php5 libapache2-mod-php5

quindi riavviare Apache

sudo service apache2 restart

- dare ad Apache i permessi di root, inserendo in /etc/sudoers la riga (file con privilegi root)

www-data ALL=(ALL) NOPASSWD: ALL

2.2 GPIO

- installare le librerie GPIO di Python:

sudo apt-get install rpi.gpio

- (se ci sono sensori I2C) installare le librerie di I2C:

sudo apt-get install i2c-tools
sudo apt-get install python-smbus

- (se ci sono sensori 1wire) installare i moduli kernel di 1wire aprendo con sudo il file /etc/modules e scrivendo all'interno le 3 righe coi nomi dei moduli del kernel da aggiungere alla partenza:

wire
w1_gpio
w1_therm

- (se ci sono sensori I2C) installare il modulo di I2C

sudo modprobe i2c_dev
sudo modprobe i2c_bcm2708

- ovviamente collegare i fili!

- riavviare (abbiamo inserito comandi per la partenza)

- (se ci sono sensori 1wire) controllare che ci siano

ls /sys/bus/w1/devices/

- se ancora non va significa che bisogna configurare il file config.txt :

sudo nano /boot/config.txt

e aggiungere la stringa sotto:

dtoverlay=w1-gpio,gpiopin=4

poi riavviare.

- copiare file e directory nella directory del server web, /var/www/html, assicurandosi che abbiano i permessi di root Potrebbe essere necessario, utilizzando il client FTP, copiare i file prima sotto la home, e poi localmente sul Raspi spostarli nella directory finale con tutti i diritti di root.

- provare che funzionino, chiamando dall'esterno le pagine d'interesse

- stessa cosa per file e directory nella directory /home/pi/apps, dopo averli prima copiati per esempio in una directory ./temp di /pi:

- andare in config.py e aggiornare i vari parametri ovviamente legati ai sensori installati

- attivare il file /etc/crontab prendendolo dalla directory ./temp/raspi_install. Si può copiare la parte significativa del contenuto o addirittura sostituirlo cambiando nome

3.Dati fisici Raspberry PI

da http://www.vincenzov.net/tutorial/RaspberryPi/connettore-GPIO.htm

-I pin sul connettore GPIO arrivano direttamente al processore, senza alcuna protezione: un errore porta facilmente alla distruzione fisica del SOC ARM!

-la tensione per il livello logico alto è 3.3 V. La connessione diretta a logica alimentata per esempio a 5 V danneggia permanentemente il Raspberry Pi che non è 5 volt tollerant.

-la massima corrente disponibile dai pin di uscita è dell'ordine di 10 mA; è limitata internamente, ma meglio non rischiare

-la massima corrente disponibile sul pin dell'alimentazione a 3.3 V è 50 mA; se la superate, Raspberry Pi potrebbe spegnersi brutalmente

-la corrente disponibile sui pin +5 V arriva direttamente dall'alimentatore del Raspberry Pi, che già deve fornire circa 700 mA al processore. Quindi, se usate il tipico alimentatore USB da 1 A, potete prelevare fino a 300 mA dal connettore della porta GPIO; se la superate, Raspberry Pi si potrebbe spegnere brutalmente

4.Troubleshooting

Pronto soccorso:

http://elinux.org/R-Pi_Troubleshooting#Check_your_firmware_version