Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Documento scritto da Rambod Rahmani.
- ---- <<<<->>>> ----
- **** DISTRIBUZIONE E CONDIVISIONE ****
- GLI UTENTI CHE INTENDONO DISTRIBUIRE A TERZI TALE DOCUMENTO O CONDIVIDERLO IN RETE, SONO PREGATI DI NON ELIMINARE IL RIFERIMENTO ALL’AUTORE ORIGINARIO: RAMBOD RAHMANI.
- ---- <<<<->>>> ----
- Formattazione file adatta al terminale di Raspberry Pi in collegamento SSH tramite putty su Windows 7.
- ---- <<<<->>>> ----
- Configurazione iniziale di un Raspberry Pi Modello B per l'utilizzo di:
- 1. Accesso tramite SSH con collegamento ad internet funzionante.
- 2. Configurazione iniziale Raspberry Pi.
- 3. Installazione librerie essenziali e software di terze parti.
- 4. Camera on board.
- 5. OpencCV 2.4.5.
- 6. Configurazione i2c.
- 7. Comunicazione con Arduino board.
- ---- <<<<->>>> ----
- **** OPERAZIONI PRELIMINARI ****
- 0. INSTALLAZIONE SISTEMA OPERATIVO
- 0.1
- ---- <<<<->>>> ----
- 1. ACCESSO TRAMITE SSH CON COLLEGAMENTO AD INTERNET
- 1.1 MAC OS X:
- Per abilitare l'accesso tramite SSH con collegamento ad internet funzionante utilizzando un MacbookPro con Mac OS X, lasciare il file cmdline (che si trova nella partizione /boot) di default e inserire il seguente contenuto nel file /etc/network/interfaces:
- ---- <<<<->>>> ----
- auto lo
- iface lo inet loopback
- iface eth0 inet static
- address 192.168.2.2
- netmask 255.255.255.0
- gateway 192.168.2.1
- allow-hotplug wlan0
- iface wlan0 inet manual
- wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
- iface default inet dhcp
- ---- <<<<->>>> ----
- Nel pannello di controllo delle connessioni in MAC OS X impostare su manuale la configurazione IPv4. Fornire come valore del campo IP Address l'indirizzo 192.168.2.1 (corrispondente al gateway inserito nel file di configurazione del Raspberry Pi), e come valore del campo subnet Mask l'indirizzo 255.255.255.0 (valore assegnate al campo netmask nel file di configurazione del Raspberry Pi).
- Abilitare la condivisione internet tramite cavo ethernet su Mac OS X, collegare il cavo ethernet dal raspberry pi al MacbookPro. Accendere il Raspberry Pi, utilizzare Putty su X11 per accedere al Raspberry Pi tramite SSh.
- ---- <<<<->>>> ----
- 1.2 WINDOWS 7:
- Alla fine del file cmdline che si trova nella partizione /boot inserire il seguente testo (N.B: lasciare uno ed un solo spazio dopo l'ultima lettera presente nel file attuale, altrimenti il boot del Raspberry sarà compromesso.):
- "ip=169.254.0.5::169.254.95.219"
- N.B: fare attenzione ad eventuali spazi bianchi perchè potrebbero risultare in un blocco del processo di boot di Raaspbian.
- Una volta eseguita la modifica al file cmdline nella partizione di /boot, utilizzare Xming e Putty per accedere al Raspberry Pi tramite SSH.
- ---- <<<<->>>> ----
- 2. CONFIGURAZIONE RASPI-CONFIG
- Eseguita la configurazione della connessione tramite SSH, accedere al Raspberry Pi ed aprire il pannello di configurazione di Raspbian attraverso il comando
- sudo raspi-config
- Una volta all'interno del pannello di configurazione, settare i seguenti parametri:
- 1. Esapandere file system.
- 2. Abilitare SSH.
- 3. Abilitare SPI.
- 4. Abilitare la Camera on board.
- 5. Impostare memoria gpu su 128.
- [riavviare] sudo reboot
- ---- <<<<->>>> ----
- 3. AGGIORNAMENTO LIBRERIE E RIFERIMENTI
- Eeguiamo un aggiornamento delle librerie e dei riferimenti presenti eseguendo il seguente comando nel terminale:
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- [riavviare] sudo reboot
- ---- <<<<->>>> ----
- 4. GENERAZIONE AMBIENTE GRAFICO
- Per poter utilizzare la GUI di Raspbian dobbiamo generare i file necessari eseguendo il seguente comando nel terminale:
- startx
- Attedere qualche minuto perchè i files vengano generati.
- [riavviare] sudo reboot
- ---- <<<<->>>> ----
- 5. INSTALLAZIONE SOFTWARE DI TERZE PARTI
- Installiamo ora alcuni programmi che ci torneranno utili durante l'utilizzo del nostro Raspberry Pi.
- N.B: questo NON è OPZIONALE.
- Installiamo l'editor gedit, il webbrowser chromium e il gestore di pacchetti con il seguente comando su terminale:
- sudo apt-get install gedit chromium synaptic
- Aggiornamo i nuovi files installati:
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- [riavviare] sudo reboot
- ---- <<<<->>>> ----
- 6. INSTALLAZIONE OPENCV
- Innanzitutto eseguiamo un aggiornamento generale:
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- Installiamo librerie di terze parti di cui avremo bisogno per eseguire la BUIDL con i seguenti comandi:
- [N.B: ESEGUIRE I COMANDI, ANCHE SE RIPETUTI, SENZA ALTERARNE L'ORDINE O IL CONTENUTO]
- sudo apt-get -y install build-essential cmake cmake-qt-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools
- sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy libpython2.6 python-dev python2.6-dev libgtk2.0-dev pkg-config
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- sudo apt-get install build-essential cmake pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev libpngwriter0-dev libpngwriter0c2 zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec52 libavformat52 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0† libgstreamer0.10-dev libxine1-ffmpeg† libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev
- sudo apt-get install build-essential cmake pkg-config libgtk2.0-dev libgtk2.0 zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libjasper-dev libavcodec-dev swig
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- sudo apt-get install build-essential cmake pkg-config libgtk2.0-dev libgtk2.0 zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libjasper-dev libavcodec-dev swig
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- Con i seguenti comandi scarichiamo la versione di OpenCV desiderata, estraiamo il contenuto delle cartelle compresse, rimuoviamo files inutili, creiamo la cartella dove eseguire la build e impostiamo la PATH del terminale in quella PATH:
- [OPENCV 2.3.1]
- wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.3.1/OpenCV-2.3.1a.tar.bz2
- tar -xvjpf OpenCV-2.3.1a.tar.bz2
- rm OpenCV-2.3.1a.tar.bz2
- cd OpenCV-2.3.1/
- mkdir build
- cd build
- [OPENCV 2.4.5]
- wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.5/opencv-2.4.5.tar.gz
- tar -zxvf opencv-2.4.5.tar.gz
- rm opencv-2.4.5.tar.gz
- cd opencv-2.4.5
- mkdir build
- cd build
- Generiamo i files necessari per la BUILD:
- cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..
- Avviamo la BUILD e la successiva installazione:
- sudo make
- sudo make install
- Se e solo se la BUILD sarà stata completata senza errori, potremo procedere con la restante parte della guida.
- Modifichiamo il file "/etc/ld.so.conf.d/opencv.conf" e inseriamo "/usr/local/lib".
- Aprire il file con il comando:
- sudo nano /etc/ld.so.conf.d/opencv.conf
- E inserire il seguente testo (non c'è da preoccuparsi se il file è completamente vuoto):
- /usr/local/lib
- Per ricaricare i riferimenti con le nuove inpostazioni esguiamo:
- sudo ldconfig
- Modifichiamo ora il file "/etc/bash.bashrc".
- Aprire il file con il comando:
- sudo nano /etc/bash.bashrc
- E inserirvi, alla fine, il seguente contenuto:
- PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
- export PKG_CONFIG_PATH
- [riavviare] sudo reboot
- OpenCV è ora pronto per essere utilizzato. Per poter ottenere la massima risoluzione dalla CSI dobbiamo però installare i driver della CSI.
- ---- <<<<->>>> ----
- 7. Installazione Driver UV4L
- Eseguiamo un aggiornamento generale:
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- Download e installazione del driver:
- wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc
- Modifichiamo il file "/etc/apt/sources.list".
- Aprire il file con il comando:
- sudo nano /etc/apt/sources.list
- E aggiungere la seguente linea in fondo al contenuto del file:
- deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main
- Eseguiamo un aggiornamento generale dopo aver aggiunto un nuovo link da cui scaricare librerie e riferimenti:
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- Installiamo i software di terze parti necessari:
- sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras uv4l-uvc uv4l-xscreen uv4l-mjpegstream
- Aggiorniamo eventuali nuovi file installati:
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- ESEGUIAMO L'AGGIORNAMENTO DEL FIRMWARE:
- sudo rpi-update
- [riavviare] sudo reboot
- ---- <<<<->>>> ----
- 8. ABILITARE RISOLUZIONE CAMERA ON BOARD
- Possiamo abilitare la risoluzione della telecamera in maniera permanente oppure solo momanteneamente.
- Per abilitare la massima risoluzione solo momentaneamente eseguire i seguenti comandi nel terminale:
- sudo pkill uv4l
- sudo uv4l --driver raspicam --auto-video_nr --encoding yuv420 --nopreview
- export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
- 8.1 PER UNA MODIFICA DEFINITIVA
- Modificare il file "/etc/bash.bashrc".
- Aprire il file con il comando:
- sudo nano /etc/bash.bashrc
- E inserire il seguente contenuto alla fine del file:
- export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
- ---- <<<<->>>> ----
- OPENCV TEST
- Di seguito un codice sorgente base per poter testare OpenCV (la camera on board deve essere collegata).
- ---- <<<<->>>> ----
- import cv2
- cv2.namedWindow("preview")
- vc = cv2.VideoCapture(0)
- vc.set(3,128)
- vc.set(4,128)
- if vc.isOpened(): # try to get the first frame
- rval, frame = vc.read()
- else:
- rval = False
- while rval:
- cv2.imshow("preview", frame)
- rval, frame = vc.read()
- key = cv2.waitKey(33)
- if key == 27: # exit on ESC
- break
- ---- <<<<->>>> ----
- Proprietà modificabili:
- N.B.: Non tutte sono supportate! Anzi!
- CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.
- CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
- CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file.
- CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
- CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
- CV_CAP_PROP_FPS Frame rate.
- CV_CAP_PROP_FOURCC 4-character code of codec.
- CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
- CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve().
- CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
- CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
- CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
- CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
- CV_CAP_PROP_HUE Hue of the image (only for cameras).
- CV_CAP_PROP_GAIN Gain of the image (only for cameras).
- CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
- CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
- CV_CAP_PROP_WHITE_BALANCE Currently unsupported.
- CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently).
- ---- <<<<->>>> ----
- 9. INSTALLAZIONE I2C
- Per poter utilizzare la comunicazione i2c di Raspberry Pi dobbiamo installare diversi strumenti e fare modifiche ai files di configurazione.
- Per prima cosa modifichiamo il file "/etc/modprobe.d/raspi-blacklist.conf".
- Aprire il file con il comando:
- sudo nano /etc/modprobe.d/raspi-blacklist.conf
- E assicurarsi che il seguente testo non sia commentato tramite un carattere cancelletto.
- blacklist spi-bcm2708
- blacklist i2c-bcm2708
- (Se prima di una di queste stringhe di testo è presente il carattere cancelletto, rimuoverlo).
- Modifichiamo ora il file "/etc/modules".
- Aprire il file con il comando:
- sudo nano /etc/modules
- E aggiungere il seguente testo:
- i2c-bcm2708
- i2c-dev
- Eventualmente eseguire i seguenti comandi su terminale per assicurarsi di aver eseguito tutte le modifiche correttamente:
- sudo modprobe i2c-dev
- sudo modprobe i2c-bcm2708
- Installiamo un software di terze parti:
- sudo apt-get install i2c-tools
- Aggiungiamo pi al gruppo degli utenti abilitati all'utilizzo dell'i2c:
- sudo adduser pi i2c
- Installiamo un software di terze parti:
- sudo apt-get install python-smbus
- Eseguiamo un aggiornamento general dei nuovi files:
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
- [Riavviare] sudo reboot
- ---- <<<<->>>> ----
- I2C TEST
- Per controllare l'effettivo funzionamento dell'i2c eseguire il seguente comando:
- i2cdetect -y 1
- Si dovrebbe ottenere un output del simile al seguente:
- 0 1 2 3 4 5 6 7 8 9 a b c d e f
- 00: -- -- -- -- -- -- -- -- -- -- -- -- --
- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 70: -- -- -- -- -- -- -- --
- ---- <<<<->>>> ----
- 10. COMUNICAZIONE I2C RASPBERRY PI ARDUINO
- CODICE SORGENTE:
- Possiamo ora stabilire un canale di comunicazione tra Raspberry Pi e Arduino utilizzando l'i2c installato nella fase precedente.
- Dopo aver installato e testato l'i2c sul Raspberry Pi possiamo utilizzare i seguenti codici sorgente (Python per RPi e lo sketch per Arduino) per stabilire una comunicazione bidirezionale su i2c tra RPi e Arduino:
- i2c_test.py
- ---- <<<<->>>> ----
- import smbus
- import time
- # for RPI version 1, use "bus = smbus.SMBus(0)"
- bus = smbus.SMBus(1)
- # This is the address we setup in the Arduino Program
- address = 0x04
- def writeNumber(value):
- bus.write_byte(address, value)
- # bus.write_byte_data(address, 0, value)
- return -1
- def readNumber():
- number = bus.read_byte(address)
- # number = bus.read_byte_data(address, 1)
- return number
- while True:
- var = input("Enter 1 - 9: ")
- if not var:
- continue
- writeNumber(var)
- print "RPI: Hi Arduino, I sent you ", var
- # sleep one second
- time.sleep(1)
- number = readNumber()
- print "Arduino: Hey RPI, I received a digit ", number
- print
- ---- <<<<->>>> ----
- sketch_Arduino
- ---- <<<<->>>> ----
- #include <Wire.h>
- #define SLAVE_ADDRESS 0x04
- int number = 0;
- int state = 0;
- void setup() {
- pinMode(13, OUTPUT);
- Serial.begin(9600); // start serial for output
- // initialize i2c as slave
- Wire.begin(SLAVE_ADDRESS);
- // define callbacks for i2c communication
- Wire.onReceive(receiveData);
- Wire.onRequest(sendData);
- Serial.println("Ready!");
- }
- void loop() {
- delay(100);
- }
- // callback for received data
- void receiveData(int byteCount){
- while(Wire.available()) {
- number = Wire.read();
- Serial.print("data received: ");
- Serial.println(number);
- if (number == 1){
- if (state == 0){
- digitalWrite(13, HIGH); // set the LED on
- state = 1;
- }
- else{
- digitalWrite(13, LOW); // set the LED off
- state = 0;
- }
- }
- }
- }
- // callback for sending data
- void sendData(){
- Wire.write(number);
- }
- ---- <<<<->>>> ----
- COLLEGAMENTO CAVI:
- !! N.B: COLLEGARE I CAVI SOLAMENTE DOPO AVER CARICATO LO SKETCH SU ARDUINO !!
- Il seguente schema mostra come collegare il Raspberry Pi ad Arduino tramite i2c:
- RPI Arduino (Uno/Duemillanove)
- --------------------------------------------
- GPIO 0 (SDA) <--> Pin 4 (SDA)
- GPIO 1 (SCL) <--> Pin 5 (SCL)
- Ground <--> Ground
- Collegati i cavi, basterà eseguire lo scketch su arduino (aprire il Serial Monitor dell'IDE di Arduino) e avviare il codice python fornito.
- Per maggiori informazioni vedi: http://blog.oscarliang.net/raspberry-pi-arduino-connected-i2c/
- ---- <<<<->>>> ----
- 11. COMUNICAZIONE SERIALE RASPBERRY PI ARDUINO
- Arduino e Raspberry Pi possono comunicare tra di loro anche tramite porta Seriale.
- !!! N.B: seguire questo procedimento con estrema cautela in quanto il voltaggio della porta seriale di Arduino è maggiore di quello del RPi e potrebbe danneggiare le GPIO del RPi. !!!
- (La comunicazione seriale è stata realizzata unidirezionale (RPi --> Arduino) per evitare di danneggiare la scheda RPi. Per una comunicazione bidirezionale vedi: http://blog.oscarliang.net/raspberry-pi-and-arduino-connected-serial-gpio/
- CONFIGURAZIONE GPIO RASPBERRY PI
- Per poter utilizzare la porta seriale del RPi:
- 1. Modificare il file "/etc/inittab" rimuovendo la seguente linea che si trova in fondo al file: "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100".
- 2. Modificare il file "/boot/cmdline.txt" rimuovendo dalla prima riga il seguente testo: "console=ttyAMA0,115200 kgdboc=ttyAMA0,115200".
- 3. Riavviare il RPi.
- 4. Installare il software minicom con il comando: "sudo apt-get install minicom".
- COLLEGAMENTO RASPBERRY PI AD ARDUINO
- Eseguire i seguenti collegamenti (!!! FARE ATTENZIONE A NON COLLEGARE I CAVI ERRONEAMENTE !!)
- RPI Arduino (Uno/Duemillanove)
- --------------------------------------------
- GPIO 14 (TX) <--> Pin 0 (RX)
- Ground <--> Ground
- TEST
- Per testare il corretto funzionamento del collegamento seriale tra Raspberry Pi ed Arduino utilizzare i seguenti codici sorgente:
- sketch_Arduino
- ---- <<<<->>>> ----
- byte number = 0;
- void setup(){
- Serial.begin(9600);
- }
- void loop(){
- if (Serial.available()) {
- number = Serial.read();
- Serial.print("character recieved: ");
- Serial.println(number, DEC);
- }
- }
- ---- <<<<->>>> ----
- serial_test.py
- ---- <<<<->>>> ----
- import serial
- ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
- ser.open()
- ser.write("testing")
- try:
- while 1:
- response = ser.readline()
- print response
- except KeyboardInterrupt:
- ser.close()
- ---- <<<<->>>> ----
- Quindi avviare il Monitor Serial dell'IDE di Arduino e eseguire il comando "python serial_test.py" su RPi.
- P.S: Su RPi è possibile anche utilizzare il programma "minicom" (installato durante la configurazione della GPIO di RPi) con il comando:
- "minicom -b 9600 -o -D /dev/ttyAMA0"
- Per maggiori informazioni vedi: http://blog.oscarliang.net/raspberry-pi-and-arduino-connected-serial-gpio/
- ---- <<<<->>>> ----
- . AGGIORNAMENTO COMPLETO RASPBERRY PI:
- Il seguente comando aggiorna librerie, riferimenti, firmware e qualsiasi altro files aggiornabile di Raspbian:
- sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade && sudo rpi-update
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement