CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

30
Linux, Android e Internet of Things ITIS G.Galilei - San Secondo (PR)

Transcript of CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Page 1: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Linux, Android e

Internet of Things

ITIS G.Galilei - San Secondo (PR)

Page 2: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

1La GPIO della RPi

Come interagire con l’I/O della Raspberry PI

Page 3: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO

Page 4: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO

OUTPUTUn pin può essere impostato via software. L’uscita può variare in digitale tra 0 e 3.3V (NON 5V COME ARDUINO)

INPUTUn pin può mettersi in «ascolto» sulla base della tensione applicata a tale ingresso. È sempre digitale e può variare massimo tra 0 e 3.3V (ATTENZIONE A NON APPLICARE TENSIONI MAGGIORI)

All the pins have 3.3V logic levels and are not 5V-safe

so the output levels are 0-3.3V and the inputs should

not be higher than 3.3V. If you want to connect a 5V

output to a Pi input,use a level shifter

https://learn.adafruit.com

Page 5: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO

Page 6: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Raspberry vs Arduino

Page 7: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

ARDUINO RASPBERRY

• Low level

• Micro ATMega328, 16MHz

• Controllo totale dell’hardware

• Task semplici e ben definiti• No memoria di massa

• High level

• Piattaforma Linux-like

• Multitasking

• Presenza di memoria di massa• Programmi complessi

Raspberry vs Arduino

Possiamo utilizzare Raspberry per fare quello che si può fare con Arduino, ma serve alla mia applicazione cosi tanta memoria e capacità di calcolo?

Page 8: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO - File

Prima di iniziare diventare amministratori

sudo su

Collegare un LED, usando una resistenza, tra il pin GPIO11 e GND

Se scrivete sul file ./export nella cartella /sys/class/gpio, il sistema crea un file per gestire direttamente il GPIO desiderato. Nel nostro caso vogliamo pilotare il GPIO11 per accendere e spegnere il LED.

echo 11 >> /sys/class/gpio/export

Configurare la direzione del pin (In/Out)

echo out >> /sys/class/gpio/gpio11/direction

Page 9: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO - File

TURN OFF

echo 0 >> /sys/class/gpio/gpio11/value

TURN ON

echo 1 >> /sys/class/gpio/gpio11/value

Per eliminare il GPIO creatoecho 11 >> /sys/class/gpio/unexport

Page 10: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO - WiringPI

Page 11: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO – Installazione della libreria WiringPI

Il compilatore gcc è già preinstallato su Raspberry Pi. Occorrerà solo installare la libreria WiringPi. Dal Raspberry (connesso a Internet) lanciare in successione i seguenti comandi:

pi@raspberrypi ~ $ sudo apt-get install git-core

pi@raspberrypi ~ $ sudo apt-get update

pi@raspberrypi ~ $ sudo apt-get upgrade

pi@raspberrypi ~ $ git clone

git://git.drogon.net/wiringPi

Quindi:

pi@raspberrypi ~ $ cd wiringPi

pi@raspberrypi ~/wiringPi $ git pull origin

Infine, senza spostarsi dalla directory wiringPi:

pi@raspberrypi ~/wiringPi $ ./build

Page 12: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO – Utilizzo della libreria WiringPI

La compilazione e il linking possono essere fatti specificando con -l la libreria wiringPi (prestare attenzione alle maiuscole/minuscole). Supponendo che il nostro programma si chiami blink.c:

gcc -o blink blink.c -lwiringPi

Nel caso occorra compilare anche una libreria e collegarla al programma principale, bisognerà specificarla dopo il nome del sorgente principale. Per esempio, supponendo che il file di implementazione della libreria si chiami debounce.c, si avrà:

gcc -o blink blink.c debounce.c -lwiringPi

Page 13: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO – Utilizzo della libreria WiringPI

#include <wiringPi.h>

int main (void)

{

wiringPiSetup () ;

pinMode (0, OUTPUT) ;

for (;;)

{

digitalWrite (0, HIGH) ; delay (500) ;

digitalWrite (0, LOW) ; delay (500) ;

}

return 0 ;

}

gcc -Wall -o blink blink.c -lwiringPi

sudo ./blink

https://github.com/Wi

ringPi/WiringPi/blob/

master/gpio/gpio.1

Page 14: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO – Utilizzo della libreria WiringPI

