Installare su SD il sistema operativo attraverso 'win32diskimager.
SD meglio in Classe 10 Formattata FAT32 cluster 32Kbyte
Se uso SDFormatter setto opzioni Quick Format, Format Size Adjustament ON per formattazione veloce e cluster 32K o ancora meglio FULL(Erase) Format, Format Size Adjustament ON per formattazione
completa e cluster 32K (cancella tutto e se salviamo l'immagine,
comprimendola si riduce notevolmente).
Sistema operativo 2014-09-09-wheezy-raspbian.img
NON Usare versioni raspbian troppo vecchie specialmente con le SDHC
UHS I Extreme SanDisk poichè potrebbero andare in CRASH.
Ho già una Raspberry Pi attiva 24 ore su 24 da Luglio del 2013 e funziona
senza problemi, ogni tanto però (parliamo di mesi) capita che devo far ripartire
le connsessioni di ser2net e socat che adesso sono più stabili avendo
cambiato le porte di ser2net sopra 9000. Ho cambiato anche la porta SSH,
la 22 è poco sicura e viene bombardata dalla rete appena la rendo pubblica,
inoltrandola sul router.
Un'altro problema che ho dovuto affrontare è stato il continuo crash di raspberry
con corruzione del filesystem anche dopo solo un giorno
(parlo delle versioni più vecchie).
Avevo salvato l'immagine con windisk32 per un ripristino veloce ma il problema
era diventato insostenibile al punto che volevo abbandonare la raspi.
Poi ho trovato un tutorial che consigliava per questo problema di usare la SD
solo come boot e una penna USB per tutto il resto (file e il sistema operativo).
Da quel momento non si è più bloccata e da quasi un anno non formattato più niente.
Avviare Raspberry facendo in modo che il router gli assegni un indirizzo fisso così ci posso
entrare dalla rete con 'kitty' senza collegarlo ad un monitor. Setto kitty come SSH porta 22
Host Name 192.168.1.190 (scelto sul router o altro...)
Login 'pi' password 'raspberry' ed inizio la configurazione
sudo raspi-config
aggiorno:
expand_rootfs
configure_keyboard collegando la tastiera altrimenti non và
Internationalisation Options
change_locale dove unico modo per selezionare è barra spazio (it_IT.UTF-8)
(si può deselezionare EN lingua inglese)
change_timerzone (Europe - Rome)
ssh enable
update
se non scelgo update dal menù posso farlo a parte
sudo reboot (aggiorno la configurazione)
Attendere e ricollegarsi con Kitty, quindi:
sudo apt-get update
sudo apt-get upgrade
Fine prima fase di inizializzazione (occorre attendere 20 minuti circa)
Per verificare l'indirizzo di rete digitare:
ifconfig
Per configurare la rete e rendere l' IP statico digitare:
sudo nano /etc/network/interfaces
Otteniamo:
auto lo
iface lo inet loopback
#iface eth0 inet dhcp Commentare la linea con'#' per eliminare dhcp
Inserire le seguenti righe:
#Static
iface eth0 inet static
address 192.168.1.190
netmask 255.255.255.0
gateway 192.168.1.1
network 192.168.1.0
broadcast 192.168.1.255
Lasciare invece queste righe come sono:
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
ctrl 'X' per uscire e 'S' per salvare
Riavviare con:
sudo reboot
(eseguire il completamento con il tabulatore oppure invio per visualizzare le opzioni)
Scegliere le password:
sudo passwd per abilitare ed inserire la password di root
passwd per aggiornare la password utente ("raspberry" in questo caso come esempio)
User root --> password raspberry
User pi --> password raspberry
Halt CPU con:
sudo shutdown -h now
sudo shutdown now
halt
spegni (vedi alias personali)
Riavviare con:
sudo shutdown -r now
sudo reboot
riavvia (vedi alias personali)
Pulizia (Non servono al momento)
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove
sudo apt-get purge
Per cambiare hostname in rpi_S_nodo editare file /etc/hostname
sudo nano /etc/hostname
Al posto di:
raspberry
scriviamo:
rpiS190
dove S è il nome del nodo scelto in telearpic e 190 IP finale
Verificare se corretto con
cat /etc/hostname
Adesso occorre editare il file /etc/hosts
sudo nano /etc/hosts
otteniamo
------------------------------------------------------
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 raspberrypi
------------------------------------------------------
modificare come segue:
------------------------------------------------------
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 rpiS190
------------------------------------------------------
Verificare con
cat /etc/hosts
Adesso dobbiamo riavviare
sudo reboot
Con:
pi@rpiS190:~$ hostname
otteniamo
rpiS190
N.B. accetta lettere maiuscole minuscole numeri d 0 a 9 e il carattere "-"
Regolare l'ora esatta con (già configurato con sudo raspi-config)
sudo dpkg-reconfigure tzdata
settare su Europa e Roma
Ovviamente occorre un collegamento ad internet altrimenti l'orologio non si aggiorna.
Da aggiungere al file /home/pi/.bashrc insieme agli altri alias quasi in fondo al file:
alias cdtele='cd /home/pi/wiringPi/DomoticaPi'
alias gcctele='sudo cc -o telearpic telearpic.c -lwiringPi -lpthread'
alias startele='sudo /etc/init.d/telearpic start'
alias stoptele='sudo /etc/init.d/telearpic stop'
alias restartele='sudo /etc/init.d/telearpic restart'
alias alltele='cdtele && gcctele && cd && startele'
alias restartser2net='sudo /etc/init.d/ser2net restart'
alias spegni='sudo shutdown -h now'
alias riavvia='sudo shutdown -r now'
RIAVVIARE !!! con
sudo reboot
Digitare da terminale:
sudo apt-get install tightvncserver
vncserver :1 -geometry 1024x600 -depth 16 -pixelformat rgb565
stop vncserver con
sudo vncserver -kill :1
Per attivare il server X occorre digitare:
startx
VNC fa ripartire in automatico Xserver
Ignorare il messaggio:
FATAL: Module g2d_23 not found
Vedi links:
http://codeandlife.com/2012/07/29/arduino-and-raspberry-pi-serial-communication/
http://www.hobbytronics.co.uk/raspberry-pi-serial-port
Per default la seriale di Raspberry Pi è configurata come console input/output
e occorre disabilitarla per poterla utilizzare in telearpic.
Disabilitare Serial Port Login:
Occorre editare 2 file, il primo è /etc/inittab
Editare l'ultima riga commentandola con '#' quindi:
sudo nano /etc/inittab
editare ultima riga da
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
a:
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
salvare.
Disabilitare Bootup Info
Quando avviamo Raspberry tutte le informazioni di startup vengono dirottate
sulla seriale, per evitarlo modifichiamo il secondo file in /boot/cmdline.txt
sudo nano /boot/cmdline.txt
eliminare i riferimenti a ttyAMA0 qunda da:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
diventerà:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Riavviare con
riavvia
sudo apt-get update
sudo apt-get install minicom
sudo minicom -sw
Andare su “Serial port setup” ed editare:
Serial Device: /dev/ttyAMA (type A key)
Hardware Flow Control: No (type A key)
Software Flow Control: No (type G key)
Premi exit and “Save setup as dfl”
Exit from Minicom
Diamo i permessi con:
sudo chmod 666 /dev/ttyAMA0
Adesso avviamo con:
sudo minicom -w
ctrl A + Z + E ==> local Echo on/off
OK. Occorre installare telearpic prima di effettuare prove.
Installazione ser2net per creare com virtuali accessibili dalla rete
sudo apt-get update (non occorre eseguirlo sempre)
sudo apt-get install ser2net
Configurazione di /etc/ser2net.conf
sostituire le righe di configurazione con queste:
9010:telnet:600:/dev/ttyS0:9600 8DATABITS NONE 1STOPBIT banner
9011:telnet:600:/dev/ttyAMA0:38400 8DATABITS NONE 1STOPBIT banner
9012:raw:0:/teleArPi/ttyAMA2:38400 8DATABITS NONE 1STOPBIT banner
9013:raw:0:/teleArPi/ttyAMA4:38400 8DATABITS NONE 1STOPBIT banner
9014:raw:0:/teleArPi/ttyAMA6:38400 8DATABITS NONE 1STOPBIT banner
9015:raw:0:/dev/ttyACM0:38400 8DATABITS NONE 1STOPBIT banner
9016:telnet:0:/dev/ttyACM1:38400 8DATABITS NONE 1STOPBIT banner
#9017:telnet:600:/dev/ttyUSB0:38400 8DATABITS NONE 1STOPBIT banner
#9018:telnet:600:/dev/ttyUSB1:9600 8DATABITS NONE 1STOPBIT banner
quindi Restart ser2net con
sudo /etc/init.d/ser2net restart
oppure
restartser2net (vedi alias)
Socat per creare collegamenti virtuali nella rete
sudo apt-get update
sudo apt-get install socat
creare cartella in radice principale /teleArPi con permessi di root, per i link dei driver ttymxc4 ecc.
Serve al software telearpic per cui in questa cartella non dobbiamo fare altro.
Funzionamento:
ser2net attiva driver virtuali server (TCP/IP)
9012/ttyAMA2 -- 9013/ttyAMA4 -- 9014/ttyAMA6
telearpic attiva 4 COM
ttyAMA0
ttyAMA1
ttyAMA3
ttyAMA5 (ttyUSB0 se NumRaspberry<3)
socat connette driver lato interno (Intendo ciò che vede il software telearpic)
ttyAMA1 <=> ttyAMA2
ttyAMA3 <=> ttyAMA4
ttyAMA5 <=> ttyAMA6 ( se NumRaspberry>2)
Poi sempre socat esegue eventuali connessioni esterne TCP/IP in questo modo
192.168.1.190:9013 (ttyAMA4) <=> 192.168.1.(add altra scheda2):9012 (ttyAMA2)
192.168.1.190:9014 (ttyAMA6) <=> 192.168.1.(add altra scheda3):9012 (ttyAMA2)
mentra lascia sempre libera per ricevere connessioni dall'esterno (da altre schede) o collegamenti con il PC
192.168.1.(add schede):9012 ttyAMA2
in questo modo abbiamo una ramificazione che può sempre raddoppiare il numero delle schede.
Lo script ConnVerifica.sh controlla ciclicamente lo stato delle connessioni facendole
ripartire se neccessario (se anche il router risponde altrimenti è inutile)
Per fare questo configuro opportunamente telearpic in modo che ciclicamente come un wotchdog
fa in modo che le varie schede si azzerino i contatori fra loro (se lo fanno quindi si vedono).
Altrimenti ogni scheda non azzerata, dopo alcuni minuti esegue un restart di tutte le connessioni.
WiringPi che trovate in https://projects.drogon.net/raspberry-pi/wiringpi/
è una raccolta di libreria create da Gordon Henderson (che ringrazio molto) per Raspberry Pi.
Queste librerie vanno scaricate e compilate come segue:
sudo apt-get install i2c-tools
sudo apt-get install libi2c-dev
Occorre completare con queste righe prima di eseguire l'installazione di WiringPi
riavvia (alias)
Occorre completare con queste righe prima di completare l'installazione di WiringPi
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Commentare queste due righe con '#'
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
Salvare con Ctrl+O premere enter ed esci da nano con Ctrl+X.
riavvia
Sembra che questo comando occorre darlo dopo ogni avvio per abiltare i2c per cui l'ho
inserito in telearpic inizializzazione.
sudo modprobe i2c-dev
sudo i2cdetect -y 0 # Rev 1
sudo i2cdetect -y 1 # Rev 2
Ora si dovrebbero vedere le porte I2C elencate nella directory /dev
ls /dev/i2c*
Dovreste vedere /dev/i2c-0 e /dev/i2c-1 elencati. Per poter utilizzare queste porte
sono necessari i permessi quindi:
sudo chmod o+rw /dev/i2c*
Ora le porte I2C sono pronte per l'uso. Si dovrà eseguire il modprobe e
comandi chmod ogni volta che si effettua il login per attivare le porte e applicare le autorizzazioni.
Se si desidera automatizzare questo processo in modo che i comandi vengano eseguiti ogni volta
che si accede è possibile modificare /etc/rc.local e aggiungere il comando all'interno.
Install WIRINGPI (installerà nella directory /home/pi/)
Nuova versione: Molto meglio !
Importante:
Entrare come user pi pwd pi altrimenti installerà nella directory di /root e non quella di /home/pi
digitare:
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build
Inserire la cartella 'DomoticaPi' in:
/home/pi/wiringPi/ <---(DomoticaPi)
copiare i file telearpic.c e LoadConfig.txt e ConnVerifica.sh in questa cartella
Dobbiamo dare i permessi di root al file ConnVerifica.sh
digitare:
cdtele (alias sostituisce cd /home/pi/wiringPi/DomoticaPi)
chmod 0755 ConnVerifica.sh
gcctele (alias compila telearpic.c)
Siamo andati nella directory DomoticaPi, abbiamo dato i permessi allo script
ConnVerifica.sh e abbiamo compilato telearpic.c.
Quindi apriamo telearpic con
sudo ./telearpic
OK FUNZIONA !!!
Per verificarlo apriamo Telearpic.exe sul PC e colleghiamoci in telnet su 192.168.1.190:9012
e configuriamo per prova la Raspberry Pi con
*SAUN00S#
*SAUR1A#
Adesso che abbiamo inserito le tabelle di routing possiamo entrare su Raspberry Pi
provare le varie funzioni scritte come aiuto nel programma Telearpic.exe per il nodo 'S'
Tutti gli script utilizzabili da telearpic nei vari 'EVENTI' devono essere resi eseguibili con il comando
cdtele per cambiare directory poi
chmod +x script.sh
chmod 0775 script.sh
Copiare lo script di avvio telearpic in /etc/init.d/
Per registrare lo script per lo start-up eseguire il seguente comando
sudo update-rc.d NameOfYourScript defaults
quindi
sudo update-rc.d telearpic defaults 98 02
Per rimuovere lo script dallo start-up eseguire
sudo update-rc.d -f telearpic remove
Nella directory rc0.d (Default-Stop: 0 1 6) abbiamo i file di Kill esempio K02telearpic
Nella directory rc2.d (Default-Start: 2 3 4 5) abbiamo i file di Start esempio S98telearpic
Secondo le regole S+K = 100 cioè l'ultimo programma ad attivarsi
sarà il primo ad essere killato (ucciso)
Nelle directory rc0.d rc1.d--rc6.d abbiamo K02telearpic
e nelle directory rc2.d rc3.d--rc4.d--rc5.d abbiamo S98telearpic
sudo apt-get update
sudo apt-get install sendEmail libnet-ssleay-perl libio-socket-ssl-perl
per invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332 (oppure 308)
link---> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911
correggere in:
/usr/bin/sendemail on line 1907: 'SSLv3 TLSv1' in 'SSLv3' as temporary
solution for working gmail sending
la riga diventerà:
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3')) {
poi
copiare lo script (file) "mailsend" nella directory /home/pi/wiringPi/DomoticaPi
quindi modificare il file con i propri dati (gmail.com è un esempio)
mittente="username@gmail.com"
dest="username_destinatario@gmail.com"
smtp="smtp.gmail.com:25"
username="username"
pass"password_username"
Salvare e digitare:
cdtele
chmod +x mailsend
esempio invio posta:
sudo ./mailsend "oggetto" "messaggio"
Lo script serve per ridurre la lunghezza del comando e poter inviare una mail anche con telearpic
in modo semplice e chiaro...
Funziona!!! Sia su UDOO che su Raspberry Pi
Script per gestire Router con RIAVVIO e CHECK IP dinamico con sendEmail
sudu apt-get update
sudo apt-get install curl
Per leggere il mio IP pubblico posso digitare a scelta:
curl ifconfig.me
curl icanhazip.com
curl ident.me
curl tnx.nl/ip
curl ipecho.net/plain
curl ip.appspot.com
curl whatsmyip.akamai.com
Attraverso ricerche e script fatti da altre persone ne ho assemblato uno che ogni
30 minuti analizza se:
#Ping Router 192.168.1.1 (se 'false' router spento --> exit)
#Ping google.it (se 'false' riavvio router Netgear occorrono ricerche per altri router altrimenti saltare funzione)
#Se riavvio Router attendo 4 minuti
#Poi riprovo Ping google.it (se 'false' --> exit)
#Leggo IP Pubblico (con 'curl icanhazip.com' o altri metodi)
#Confronto con Hold_IP salvato su EXT_IP_FILE="/home/pi/wiringPi/DomoticaPi/ipaddress"
#Se diverso invio email con 'sendEmail' altrimenti --> exit
Occorre inserire la credenziali per il Router alla riga 27
mentre quelli dell'account di posta dalla riga 8 to 12
Copio il file myRouterIP.sh in /home/pi/wiringPi/DomoticaPi
Permessi con
cdtele (alias che porta alla directory di telearpic in /home/ubuntu/wiringPi/DomoticaUdoo)
chmod +x myRouterIP.sh
Attivare con cronotab ogni 30 minuti dalle 8 alle 23 (poi spengo il router e non serve più che controlli)
ogni 30 minuti cioè minuto 1 e 31 dalle 8 alle 23
sudo crontab -e
1,31 8-23 * * * /home/pi/wiringPi/DomoticaPi/myRouterIP.sh
Cercando in rete NO-IP Raspberry si trovano tanti Tutorial riguardo l'installazione e configurazione. Ho preso spunto da http://raspisimon.no-ip.org/noip.php e altri. Ecco come fare: Occorre un account su http://www.no-ip.com/ che offre un servizio gratuito come Host/Redirects quindi Entrare su http://www.no-ip.com/ per registrare un account con user (add email) e password. Click su Hosts/Redirects sopra alla pagina page. Click su Add a Host. Creare un host name in funzione del tipo di account con No-Ip
(Se è free account, si può creare solo un subdominio host cioè miodominio.no-ip.org ad esempio).
Usare tutte le opzioni di default. Per Assign to group lasciare vuoto. Adesso installiamo il servizio no-ip su Raspberry che ciclicamente andrà ad aggiorare il nostro IP-Publico al sito www.no-ip.com. Noi infatti per collegarci al nostro server o altro dall'esterno dobbiamo utilizzare il nuovo host-name configurato sul sito ed aggiungere la porta del servizio da utilizzare. Ad esempio per raggiungere UDOO come terminale ssh digitiamo: miodominio.no.ip.org:22 dal terminale remoto, 22 è la porta di ascolto del server SSH su UDOO. Chiaramente dobbiamo inoltrare la porta 22 verso l'indirizzo IP di Raspberry configurando il nostro router di casa. Configuriamo Raspberry:
Pima di tutto per eseguire lo start di noip al boot:
Creare un file chiamato 'noip' in /etc/init.d con questo contenuto: ### BEGIN INIT INFO # Provides: noip2 # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO #! /bin/sh # /etc/init.d/noip # If you want a command to always run, put it here # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting noip" # run application you want to start /usr/local/bin/noip2 ;; stop) echo "Stopping noip" # kill application you want to stop killall noip2 ;; *) echo "Usage: /etc/init.d/noip {start|stop}" exit 1 ;; esac exit 0 Copiare lo script che chiamo 'noip' su /etc/init.d/ e relativi permessi con sudo chmod 777 /etc/init.d/noipQuindi installare il servizio come segue:
mkdir /home/pi/noip cd /home/pi/noip wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz tar vzxf noip-duc-linux.tar.gz cd noip-2.1.9-1 (questa directory dipende dalla versione scaricata quindi verificare con ls) sudo make sudo make install Durante l'installazione digitare No-Ip login, password e l'intervallo di tempo del servizio (in minuti). Attivate tutti gli HostName configurati e il nome dello script (noip per startup) inserito in anticipo in /etc/init.d
come descritto più avanti.
Attivare il servizio No-ip con,
sudo noip2 To show noip configuration sudo noip2 -S To change update interval sudo noip2 -U 15 To Display Help sudo noip2 --help poi : (NON SERVE in questa versione, richiede direttamente il nome dell script quindi FINE) sudo update-rc.d noip defaults 75 25 (o come preferite) riavviare e testare il servizio.
Download da http://darkhorse.nu/weatherman/weatherman-1.2.2.tar.gz
scaricando il file.zip troviamo all'interno il redame.md file con tutte le istruzioni
Da redame.md scriviamo:
curl -o weatherman-1.2.2.tar.gz -L https://github.com/subrosa/weatherman/archive/1.2.2.tar.gz
tar -zxvf weatherman-1.2.2.tar.gz
cd weatherman-1.2.2
sudo cp weatherman /usr/bin
sudo chmod a+x /usr/bin/weatherman
sudo cp weatherman.1.gz /usr/share/man/man1
esempio:
weatherman "alghero, italy"
weatherman -F'Alghero Temperatura corrente %c gradi massima %T. minima %t. punto di rugiada %c. umidit%h
percento.' "Alghero, Italy"
Con il copia incolla attenzione al carattere Return che possono essersi inseriti sulla pagina
OK! Funziona.
Ora installare MPLAYER con
sudo apt-get update
sudo apt-get install mplayer
sudo nano /etc/mplayer/mplayer.conf
aggiungere le 3 linee
nolirc=yes
ao=alsa
really-quiet="1"
Per le regolazioni audio digito
alsamixer
ed eseguo le modifiche a video
Ora colleghiamo un amplificatore per PC sullo jack audio di Raspberry e digitiamo:
cdtele
sudo ./Meteo.sh
Dopo alcuni secondi sentiremo la voce proveniente da google TTS che pronuncia
temperatura e umidità della città di Alghero. Ovviamente lo script può essere modificato
a piacere. Telearpic può richiamare tutti gli script presenti nella sezione download, così
come può richiamare comandi shell. Le possibilità sono praticamente innumerevoli, dipende
dalla nostra creatività.
Buon Lavoro !!!