Wiki Raspberry Pi
Indice dei contenuti
1. Installazione e configurazione generale 2
1.1 Creazione della scheda SD 3
1.4 Accessibilità via rete - impostazione dei numeri di IP 4
1.6.1 Impostazione sul server 6
1.6.2 Impostazione del client. In pratica normalmente si parte da qui 6
1.8 Come creare un collegamento diretto PC-Raspi 7
1.10 Come fare un'immagine della scheda SD in Linux 7
2. Come cambiare nome alla macchina (host) 8
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.1 Partenza VNC server dentro ssh del client verso Raspi 10
4.2 Client su Ubuntu Linux o Windows 10
4.2.3 poi, sia da Linux che da Windows 10
5. Running VNCServer at Startup 10
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
9.1 Dare ad Apache il permesso di eseguire comandi come root 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.2 Messa in esercizio: (moduli del kernel da attivare) 19
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
1. Passi per l'allestimento di un nuovo Raspberry 23
2. Installazione delle risorse per il telecontrollo 25
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.
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).
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
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
anzitutto l'espansione del filesystem
password
startx
Internazionalizzazione (locale, timezone, tastiera!)
tra le avanzate
hostname, per rinominare la macchina
l'abilitazione di SSH
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.
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
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.
Siccome può far comodo farlo sempre, è prevista la possibilità di farlo partire alla partenza direttamente da raspi-config (cfr.)
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
caso
Linux
Si fa partire il client ssh nel PC di comando:
sudo
ssh pi@192.168.1.x
caso
Windows
Si fa partire
putty. Lui chiede
login
as: –--->pi
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 ~ $
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.
Editare il file /boot/cmdline.txt aggiungendo in fondo:
ip=192.168.1.x
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
(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.
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
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
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.
Si tratta di synaptic
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).
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)
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.
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
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.
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.
A questo punto parte l'interfaccia normale di Raspberry.
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.
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'.
Issue the command below to create a new directory inside .config called 'autostart'.
$ mkdir autostart
cd into that new directory by typing:
$ cd autostart
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.
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.
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
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
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.
Brutalmente si edita sudoers con privilegi root!:
sudo nano /etc/sudoers
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
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.
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
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
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/
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
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.
Anzitutto vanno collegati i fili. Per l'esattezza, guardando il chippino in modo da vedere la scritta:
la terra GND (ad es. PIN 6) va sul primo di sinistra
il pin 3,3 V (PIN 1) va sul terzo da sx (il primo da dx)
la lettura (PIN 7) va su quello centrale
inoltre si mette una resistenza da 4,7 kOhm come pullup tra il 3,3 V (PIN 1) e appunto quello per la lettura (PIN 7)
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)
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
....
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).
OneWire : nulla
I2C :
sudo apt-get install i2c-tools sudo apt-get install python-smbus
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
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
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:
|
|
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/
Oltre al link già citato, suggerisco questo, che punta anche youtube:
https://www.raspberrypi.org/timelapse-tutorial-from-carrie-annes-geek-gurl-diaries/
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
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.
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
- 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
partenza dell'ambiente grafico come default
espansione della memoria disponibile a tutta la scheda SD
SSH
partenza senza login
tastiera
locale
data-ora
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
di avere i permessi root per agire
che li abbia il file
assegnare l'IP che gli si vuol dare!
assegnare l'IP del router (route -n per verificare per esempio da altra macchina in rete)
controllare gli IP dei DNS
Alla fine sudo ifdown eth0 + sudo ifup eth0. Ricordarsi di reimpostare FTP dal client sul nuovo IP del file interfaces definitivo.
- verificare
che il Raspi sia visibile in LAN
che il Raspi veda la LAN e Internet
- 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)
- 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
- 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:
anzitutto creare la subdirectory apps
copiarci il contenuto di ./temp/raspi_apps
assegnare i permessi: proprietà di pi, agli eseguibili permesso di esecuzione a Anyone
- 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
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
Pronto soccorso:
http://elinux.org/R-Pi_Troubleshooting#Check_your_firmware_version