L'accesso alla funzione wiringPiSetup() richiede privilegi di root. Quindi qualsiasi programma che sia stato scritto usando wiringPiSetup() deve essere lanciato mediante sudo :

pi@raspberrypi ~ $ sudo ./blink

E' sempre possibile eseguire il programma in background, ignorando però i messaggi di errore e sulla console (come eventuali printf() presenti nel programma.

pi@raspberrypi ~ $ sudo ./blink > /dev/null &

L'esecuzione del programma può essere terminata resettando il sistema oppure da tastiera (mediante il classico Ctrl-C) o ancora, se il relativo processo è in background, con sudo killall -9 , che, nel caso dell'esempio in questione, diventa:

pi@raspberrypi ~ $ sudo killall -9 blink

Page 15: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO - Java ed Eclipse

http://pi4j.com/install.html

http://tsvetan-stoyanov.github.io/launchpi/

Page 16: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

La GPIO - WebIOPi

• sudo apt-get update

• sudo apt-get install gcc-4.7

• sudo apt-get install python3.2

• wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz

• tar xzvf WebIOPi-0.6.0.tar

• cd WebIOPi-0.6.0

• sudo ./setup.sh

L’avvio del server è semplicissimo, eseguire come root il seguente comando:sudo /etc/init.d/webiopi start

Collegarsi da remoto a webiopi http://[RASPBERRY IP]:8000

Page 17: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

2Esempi di utilizzo

Alcuni esempi su come utilizzare la GPIO

Page 18: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Blink

Page 19: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Led & Button

Page 20: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Sensore di temperatura

Page 21: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Rele

Page 22: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Comunicazione seriale con XBEE

ESEMPIO: http://www.brettdangerfield.com/post/raspberrypi_tempature_monitor_project/

Page 23: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

3Raspberry e Arduino

Come interagire tra la Raspberry e Arduino

Page 24: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Gertduino

Il Gertduino è un Raspberry Pi-add-onche offre le stesse funzionalità di un Arduino Uno, ma con alcune caratteristiche extra. La scheda Gertduino presenta un microcontrollore Atmega328 e dispone di connettori che sono 100 % Arduino Uno compatibile. Contiene anche il pulsante di reset, 2 pulsanti e 6 LED. La scheda Gerduino ha anche un convertitore di livello RS232 che permette di convertire i segnali formano un UART per le tensioni standard RS232. Questo permette la comunicazione diretta con la RPi

http://www.element14.com/community/docs/DOC-64326

Per configurarla: https://projects.drogon.net/raspberry-pi/gertduino/atmega-setup/

Page 25: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

4Il modulo Camera

Come utilizzare la camera sulla RPi

Page 26: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

RPi 007!!

Camera

Page 27: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Abilitare da RASPI-CONFIG il modulo camera!!

HOW TO TAKE A PHOTO WITH YOUR RASPBERRY PI CAMERA MODULE

1. "raspistill" is a command line application that allows you to capture images with your camera module. Below is an example of this command in use.2. To capture an image in jpeg format, type "raspistill -o image.jpg" at the prompt, where "image" is the name of your image

HOW TO RECORD A VIDEO WITH YOUR RASPBERRY PI CAMERA MODULE

1. "raspivid" is a command line application that allows you to capture video with your camera module. Below is an example of this command in use.2. To capture a 10 second video with your Raspberry Pi camera module, run "raspivid -o video.h264 -t 10000" at the prompt, where "video" is the name of your video and "10000" is the number of milliseconds

SHELL PYTHON

RPi 007!!

Page 28: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Apertura di un forziere con face recognitionhttps://learn.adafruit.com/downloads/pdf/raspberry-pi-face-recognition-treasure-box.pdf

Raspberry Camera application

Camera di sorveglianzahttp://www.instructables.com/id/Raspberry-Pi-as-low-cost-HD-surveillance-camera/

Page 29: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

Thanks!ANY QUESTIONS?

You can find me at:

[email protected]

Page 30: CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things

CREDITS

Special thanks to all the people who made and released these awesome resources for free:

▪ Busy Icons by Olly Holovchenko

▪ Presentation template by SlidesCarnival

▪ Photographs by Unsplash

▪ Source slide

▪ http://wasnlab.tlc.unipr.it

This template is free to use under Creative Commons

Attribution license. If you use the graphic assets (photos,

icons and typographies) provided with this presentation you

must keep the Credits slide.