SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
SISTEMI EMBEDDED
Il caso Arduino
San Secondo Parmense 2013
“se ascolto dimentico, se vedo ricordo, se faccio capisco”
San Secondo Parmense – Mirko Mancin 2013
INDICE
• LCD
• Sistemi di comunicazione
• Seriale
• Ethernet
• WiFi
• Zigbee
San Secondo Parmense – Mirko Mancin 2013
LCD
Come utilizzare uno schermo LCD
Si potrebbe pensare di utilizzare un
display LCD per visualizzare dati
provenienti da sensori collegati alla
scheda Arduino (per esempio la
temperatura o l’intensità luminosa).
San Secondo Parmense – Mirko Mancin 2013
LCD
Come utilizzare uno schermo LCD
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of
the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis()/1000);
}
->LCD->HelloWorld
San Secondo Parmense – Mirko Mancin 2013
LCD
ESEMPIO
Il sensore di luminosità è una semplice
fotoresistenza, mentre il sensore di temperatura
è un sensore a tre pin, due per l’alimentazione
(5V e GND), mentre l’altro si connette
direttamente ad una porta analogica di Arduino.
Oggetti Qt.
Display LCD 1
Resistenza variabile 10kΩ 1
Resistenza 1kΩ 1
Fotoresistenza 1
Sensore di temperatura TMP36 1
Come collegare il
display ad
Arduino? (link)
San Secondo Parmense – Mirko Mancin 2013
LCD
ESEMPIO
-> LCD->TemperatureLight
//Definisco i pin del LCD
// (BS E D4 D5 D6 D7)
LiquidCrystal
lcd(7, 8, 9, 10, 11, 12);
//Acquisico i dati dai sensori
int tempReading =
analogRead(tempPin);
float tempVolts =
tempReading * 5.0 / 1024.0;
float tempC =
(tempVolts - 0.5) * 100.0;
float tempF =
tempC * 9.0 / 5.0 + 32.0;
San Secondo Parmense – Mirko Mancin 2013
Questo esempio vuole mostrare come
utilizzare Arduino per ricevere dati da un
computer. Utilizziamo il circuito
dell’esempio ->Blink e modifichiamo il
codice come segue:
• Se ricevo il carattere ‘H’ accendo il led
• Se ricevo il carattere ‘L’ spengo il led
I dati comunicano sulla seriale e quindi
possono essere gestiti da qualsiasi
programma in grado di interfacciarsi con
tale protocollo. Nel nostro caso usere
Processing.
COMUNICAZIONE SERIALE – Arduino-to-PC
->Serial->ArduinoAndProcessing
San Secondo Parmense – Mirko Mancin 2013
Questo esempio vuole mostrare come
utilizzare Arduino per ricevere dati da un
computer. Utilizziamo il circuito
dell’esempio ->Blink e modifichiamo il
codice come segue:
• Se ricevo il carattere ‘H’ accendo il led
• Se ricevo il carattere ‘L’ spengo il led
I dati comunicano sulla seriale e quindi
possono essere gestiti da qualsiasi
programma in grado di interfacciarsi con
tale protocollo. Nel nostro caso usere
Processing.
COMUNICAZIONE SERIALE – Arduino-to-PC
->Serial->ArduinoAndProcessing
San Secondo Parmense – Mirko Mancin 2013
ESERCIZIO
Fare un piccolo gioco di cui si dispone il
“gamepad” fatto in Arduino. Si hanno a
disposizione 4 bottoni che simulano le
freccie direzionali, mentre un altro bottone
simulerà un tasto per sparare. Con
processing mostrare tali movimenti con un
quadrato che si muove sullo schermo e
quando si spara cambiare il colore del
quadrato.
COMUNICAZIONE SERIALE – Arduino-to-PC
San Secondo Parmense – Mirko Mancin 2013
SoftwareSerial
COMUNICAZIONE SERIALE – Arduino-to-Arduino
Arduino dispone di pin digitali che possono essere utilizzati per simulare un
‘’Seriale Software’’, cioè adibire un pin a ricevere dati e l’altro a trasmettere.
ATTENZIONE: la RS232 non
funziona con segnali TTL. Ho
bisogno di convertire il segnale
->Serial->SoftwareSerial
San Secondo Parmense – Mirko Mancin 2013
Esistono alcuni metodi che permettono di comunicare con altri dispositivi
utilizzando come canale di trasmissione dati i protocolli seriali (I2C, SPI o RS232).
Questo rende possibile demandare ad una scheda slave funzioni di elaborazione
gravose, che non vogliamo far eseguire alla scheda master. Questo esempio usa il
bus I2C per creare uno scambio dati tra un Arduino ed un chip ATmega328
standalone.
COMUNICAZIONE SERIALE – I2C
San Secondo Parmense – Mirko Mancin 2013
COMUNICAZIONE SERIALE – I2C
I2C è disponibile in due versione, a 7 o 8 bit. Sette bit servono per identificare il
dispositivo, e l'ottavo bit determina se è in corso la scrittura o lettura. La libreria
Wire utilizza 7 bit indirizzi in tutto. Se si dispone di un codice di foglio dati o di
esempio che utilizza 8 bit di indirizzo, ti consigliamo di eliminare il bit basso
(cioè spostare il valore di un bit a destra), ottenendo un indirizzo compreso tra 0
e 127. Il numero di periferiche I2C su uno stesso bus di solito dipende dalle
capacità parassite introdotte sulla linea dai vari dispositivi, il limite è 400pF. (link)
San Secondo Parmense – Mirko Mancin 2013
Il bus I2C, basandosi su due fili, non permette la comunicazione contemporanea
tra Master e Slave. Lo scambio dati deve essere gestito dal Master tramite gli
indirizzi (univoci) degli slave. Il flusso può essere sintetizzato in questo modo
1. Il Master invia sul bus un bit di start
2. Il Master invia sul bus l’indirizzo dello slave con cui vuole comunicare
3. Il Master decide se scrivere o leggere dal dispositivo
4. Lo Slave legge o scrive in base alla richiesta del Master
COMUNICAZIONE SERIALE – I2C
Board I2C / TWI pins
Uno, Ethernet A4 (SDA), A5 (SCL)
Mega2560 20 (SDA), 21 (SCL)
Leonardo 2 (SDA), 3 (SCL)
Due 20 (SDA), 21 (SCL), SDA1, SCL1
La libreria Wire dispone di tutte le
funzioni necessarie alla
realizzazione Master-Slave tra due
schede Arduino.
->I2C->Arduino_ATMEGA
->I2C->Arduino_Processing
San Secondo Parmense – Mirko Mancin 2013
Con Arduino è possibile collegare i nostri
dispositivi in una rete attraverso i principali
protocolli di comunicazione. Esempio
utilizzando l’ethernet. La shield Ethernet
permette di collegare il nostro Arduino ad
un router o direttamente un pc e
inviare/ricevere dati attraverso l’uso della
libreria Ethernet.
Per collegare Arduino ad un router o un hub
basta collegare un cavo Ethernet standard
(CAT5 o CAT6), mentre per il collegamento a
PC potrebbe servire un cavo incrociato
ETHERNET
San Secondo Parmense – Mirko Mancin 2013
Arduino comunica con la shield attraverso
il bus SPI. Tale canale è sui pin 11, 12 e 13
sull’Arduino UNO mentre sull’Arduino
MEGA è sui pin 50, 51 e 52. Su entrambe
le schede il pin 10 è usato per il controller
SS.
Disponendo anche di uno slot per SD, la
shield Ethernet riserva il pin 4 per il
controller della SD.
N.B. utilizzando la shield Ethernet su un
Arduino UNO si riducono
considerevolmente i pin di I/O utilizzabili.
ETHERNET
San Secondo Parmense – Mirko Mancin 2013
Alla shield deve essere assegnato un indirizzo
MAC e un indirizzo IP con l’istruzione
Ethernet.begin();
L’indirizzo MAC è un identificatore univoco
globale per un particolare dispositivo collegato in
rete. Le shield Ethernet attuali sono dotate di un
adesivo che indica l'indirizzo MAC del dispositivo.
Indirizzi IP validi dipendono dalla configurazione
della rete. E 'possibile utilizzare il protocollo
DHCP per assegnare dinamicamente un indirizzo
IP alla shield. In alternativa, è anche possibile
specificare un gateway di rete e la sottorete.
ETHERNET
Ethernet.begin(mac, ip, dns, gateway, subnet);
San Secondo Parmense – Mirko Mancin 2013
#include <Ethernet.h>
#include <SPI.h>
// network configuration. gateway and subnet are optional.
// the media access control (ethernet hardware) address for the shield:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// the router's gateway address:
byte gateway[] = { 192, 168, 0, 1 };
// the subnet:
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server = EthernetServer(23);
//the IP address is dependent on your network
IPAddress ip(192,168,0,5);
void setup(){
// initialize the ethernet device
Ethernet.begin(mac, ip, gateway, subnet);
// start listening for clients
server.begin();
}
ETHERNET - Server
void loop(){
//TODO something!!
//print out the IP address
Serial.println(myIPaddress);
}
San Secondo Parmense – Mirko Mancin 2013
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 6 };
byte server[] = { 192, 168, 0, 5 };
EthernetClient client;
void setup(){
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
Serial.println("connecting...");
// it's connect to Arduino Server on port 8080
if (client.connect(server, 8080)) {
Serial.println("connected");
client.println("GET / HTTP/1.0");
client.println();
} else {
Serial.println("connection failed");
}
}
ETHERNET - Client
void loop(){
//If I get from the server
if (client.available()) {
char c = client.read();
Serial.print(c);
}
//If client disconnected
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
San Secondo Parmense – Mirko Mancin 2013
->Ethernet->ServerWeb
->Ethernet->SchedaAttuatori
->Ethernet->LedRGBWeb
ETHERNET
San Secondo Parmense – Mirko Mancin 2013
IL PROTOCOLLO HTTP
• Messaggio tipo Response(SERVER)
– Status Line (termina con CRLF)
– [Header]
– Linea vuota (CRLF)
– [Entity Body]
• Request Line / Status Line c’è sempre.
• Gli Header possono mancare
(tranne Host in HTTP 1.1!).
• La linea vuota c’è sempre (separa Header e Body).
• Entity Body può mancare
• Messaggio tipo Request(CLIENT)
– Request Line (termina con CRLF)
– [Header]
– Linea vuota (CRLF)
– [Entity Body] (stream di ottetti)
San Secondo Parmense – Mirko Mancin 2013
WIFI
Con l’Ethernet si è vincolati ad avere dei cavi
per collegare i diversi dispositivi tra loro.
Una soluzione wireless per Arduino è
possibile attraverso diverse soluzioni.
- Wireless SD Shield + modulo WiFi
- Shield con socket Xbee + modulo WiFi
- WiFi Shield
San Secondo Parmense – Mirko Mancin 2013
WIFI
Le prime due soluzioni sono le più versatili
perché si possono sostituire i moduli WiFi
nel caso di upgrade o rottura. Mentre la
seconda è vincolata ad una shield e quindi
in caso di danno o aggiornamto bisogna
sostituire tutta la shield.
San Secondo Parmense – Mirko Mancin 2013
WIRELESS SD SHIELD
La wireless SD shield permette ad una scheda Arduino di
comunicare senza fili con un modulo wifi. Si basa sui
moduli Xbee Digi, ma può utilizzare qualsiasi modulo con lo
stesso socket. Il modulo può comunicare fino a 100 metri al
chiuso, all'aperto, o 300 metri.
Può essere usata come un seriale usb o lo si può mettere in
una modalità di comando e configurarlo per una varietà di
opzioni di rete di trasmissione e rete attraverso uno switch.
I
ncluso a bordo è presente uno slot per schede SD come
per la shield Ethernet. Quando si utilizza la libreria SD per
accedere alla scheda, Pin 4 è CS e non può essere utilizzata
diversamente. SPI si basa anche in questo caso sui pin 11,
12, e 13 per la comunicazione.
San Secondo Parmense – Mirko Mancin 2013
WIRELESS SD SHIELD
La shield ha un bordo interruttore con l’etichetta ‘’Serial
Select’’. Determina come la comunicazione seriale del
modulo WiFi si collega alla comunicazione seriale tra il
microcontrollore (ATmega8 o ATmega168) e USB-seriale
chip sulla scheda Arduino.
Quando è nella posizione Micro, il pin DOUT del modulo
wireless è connesso al pin RX del microcontrollore e DIN è
collegato TX. Il modulo wireless comunicherà direttamente
con il microcontrollore. Si noti che i pin RX e TX del
microcontrollore sono ancora collegato ai pin TX e RX
(rispettivamente) del USB-seriale convertitore. I dati inviati
dal microcontrollore saranno trasmessi al computer
tramite USB oltre ad essere inviati in modalità wireless dal
modulo wireless. Il microcontrollore non sarà
programmabile tramite USB in questa modalità.
San Secondo Parmense – Mirko Mancin 2013
WIRELESS SD SHIELD
Con l'interruttore in posizione USB, il pin DOUT del modulo
wireless è connesso al pin RX del convertitore USB-seriale,
e DIN sul modulo wireless è collegato al pin TX. Ciò significa
che il modulo può comunicare direttamente con il
computer. Il microcontrollore sulla scheda verrà bypassato.
Per utilizzare la shield in questa modalità, è necessario
programmare il microcontrollore con uno sketch vuoto
(vedi sotto), o rimuovere il chip dalla board.
Sketch vuoto:
void setup() {}
void loop() {}
San Secondo Parmense – Mirko Mancin 2013
Modulo WiFly
Un modulo utilizzabile con questa shield è il modulo
Roving Networks WiFly RN-XV. Con questa configurazione
è possibile creare un piccolo http client dal quale inviare i
diversi dati al server. Il modulo wifi è già pronto all’uso
(non ha bisogno di configurazioni particolari, salvo per
necessità diverse).
Per sfruttarne le sue potenzialità si usano le librerie
WiflyHQ.
Sono librerie pronte all’uso per Arduino e fornisco diversi
esempi per creare una comunicazione sia HTTP che
TCP/UDP.
San Secondo Parmense – Mirko Mancin 2013
Configurazione e uso di una seriale software per interfacciarsi al
dispositivo:
#include <SoftwareSerial.h>
SoftwareSerial wifiSerial(8,9);
wifiSerial.begin(9600);
wifly.begin(&wifiSerial);
Collegarsi ad una rete WiFi;
wifly.setSSID("mySSID");
wifly.setPassphrase("myWPApassword");
wifly.enableDHCP();
wifly.join();
Modulo WiFly
San Secondo Parmense – Mirko Mancin 2013
Creare una rete WiFi Ad Hoc con 10 canali:
wifly.createAdhocNetwork("myssid", 10);
Mandare pacchetti UDP:
wifly.setIpProtocol(WIFLY_PROTOCOL_UDP);
wifly.sendto("Hello, world", "192.168.1.100", 2042);
Aprire una connessione TCP, mandare alcuni dati, e chiudere la connessione:
wifly.setIpProtocol(WIFLY_PROTOCOL_TCP);
wifly.open("192.168.1.100",8042);
wifly.println("Hello, world!");
wifly.close();
Ricevere dati UDP e TCP (assumendo di avere una seriale software):
if (wifly.available() > 0) {
Serial.write(wifly.read());
}
Modulo WiFly
San Secondo Parmense – Mirko Mancin 2013
Facile manipolazione di diverse opzioni ricevute con il metodo multiMatch_p()::
if (wifly.available() > 0) {
int match = wifly.multiMatch_P(100, 3,
F("button"), F("slider="), F("switch="));
switch (match) {
case 0: /* button */
Serial.print(F("button: pressed"));
break;
case 1: /* slider */
int slider = wifly.parseInt();
Serial.print(F("slider: "));
Serial.println(slider);
break;
case 2: /* switch */
char ch = wifly.read();
Serial.print(F("switch: "));
Serial.println(ch);
break;
default: /* timeout */
break;
}
}
Modulo WiFly
San Secondo Parmense – Mirko Mancin 2013
Limitazioni con WiFly RN-XV rev 2.32 firmware:
1. Non si può determinare l’indirizzo IP del client TCP che si è connesso.
2. Cambiare la porta locale durante l’esecuzione non influenza nulla finchè non si salva e si riavvia il
dispositivo.
3. Potrebbe non funzionare la chiusura di una connessione TCP. Il client deve rimanere connesso e
inviare ulteriori dati.
4. è supportata solo una connessione TCP alla volta.
5. Cambiare il timeout di svuotamento (set comm time x) non porta
cambiamenti fino al riavvio del dispositvo.
Modulo WiFly
San Secondo Parmense – Mirko Mancin 2013
Questo esempio mostra
come è possibile creare una
piccola stazione meteo
wireless con alcuni sensori di
rilevazione ambientale
(temperatura, umidità, CO2,
luce). I dati vengono inviati
ad un server con il modulo
WiFly montato sopra la
Wireless Shield.
WIRELESS SHIELD - Esempio
->StazioneMeteoWireless
San Secondo Parmense – Mirko Mancin 2013
La Arduino WiFi Shield collega Arduino a Internet in modalità
wireless senza aver bisogno di ulteriori moduli.
• Tensione di lavoro 5 V (fornita dalla scheda Arduino)
• Collegamento a reti 802.11b / g
• Tipi di crittografia: WEP e WPA2 personal
• Collegamento con Arduino sulla porta SPI
• Slot micro SD on-board
• ICSP header
• Collegamento FTDI per il debug seriale
• Mini-USB per l'aggiornamento del firmware
Il pin digitale 7 è usato per un handshake tra la shield e
Arduino e quindi non si può utilizzare.
Se si utilizza la shield con un Arduino prima del rev3 Uno, è necessario effettuare
un ulteriore collegamento. La scheda Wi-Fi utilizza il pin IOREF sui nuovi layout pin
di Arduino (Uno Rev3, Mega2560 rev3, e versioni successive) per rilevare la
tensione di riferimento per i pin I / O della scheda a cui è attaccato. (link)
WiFi Shield
San Secondo Parmense – Mirko Mancin 2013
WiFi Shield
Per mandare dei comandi con la porta FTDI devo collegare un apposito cavo al
connettore FTDI. La comunicazione avviene a 57600bps. Quando si invia un comando
bisogna terminare con un a capo (CR).
Comandi supportati:
scan
connect <ssid>
setkey <key_idx (0-3)> <key in hex> ("setkey none"
will delete all WEP keys)
status
debug <section> <level>
section: init, cm, spi, tcp , util, warn
level : 0 (off), 1 (on), 2 (verbose)
ttcp -t/-r [-options] host
-l length of bufs written to network (default 1024)
-n number of bufs written to network (default 1024)
-p port number to send to (default 2000)
-u udp
-v verbose
wpass <ssid> <passphrase> (set passphrase associated to ssid)
dpass <ssid> (delete passphrase associated to ssid)
San Secondo Parmense – Mirko Mancin 2013
WiFi Shield
Per utilizzare la shield faremo riferimento alla libreria WiFi.
#include <WiFi.h>
char ssid[] = "yourNetwork"; // your network SSID (name)
char pass[] = "12345678"; // your network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
void setup() {
// initialize serial:
Serial.begin(9600);
// attempt to connect using WPA2 encryption:
Serial.println("Attempting to connect to WPA network...");
status = WiFi.begin(ssid, pass);
// if you're not connected, stop here:
if ( status != WL_CONNECTED) {
Serial.println("Couldn't get a wifi connection");
while(true);
}
// if you are connected, print out info about the connection:
else {
Serial.println("Connected to network");
}
}
San Secondo Parmense – Mirko Mancin 2013
WiFi Shield - Esempi
Esempio di modello
client/server con due
Arduino con WiFi shield.
Unica differenza rispetto alla
classe Ethernet è che non
posso assegnare un indirizzo
IP fisso al server e quindi
sono vincolato tutte le volte
a sapere l’indirizzo del server
e riprogrammare l’Arduino
Client.
->WiFiShield->WiFiServer
->WiFiShield->WiFiClient
San Secondo Parmense – Mirko Mancin 2013
I moduli XBee sono una vera manna dal cielo per chi adora lavorare con i
microcontrollori ed il pc. Tali moduli, davvero molto piccoli e con prezzi
abbordabili, per poter comunicare tra loro utilizzano le specifiche ZigBee e
operano in Italia sulla frequenza di 2,4GHz. Tale specifica prevede che i
dispositivi che la utilizzano siano a basso consumo e quindi per contro non
abbiano transfer rate elevati.
In rete si possono trovare tutte le informazioni che si vogliono su tale protocollo
di comunicazione:
Wikipedia – Zigbee
Zigbee.org
ZIGBEE
San Secondo Parmense – Mirko Mancin 2013
I Moduli XBee, quindi, sfruttano il protocollo ZigBee ed implementano
una comunicazione seriale come quella presente sulla porta RS232 del pc
(ovviamente con diversi livelli di tensione). Esistono vari tipi di moduli ZigBee e
ogni tipo di modulo può essere richiesto con un particolare tipo di antenna:
cambiano le caratteristiche, le potenze in gioco ecc. Alcuni tipi di moduli, anche
se diversi, possono comunicare tra loro.
L’utilizzo degli XBee, poi, è davvero semplice: la codifica/decodifica di
trasmissione è già eseguita via hardware; noi non dovremo fare assolutamente
nulla se non fornire il dato seriale da trasmettere via usart.
ZIGBEE
San Secondo Parmense – Mirko Mancin 2013
Al primo utilizzo con un modulo XBee dovremo scontrarci con le prime due
“difficoltà”:
• I Moduli XBee hanno una piedinatura con passo da 2mm, più piccola della
classica da 2,54mm alla quale siamo abituati normalmente.
• I Moduli XBee funzionano a 3,3Volts, per cui anche i livelli logici vanno di pari
passo.
Questi due piccoli-grandi ostacoli possono essere aggirati molto facilmente dal
momento che esistono apposite schede di adattamento in commercio. Esistono
degli adattatori, che ci permettono di utilizzare tali moduli senza fare fatica e
addirittura su una basetta breadboard!
XBEE – Come utilizzarli
San Secondo Parmense – Mirko Mancin 2013
Ovviamente esistono anche delle shield apposta da utilizzare con Arduino. Oltre
alla Wireless Shield, esiste anche la Xbee shield che permette di utilizzare tali
moduli senza aver bisogno di una breadboard. Questa shield accetta i vari tipi di
moduli XBee mantenendo dimensioni molto contenute (può essere montato
tranquillamente sopra una scheda Arduino UNO).
XBEE – Come utilizzarli
Ovviamente non si tratta di una “semplice” scheda
di adattamento: ha a bordo i condensatori e
il regolatore di tensione a 3,3V (accetta una
tensione in ingresso fino a 18Volts sul pin
denominato Vin), led per monitorare la
comunicazione e pin per interfacciarsi con Arduino.
San Secondo Parmense – Mirko Mancin 2013
SERIE 1
Serie 1 (Xbee 802.15.4 OEM Low Power RF Modules)
Serie 1 PRO (Xbee-PRO 802.15.4 OEM Extended Range RF Modules)
Serie 1 Digimesh (Xbee Digimesh Low Power RF Modules)
Serie 1 PRO Digimesh (Xbee-PRO Digimesh Extended Range RF Modules)
SERIE 2
Serie 2 (Xbee ZB ZigBee Low Power RF Modules)
Serie 2B PRO (Xbee-PRO ZB S2B ZigBee Extended Range RF Modules)
Serie 2B PRO Programmabile (Programmable Xbee-PRO ZB S2B ZigBee Extended Range RF Modules)
XBEE – I modelli
Entrambe le versioni montano tre tipi di antenne:
• A chip
• A filo
• Con connettore U.FL
San Secondo Parmense – Mirko Mancin 2013
Questa denominazione non
è indicativa delle varie
famiglie di XBee ma è
piuttosto un riferimento
all’hardware montato a
bordo che permette loro di
funzionare in un modo
piuttosto che in un altro.
N.B. Gli Xbee Serie 2 non
sono ‘’migliori’’ di quelli di
Serie 1. Sono due tipologie
di moduli che operano su
tecnologie differenti.
XBEE – Serie
San Secondo Parmense – Mirko Mancin 2013
Nei casi in cui si desidera
realizzare una comunicazione
point-to-point (ovvero devono
comunicare tra loro soltanto
due dispositivi) è sicuramente
conveniente scegliere i moduli
appartenenti alla famiglia XBee
802.15.4 OEM RF modules
(ovvero la Serie 1).
XBEE – Serie 1
San Secondo Parmense – Mirko Mancin 2013
Per una comunicazione
punto punto possono andar
bene anche gli XBee serie 2
ma sono più difficili da
utilizzare in quanto
andrebbero
opportunamente configurati
dato che di serie sono
impostati per lavorare in
una rete Mesh secondo il
protocollo Zigbee.
XBEE – Serie 2
(per ulteriori chiarimenti rimando alla guida)
San Secondo Parmense – Mirko Mancin 2013
Ovviamente esistono anche delle shield apposta da utilizzare con Arduino. Oltre
alla Wireless Shield, è presente anche la Xbee shield che permette di utilizzare tali
moduli senza aver bisogno di una breadboard. Questa shield accetta i vari tipi di
moduli XBee mantenendo dimensioni molto contenute (può essere montato
tranquillamente sopra una scheda Arduino UNO).
XBEE – Come utilizzarli
Ovviamente non si tratta di una “semplice” scheda
di adattamento: ha a bordo i condensatori e
il regolatore di tensione a 3,3V (accetta una
tensione in ingresso fino a 18Volts sul pin
denominato Vin), led per monitorare la
comunicazione e pin per interfacciarsi con Arduino.
San Secondo Parmense – Mirko Mancin 2013
1. Ogni Xbee deve essere configurato attraverso
l’apposito software X-CTU via USB.
Fortunatamente i moduli serie 1 sono già
autoconfigurati per comunicare tra loro ad un
baud rate di 9600bps in modalità trasparente.
(link1)(link2)
2. Caricare un semplice sketch di prova su Arduino
(senza modulo Xbee installato sopra) per la
comunicazione. Il trasmittente userà l’istruzione
Serial.print() mentre il ricevitore userà l’istruzione
Serial.read().
3. Mettere il modulo sopra Arduino con i pin in
modalità “Xbee”.
XBEE - Configurazione
Per approfondire
San Secondo Parmense – Mirko Mancin 2013
XBEE – Hello Xbee
void setup(){
Serial.begin(19200);
}
void loop(){
Serial.println('a');
delay(1000);
Serial.println('b');
delay(1000);
}
// LED connected to digital pin 13
int ledPin = 13;
int val = 'a';
void setup(){
// sets the digital pin as output
pinMode(ledPin, OUTPUT);
Serial.begin(19200);
}
void loop(){
val = Serial.read();
if (val=='a'){digitalWrite(13,LOW);}
if (val=='b'){digitalWrite(13,HIGH);}
}
TRASMETTITORE RICEVITORE
San Secondo Parmense – Mirko Mancin 2013
La modalità comandi è quella normalmente utilizzata da XCTU per comunicare con il
modulo XBee e permette di inviare comandi AT (lo standard utilizzato per tutti i
modem).
Per entrare in modalità comandi, di default basta rispettare 3 semplici regole:
• Attendere almeno un secondo dall’ultimo dato ricevuto
• Inviare al modulo la stringa +++ (senza ritorno a capo!)
• Attendere un secondo
Il modulo deve rispondere con “OK”.
Il secondo da attendere sia prima che dopo è definito dal parametro GT – Guard Times, di
default impostato al valore 0x03E8 (1000 in decimale), mentre il carattere da inviare per 3
volte per entrare in modalità comandi è definito dal parametro CC – Command Sequence
Character, impostato di default al valore 0x2B (codice ascii del +). (Lista comandi)
XBEE – AT Comands
San Secondo Parmense – Mirko Mancin 2013
I moduli Xbee possono essere utilizzati anche in modalità API. Arduino mette a
disposizione una libreria per comunicare con i moduli in tale modalità.
La libreria supporta sia i moduli Serie 1 (802.15.4) che Serie 2 (ZB Pro / ZNet).
Questa libreria Include il supporto per la maggior parte dei tipi di pacchetti, tra
cui: TX / RX, comando AT, remoto AT, I / O Campioni e lo stato del modem.
XBEE Library
Nota: Questo software richiede modalità API,
impostando AP = 2. Se si utilizza Series 2 XBee, è
necessario installare firmware API (che spediscono
con AT firmware), quindi impostare AP = 2. Questo
software non funziona correttamente con AP = 1.
Fare riferimento a XBeeConfiguration e
WhyApiMode per maggiori informazioni.
San Secondo Parmense – Mirko Mancin 2013
La modalità API (Application Programming Interface) è un’alternativa alla modalità trasparente che
consente, oltre che trasmettere e ricevere dati, di interagire ad un livello più basso con i moduli XBee
consentendo, tra le altre cose, di:
• Cambiare i parametri di configurazione (inviare comandi AT) senza entrare in
• modalità comandi
• Conoscere l’ RSSI (Received Signal Strength Indicator – Indicatore di forza del
• segnale ricevuto)
• Ricevere una conferma di pacchetto dati consegnato correttamente per ogni
• pacchetto trasmesso o un’indicazione di consegna fallita
• Trasmettere dati a più destinatari
• Identificare l’indirizzo di chi ha trasmesso il pacchetto dati
XBEE – API
Si capisce quindi perché la modalità trasparente abbia tale
nome: i dati vengono inviati sulla seriale tali e quali, in modalità
API invece i dati vengono interpretati.
La modalità trasparente viene impostata, tramite XCTU, agendo
sul parametro AP – API Enable. Il valore 0 identifica la modalità
trasparente (API Disabled).
San Secondo Parmense – Mirko Mancin 2013
Il modo più semplice per comunicare con i moduli XBee è in modalità punto a
punto. Ciò significa che un modulo comunica direttamente con un altro modulo.
I dati seriali inviati da un XBee, si trasmettono in modalità wireless, all'altro e
viceversa.
Un esempio potrebbe essere quello di mandare via wireless i valori letti da un
potenziometro e l’altro modulo, ricevendo i dati, modifica la posizione di un
servo motore.
XBEE – Esempio
->PotToMotor
San Secondo Parmense – Mirko Mancin 2013
Monitoraggio della presenza di persone all’interno di un ambiente. Comunicano
tra di loro con i moduli XBee e inviano i dati al server attraverso la porta
Ethernet.
XBEE – Esempio
->XbeeAdvanced
San Secondo Parmense – Mirko Mancin 2013
1. Con Processing creare 4 bottoni:
Su - Giu - Dx - Sx
Con Arduino ricevere via seriale i valori dei bottoni premuti e inviarli
ad un modulo Xbee che si preoccuperà di far accendere 4 led che
simulano la pressione dei tasti
2. Pseudo-Controller per automobile radiocomandata
3. Integrare i due esercizi precedenti
XBEE – Esercizio
San Secondo Parmense – Mirko Mancin 2013
RIFERIMENTI
www.mancio90.it
mirkomancin90@gmail.com

Contenu connexe

Tendances

Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Michele Maffucci
 
Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Michele Maffucci
 
Lezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreLezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreMirko Mancin
 
Intro to Arduino
Intro to ArduinoIntro to Arduino
Intro to ArduinotrevisoAUG
 
Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1Daniele Costarella
 
Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Michele Maffucci
 
Lezione introduttiva su Arduino
Lezione introduttiva su ArduinoLezione introduttiva su Arduino
Lezione introduttiva su ArduinoMirko Mancin
 
Come rendere Arduino professionale
Come rendere Arduino professionaleCome rendere Arduino professionale
Come rendere Arduino professionaleEmanuele Bonanni
 
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...Luigi Francesco Cerfeda
 
Presentazione Arduino
Presentazione ArduinoPresentazione Arduino
Presentazione ArduinoAntonio Serra
 
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Sardegna Ricerche
 
Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Michele Maffucci
 
Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Michele Maffucci
 
Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Michele Maffucci
 
Arduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteArduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteMirco Sbrollini
 
CoderDojo - Scratch 4 Arduino
CoderDojo - Scratch 4 ArduinoCoderDojo - Scratch 4 Arduino
CoderDojo - Scratch 4 ArduinoMirco Piccin
 
Arduino: breve introduzione & progetti
Arduino: breve introduzione & progettiArduino: breve introduzione & progetti
Arduino: breve introduzione & progettiMirco Piccin
 
Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Michele Maffucci
 

Tendances (20)

Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011
 
Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1
 
Lezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreLezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 ore
 
Intro to Arduino
Intro to ArduinoIntro to Arduino
Intro to Arduino
 
Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1
 
Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2
 
Lezione introduttiva su Arduino
Lezione introduttiva su ArduinoLezione introduttiva su Arduino
Lezione introduttiva su Arduino
 
Come rendere Arduino professionale
Come rendere Arduino professionaleCome rendere Arduino professionale
Come rendere Arduino professionale
 
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
 
Presentazione Arduino
Presentazione ArduinoPresentazione Arduino
Presentazione Arduino
 
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
 
Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4
 
Arduino: domotica OpenSource
Arduino: domotica OpenSourceArduino: domotica OpenSource
Arduino: domotica OpenSource
 
Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5
 
Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6
 
Arduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteArduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolante
 
CoderDojo - Scratch 4 Arduino
CoderDojo - Scratch 4 ArduinoCoderDojo - Scratch 4 Arduino
CoderDojo - Scratch 4 Arduino
 
Arduino: breve introduzione & progetti
Arduino: breve introduzione & progettiArduino: breve introduzione & progetti
Arduino: breve introduzione & progetti
 
Arduino primo v1
Arduino primo v1Arduino primo v1
Arduino primo v1
 
Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3
 

En vedette

Arduino e stampa 3d: le nuove frontiere della robotica homemade
Arduino e stampa 3d: le nuove frontiere della robotica homemadeArduino e stampa 3d: le nuove frontiere della robotica homemade
Arduino e stampa 3d: le nuove frontiere della robotica homemadeOpen Makers Italy
 
Arduino prima spiegazione
Arduino  prima spiegazioneArduino  prima spiegazione
Arduino prima spiegazioneFlaviano Fior
 
PIC microcontroller
PIC microcontroller PIC microcontroller
PIC microcontroller Rami Alsalman
 
Sistema di numerazione
Sistema di numerazioneSistema di numerazione
Sistema di numerazioneGilda Tobia
 
Bk001 it c18-step_by_step
Bk001 it c18-step_by_stepBk001 it c18-step_by_step
Bk001 it c18-step_by_stephawk2012
 
Tesi Magistrale 2014
Tesi Magistrale 2014Tesi Magistrale 2014
Tesi Magistrale 2014Mirko Mancin
 
Diagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaDiagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaGilda Tobia
 
Interfaccia verso il BUS
Interfaccia verso il BUSInterfaccia verso il BUS
Interfaccia verso il BUSSergio Porcu
 
Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Sergio Porcu
 
Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086Sergio Porcu
 

En vedette (18)

Arduino e stampa 3d: le nuove frontiere della robotica homemade
Arduino e stampa 3d: le nuove frontiere della robotica homemadeArduino e stampa 3d: le nuove frontiere della robotica homemade
Arduino e stampa 3d: le nuove frontiere della robotica homemade
 
Arduino prima spiegazione
Arduino  prima spiegazioneArduino  prima spiegazione
Arduino prima spiegazione
 
Assembly2
Assembly2Assembly2
Assembly2
 
PIC microcontroller
PIC microcontroller PIC microcontroller
PIC microcontroller
 
Sistema di numerazione
Sistema di numerazioneSistema di numerazione
Sistema di numerazione
 
Bk001 it c18-step_by_step
Bk001 it c18-step_by_stepBk001 it c18-step_by_step
Bk001 it c18-step_by_step
 
Tesi Triennale
Tesi TriennaleTesi Triennale
Tesi Triennale
 
Investimenti
InvestimentiInvestimenti
Investimenti
 
Tesi Magistrale 2014
Tesi Magistrale 2014Tesi Magistrale 2014
Tesi Magistrale 2014
 
Diagrammi di Bode
Diagrammi di BodeDiagrammi di Bode
Diagrammi di Bode
 
Diagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaDiagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in Polonia
 
Interfaccia verso il BUS
Interfaccia verso il BUSInterfaccia verso il BUS
Interfaccia verso il BUS
 
Assembly
AssemblyAssembly
Assembly
 
Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088
 
Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086
 
Assembly1
Assembly1Assembly1
Assembly1
 
Array
ArrayArray
Array
 
Assembler 8086
Assembler 8086Assembler 8086
Assembler 8086
 

Similaire à Lezione 3 arduino - corso 20 ore

Review4 u arduino duemilanove scheda di sviluppo compatibile 2010-11-11
Review4 u arduino duemilanove scheda di sviluppo compatibile   2010-11-11Review4 u arduino duemilanove scheda di sviluppo compatibile   2010-11-11
Review4 u arduino duemilanove scheda di sviluppo compatibile 2010-11-11Ionela
 
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileCommit University
 
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad ArduinoSimone Lusenti
 
LinoLab - Laboratorio di Arduino
LinoLab - Laboratorio di Arduino LinoLab - Laboratorio di Arduino
LinoLab - Laboratorio di Arduino Matteo Troìa
 
EuComm
EuCommEuComm
EuCommiBLio
 
Guida al computer - Lezione 90 - Protocolli ed indirizzi IP
Guida al computer - Lezione 90 - Protocolli ed indirizzi IP Guida al computer - Lezione 90 - Protocolli ed indirizzi IP
Guida al computer - Lezione 90 - Protocolli ed indirizzi IP caioturtle
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Daniele Costarella
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Salvatore Carotenuto
 
Arduino&raspberry pi - Un connubio vincente
Arduino&raspberry pi - Un connubio vincenteArduino&raspberry pi - Un connubio vincente
Arduino&raspberry pi - Un connubio vincenteMirco Sbrollini
 
Open Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italianoOpen Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italianoRiccardo Lemmi
 
Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollorisamu97
 
Arduino : l'esperienza di IRES FVG - OpenSourceDay2012
Arduino : l'esperienza di IRES FVG - OpenSourceDay2012Arduino : l'esperienza di IRES FVG - OpenSourceDay2012
Arduino : l'esperienza di IRES FVG - OpenSourceDay2012Mirco Piccin
 
Guida al computer - Lezione 8 - La scheda madre parte 2
Guida al computer - Lezione 8 - La scheda madre parte 2Guida al computer - Lezione 8 - La scheda madre parte 2
Guida al computer - Lezione 8 - La scheda madre parte 2caioturtle
 
An IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotionAn IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotionJennifer De Filicaia
 
Arduino & Smartphone
Arduino & SmartphoneArduino & Smartphone
Arduino & Smartphonedega1999
 

Similaire à Lezione 3 arduino - corso 20 ore (20)

Arduino - Le basi per iniziare nel mondo IoT
Arduino - Le basi per iniziare nel mondo IoTArduino - Le basi per iniziare nel mondo IoT
Arduino - Le basi per iniziare nel mondo IoT
 
Review4 u arduino duemilanove scheda di sviluppo compatibile 2010-11-11
Review4 u arduino duemilanove scheda di sviluppo compatibile   2010-11-11Review4 u arduino duemilanove scheda di sviluppo compatibile   2010-11-11
Review4 u arduino duemilanove scheda di sviluppo compatibile 2010-11-11
 
Arduino ICT2016 [IT]
Arduino ICT2016 [IT]Arduino ICT2016 [IT]
Arduino ICT2016 [IT]
 
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore Basile
 
Grix.it wood board usb
Grix.it    wood board usbGrix.it    wood board usb
Grix.it wood board usb
 
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad Arduino
 
LinoLab - Laboratorio di Arduino
LinoLab - Laboratorio di Arduino LinoLab - Laboratorio di Arduino
LinoLab - Laboratorio di Arduino
 
EuComm
EuCommEuComm
EuComm
 
Arduino galileo edison_udoo
Arduino galileo edison_udooArduino galileo edison_udoo
Arduino galileo edison_udoo
 
Guida al computer - Lezione 90 - Protocolli ed indirizzi IP
Guida al computer - Lezione 90 - Protocolli ed indirizzi IP Guida al computer - Lezione 90 - Protocolli ed indirizzi IP
Guida al computer - Lezione 90 - Protocolli ed indirizzi IP
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3
 
Arduino&raspberry pi - Un connubio vincente
Arduino&raspberry pi - Un connubio vincenteArduino&raspberry pi - Un connubio vincente
Arduino&raspberry pi - Un connubio vincente
 
Open Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italianoOpen Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italiano
 
Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollori
 
Arduino : l'esperienza di IRES FVG - OpenSourceDay2012
Arduino : l'esperienza di IRES FVG - OpenSourceDay2012Arduino : l'esperienza di IRES FVG - OpenSourceDay2012
Arduino : l'esperienza di IRES FVG - OpenSourceDay2012
 
Guida al computer - Lezione 8 - La scheda madre parte 2
Guida al computer - Lezione 8 - La scheda madre parte 2Guida al computer - Lezione 8 - La scheda madre parte 2
Guida al computer - Lezione 8 - La scheda madre parte 2
 
Arduino - Cosa sono e come funzionano i display
Arduino - Cosa sono e come funzionano i displayArduino - Cosa sono e come funzionano i display
Arduino - Cosa sono e come funzionano i display
 
An IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotionAn IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotion
 
Arduino & Smartphone
Arduino & SmartphoneArduino & Smartphone
Arduino & Smartphone
 

Dernier

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxlorenzodemidio01
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxteccarellilorenzo
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxtecongo2007
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024IISGiovanniVallePado
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileNicola Rabbi
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxsasaselvatico
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxtecongo2007
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereMarco Chizzali
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxtecongo2007
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...Nguyen Thanh Tu Collection
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxtecongo2007
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticanico07fusco
 

Dernier (20)

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 

Lezione 3 arduino - corso 20 ore

  • 1. SISTEMI EMBEDDED Il caso Arduino San Secondo Parmense 2013 “se ascolto dimentico, se vedo ricordo, se faccio capisco”
  • 2. San Secondo Parmense – Mirko Mancin 2013 INDICE • LCD • Sistemi di comunicazione • Seriale • Ethernet • WiFi • Zigbee
  • 3. San Secondo Parmense – Mirko Mancin 2013 LCD Come utilizzare uno schermo LCD Si potrebbe pensare di utilizzare un display LCD per visualizzare dati provenienti da sensori collegati alla scheda Arduino (per esempio la temperatura o l’intensità luminosa).
  • 4. San Secondo Parmense – Mirko Mancin 2013 LCD Come utilizzare uno schermo LCD // include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); } void loop() { // set the cursor to column 0, line 1 lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis()/1000); } ->LCD->HelloWorld
  • 5. San Secondo Parmense – Mirko Mancin 2013 LCD ESEMPIO Il sensore di luminosità è una semplice fotoresistenza, mentre il sensore di temperatura è un sensore a tre pin, due per l’alimentazione (5V e GND), mentre l’altro si connette direttamente ad una porta analogica di Arduino. Oggetti Qt. Display LCD 1 Resistenza variabile 10kΩ 1 Resistenza 1kΩ 1 Fotoresistenza 1 Sensore di temperatura TMP36 1 Come collegare il display ad Arduino? (link)
  • 6. San Secondo Parmense – Mirko Mancin 2013 LCD ESEMPIO -> LCD->TemperatureLight //Definisco i pin del LCD // (BS E D4 D5 D6 D7) LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //Acquisico i dati dai sensori int tempReading = analogRead(tempPin); float tempVolts = tempReading * 5.0 / 1024.0; float tempC = (tempVolts - 0.5) * 100.0; float tempF = tempC * 9.0 / 5.0 + 32.0;
  • 7. San Secondo Parmense – Mirko Mancin 2013 Questo esempio vuole mostrare come utilizzare Arduino per ricevere dati da un computer. Utilizziamo il circuito dell’esempio ->Blink e modifichiamo il codice come segue: • Se ricevo il carattere ‘H’ accendo il led • Se ricevo il carattere ‘L’ spengo il led I dati comunicano sulla seriale e quindi possono essere gestiti da qualsiasi programma in grado di interfacciarsi con tale protocollo. Nel nostro caso usere Processing. COMUNICAZIONE SERIALE – Arduino-to-PC ->Serial->ArduinoAndProcessing
  • 8. San Secondo Parmense – Mirko Mancin 2013 Questo esempio vuole mostrare come utilizzare Arduino per ricevere dati da un computer. Utilizziamo il circuito dell’esempio ->Blink e modifichiamo il codice come segue: • Se ricevo il carattere ‘H’ accendo il led • Se ricevo il carattere ‘L’ spengo il led I dati comunicano sulla seriale e quindi possono essere gestiti da qualsiasi programma in grado di interfacciarsi con tale protocollo. Nel nostro caso usere Processing. COMUNICAZIONE SERIALE – Arduino-to-PC ->Serial->ArduinoAndProcessing
  • 9. San Secondo Parmense – Mirko Mancin 2013 ESERCIZIO Fare un piccolo gioco di cui si dispone il “gamepad” fatto in Arduino. Si hanno a disposizione 4 bottoni che simulano le freccie direzionali, mentre un altro bottone simulerà un tasto per sparare. Con processing mostrare tali movimenti con un quadrato che si muove sullo schermo e quando si spara cambiare il colore del quadrato. COMUNICAZIONE SERIALE – Arduino-to-PC
  • 10. San Secondo Parmense – Mirko Mancin 2013 SoftwareSerial COMUNICAZIONE SERIALE – Arduino-to-Arduino Arduino dispone di pin digitali che possono essere utilizzati per simulare un ‘’Seriale Software’’, cioè adibire un pin a ricevere dati e l’altro a trasmettere. ATTENZIONE: la RS232 non funziona con segnali TTL. Ho bisogno di convertire il segnale ->Serial->SoftwareSerial
  • 11. San Secondo Parmense – Mirko Mancin 2013 Esistono alcuni metodi che permettono di comunicare con altri dispositivi utilizzando come canale di trasmissione dati i protocolli seriali (I2C, SPI o RS232). Questo rende possibile demandare ad una scheda slave funzioni di elaborazione gravose, che non vogliamo far eseguire alla scheda master. Questo esempio usa il bus I2C per creare uno scambio dati tra un Arduino ed un chip ATmega328 standalone. COMUNICAZIONE SERIALE – I2C
  • 12. San Secondo Parmense – Mirko Mancin 2013 COMUNICAZIONE SERIALE – I2C I2C è disponibile in due versione, a 7 o 8 bit. Sette bit servono per identificare il dispositivo, e l'ottavo bit determina se è in corso la scrittura o lettura. La libreria Wire utilizza 7 bit indirizzi in tutto. Se si dispone di un codice di foglio dati o di esempio che utilizza 8 bit di indirizzo, ti consigliamo di eliminare il bit basso (cioè spostare il valore di un bit a destra), ottenendo un indirizzo compreso tra 0 e 127. Il numero di periferiche I2C su uno stesso bus di solito dipende dalle capacità parassite introdotte sulla linea dai vari dispositivi, il limite è 400pF. (link)
  • 13. San Secondo Parmense – Mirko Mancin 2013 Il bus I2C, basandosi su due fili, non permette la comunicazione contemporanea tra Master e Slave. Lo scambio dati deve essere gestito dal Master tramite gli indirizzi (univoci) degli slave. Il flusso può essere sintetizzato in questo modo 1. Il Master invia sul bus un bit di start 2. Il Master invia sul bus l’indirizzo dello slave con cui vuole comunicare 3. Il Master decide se scrivere o leggere dal dispositivo 4. Lo Slave legge o scrive in base alla richiesta del Master COMUNICAZIONE SERIALE – I2C Board I2C / TWI pins Uno, Ethernet A4 (SDA), A5 (SCL) Mega2560 20 (SDA), 21 (SCL) Leonardo 2 (SDA), 3 (SCL) Due 20 (SDA), 21 (SCL), SDA1, SCL1 La libreria Wire dispone di tutte le funzioni necessarie alla realizzazione Master-Slave tra due schede Arduino. ->I2C->Arduino_ATMEGA ->I2C->Arduino_Processing
  • 14. San Secondo Parmense – Mirko Mancin 2013 Con Arduino è possibile collegare i nostri dispositivi in una rete attraverso i principali protocolli di comunicazione. Esempio utilizzando l’ethernet. La shield Ethernet permette di collegare il nostro Arduino ad un router o direttamente un pc e inviare/ricevere dati attraverso l’uso della libreria Ethernet. Per collegare Arduino ad un router o un hub basta collegare un cavo Ethernet standard (CAT5 o CAT6), mentre per il collegamento a PC potrebbe servire un cavo incrociato ETHERNET
  • 15. San Secondo Parmense – Mirko Mancin 2013 Arduino comunica con la shield attraverso il bus SPI. Tale canale è sui pin 11, 12 e 13 sull’Arduino UNO mentre sull’Arduino MEGA è sui pin 50, 51 e 52. Su entrambe le schede il pin 10 è usato per il controller SS. Disponendo anche di uno slot per SD, la shield Ethernet riserva il pin 4 per il controller della SD. N.B. utilizzando la shield Ethernet su un Arduino UNO si riducono considerevolmente i pin di I/O utilizzabili. ETHERNET
  • 16. San Secondo Parmense – Mirko Mancin 2013 Alla shield deve essere assegnato un indirizzo MAC e un indirizzo IP con l’istruzione Ethernet.begin(); L’indirizzo MAC è un identificatore univoco globale per un particolare dispositivo collegato in rete. Le shield Ethernet attuali sono dotate di un adesivo che indica l'indirizzo MAC del dispositivo. Indirizzi IP validi dipendono dalla configurazione della rete. E 'possibile utilizzare il protocollo DHCP per assegnare dinamicamente un indirizzo IP alla shield. In alternativa, è anche possibile specificare un gateway di rete e la sottorete. ETHERNET Ethernet.begin(mac, ip, dns, gateway, subnet);
  • 17. San Secondo Parmense – Mirko Mancin 2013 #include <Ethernet.h> #include <SPI.h> // network configuration. gateway and subnet are optional. // the media access control (ethernet hardware) address for the shield: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // the router's gateway address: byte gateway[] = { 192, 168, 0, 1 }; // the subnet: byte subnet[] = { 255, 255, 255, 0 }; EthernetServer server = EthernetServer(23); //the IP address is dependent on your network IPAddress ip(192,168,0,5); void setup(){ // initialize the ethernet device Ethernet.begin(mac, ip, gateway, subnet); // start listening for clients server.begin(); } ETHERNET - Server void loop(){ //TODO something!! //print out the IP address Serial.println(myIPaddress); }
  • 18. San Secondo Parmense – Mirko Mancin 2013 #include <Ethernet.h> #include <SPI.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 0, 6 }; byte server[] = { 192, 168, 0, 5 }; EthernetClient client; void setup(){ Ethernet.begin(mac, ip); Serial.begin(9600); delay(1000); Serial.println("connecting..."); // it's connect to Arduino Server on port 8080 if (client.connect(server, 8080)) { Serial.println("connected"); client.println("GET / HTTP/1.0"); client.println(); } else { Serial.println("connection failed"); } } ETHERNET - Client void loop(){ //If I get from the server if (client.available()) { char c = client.read(); Serial.print(c); } //If client disconnected if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); for(;;) ; } }
  • 19. San Secondo Parmense – Mirko Mancin 2013 ->Ethernet->ServerWeb ->Ethernet->SchedaAttuatori ->Ethernet->LedRGBWeb ETHERNET
  • 20. San Secondo Parmense – Mirko Mancin 2013 IL PROTOCOLLO HTTP • Messaggio tipo Response(SERVER) – Status Line (termina con CRLF) – [Header] – Linea vuota (CRLF) – [Entity Body] • Request Line / Status Line c’è sempre. • Gli Header possono mancare (tranne Host in HTTP 1.1!). • La linea vuota c’è sempre (separa Header e Body). • Entity Body può mancare • Messaggio tipo Request(CLIENT) – Request Line (termina con CRLF) – [Header] – Linea vuota (CRLF) – [Entity Body] (stream di ottetti)
  • 21. San Secondo Parmense – Mirko Mancin 2013 WIFI Con l’Ethernet si è vincolati ad avere dei cavi per collegare i diversi dispositivi tra loro. Una soluzione wireless per Arduino è possibile attraverso diverse soluzioni. - Wireless SD Shield + modulo WiFi - Shield con socket Xbee + modulo WiFi - WiFi Shield
  • 22. San Secondo Parmense – Mirko Mancin 2013 WIFI Le prime due soluzioni sono le più versatili perché si possono sostituire i moduli WiFi nel caso di upgrade o rottura. Mentre la seconda è vincolata ad una shield e quindi in caso di danno o aggiornamto bisogna sostituire tutta la shield.
  • 23. San Secondo Parmense – Mirko Mancin 2013 WIRELESS SD SHIELD La wireless SD shield permette ad una scheda Arduino di comunicare senza fili con un modulo wifi. Si basa sui moduli Xbee Digi, ma può utilizzare qualsiasi modulo con lo stesso socket. Il modulo può comunicare fino a 100 metri al chiuso, all'aperto, o 300 metri. Può essere usata come un seriale usb o lo si può mettere in una modalità di comando e configurarlo per una varietà di opzioni di rete di trasmissione e rete attraverso uno switch. I ncluso a bordo è presente uno slot per schede SD come per la shield Ethernet. Quando si utilizza la libreria SD per accedere alla scheda, Pin 4 è CS e non può essere utilizzata diversamente. SPI si basa anche in questo caso sui pin 11, 12, e 13 per la comunicazione.
  • 24. San Secondo Parmense – Mirko Mancin 2013 WIRELESS SD SHIELD La shield ha un bordo interruttore con l’etichetta ‘’Serial Select’’. Determina come la comunicazione seriale del modulo WiFi si collega alla comunicazione seriale tra il microcontrollore (ATmega8 o ATmega168) e USB-seriale chip sulla scheda Arduino. Quando è nella posizione Micro, il pin DOUT del modulo wireless è connesso al pin RX del microcontrollore e DIN è collegato TX. Il modulo wireless comunicherà direttamente con il microcontrollore. Si noti che i pin RX e TX del microcontrollore sono ancora collegato ai pin TX e RX (rispettivamente) del USB-seriale convertitore. I dati inviati dal microcontrollore saranno trasmessi al computer tramite USB oltre ad essere inviati in modalità wireless dal modulo wireless. Il microcontrollore non sarà programmabile tramite USB in questa modalità.
  • 25. San Secondo Parmense – Mirko Mancin 2013 WIRELESS SD SHIELD Con l'interruttore in posizione USB, il pin DOUT del modulo wireless è connesso al pin RX del convertitore USB-seriale, e DIN sul modulo wireless è collegato al pin TX. Ciò significa che il modulo può comunicare direttamente con il computer. Il microcontrollore sulla scheda verrà bypassato. Per utilizzare la shield in questa modalità, è necessario programmare il microcontrollore con uno sketch vuoto (vedi sotto), o rimuovere il chip dalla board. Sketch vuoto: void setup() {} void loop() {}
  • 26. San Secondo Parmense – Mirko Mancin 2013 Modulo WiFly Un modulo utilizzabile con questa shield è il modulo Roving Networks WiFly RN-XV. Con questa configurazione è possibile creare un piccolo http client dal quale inviare i diversi dati al server. Il modulo wifi è già pronto all’uso (non ha bisogno di configurazioni particolari, salvo per necessità diverse). Per sfruttarne le sue potenzialità si usano le librerie WiflyHQ. Sono librerie pronte all’uso per Arduino e fornisco diversi esempi per creare una comunicazione sia HTTP che TCP/UDP.
  • 27. San Secondo Parmense – Mirko Mancin 2013 Configurazione e uso di una seriale software per interfacciarsi al dispositivo: #include <SoftwareSerial.h> SoftwareSerial wifiSerial(8,9); wifiSerial.begin(9600); wifly.begin(&wifiSerial); Collegarsi ad una rete WiFi; wifly.setSSID("mySSID"); wifly.setPassphrase("myWPApassword"); wifly.enableDHCP(); wifly.join(); Modulo WiFly
  • 28. San Secondo Parmense – Mirko Mancin 2013 Creare una rete WiFi Ad Hoc con 10 canali: wifly.createAdhocNetwork("myssid", 10); Mandare pacchetti UDP: wifly.setIpProtocol(WIFLY_PROTOCOL_UDP); wifly.sendto("Hello, world", "192.168.1.100", 2042); Aprire una connessione TCP, mandare alcuni dati, e chiudere la connessione: wifly.setIpProtocol(WIFLY_PROTOCOL_TCP); wifly.open("192.168.1.100",8042); wifly.println("Hello, world!"); wifly.close(); Ricevere dati UDP e TCP (assumendo di avere una seriale software): if (wifly.available() > 0) { Serial.write(wifly.read()); } Modulo WiFly
  • 29. San Secondo Parmense – Mirko Mancin 2013 Facile manipolazione di diverse opzioni ricevute con il metodo multiMatch_p():: if (wifly.available() > 0) { int match = wifly.multiMatch_P(100, 3, F("button"), F("slider="), F("switch=")); switch (match) { case 0: /* button */ Serial.print(F("button: pressed")); break; case 1: /* slider */ int slider = wifly.parseInt(); Serial.print(F("slider: ")); Serial.println(slider); break; case 2: /* switch */ char ch = wifly.read(); Serial.print(F("switch: ")); Serial.println(ch); break; default: /* timeout */ break; } } Modulo WiFly
  • 30. San Secondo Parmense – Mirko Mancin 2013 Limitazioni con WiFly RN-XV rev 2.32 firmware: 1. Non si può determinare l’indirizzo IP del client TCP che si è connesso. 2. Cambiare la porta locale durante l’esecuzione non influenza nulla finchè non si salva e si riavvia il dispositivo. 3. Potrebbe non funzionare la chiusura di una connessione TCP. Il client deve rimanere connesso e inviare ulteriori dati. 4. è supportata solo una connessione TCP alla volta. 5. Cambiare il timeout di svuotamento (set comm time x) non porta cambiamenti fino al riavvio del dispositvo. Modulo WiFly
  • 31. San Secondo Parmense – Mirko Mancin 2013 Questo esempio mostra come è possibile creare una piccola stazione meteo wireless con alcuni sensori di rilevazione ambientale (temperatura, umidità, CO2, luce). I dati vengono inviati ad un server con il modulo WiFly montato sopra la Wireless Shield. WIRELESS SHIELD - Esempio ->StazioneMeteoWireless
  • 32. San Secondo Parmense – Mirko Mancin 2013 La Arduino WiFi Shield collega Arduino a Internet in modalità wireless senza aver bisogno di ulteriori moduli. • Tensione di lavoro 5 V (fornita dalla scheda Arduino) • Collegamento a reti 802.11b / g • Tipi di crittografia: WEP e WPA2 personal • Collegamento con Arduino sulla porta SPI • Slot micro SD on-board • ICSP header • Collegamento FTDI per il debug seriale • Mini-USB per l'aggiornamento del firmware Il pin digitale 7 è usato per un handshake tra la shield e Arduino e quindi non si può utilizzare. Se si utilizza la shield con un Arduino prima del rev3 Uno, è necessario effettuare un ulteriore collegamento. La scheda Wi-Fi utilizza il pin IOREF sui nuovi layout pin di Arduino (Uno Rev3, Mega2560 rev3, e versioni successive) per rilevare la tensione di riferimento per i pin I / O della scheda a cui è attaccato. (link) WiFi Shield
  • 33. San Secondo Parmense – Mirko Mancin 2013 WiFi Shield Per mandare dei comandi con la porta FTDI devo collegare un apposito cavo al connettore FTDI. La comunicazione avviene a 57600bps. Quando si invia un comando bisogna terminare con un a capo (CR). Comandi supportati: scan connect <ssid> setkey <key_idx (0-3)> <key in hex> ("setkey none" will delete all WEP keys) status debug <section> <level> section: init, cm, spi, tcp , util, warn level : 0 (off), 1 (on), 2 (verbose) ttcp -t/-r [-options] host -l length of bufs written to network (default 1024) -n number of bufs written to network (default 1024) -p port number to send to (default 2000) -u udp -v verbose wpass <ssid> <passphrase> (set passphrase associated to ssid) dpass <ssid> (delete passphrase associated to ssid)
  • 34. San Secondo Parmense – Mirko Mancin 2013 WiFi Shield Per utilizzare la shield faremo riferimento alla libreria WiFi. #include <WiFi.h> char ssid[] = "yourNetwork"; // your network SSID (name) char pass[] = "12345678"; // your network password int status = WL_IDLE_STATUS; // the Wifi radio's status void setup() { // initialize serial: Serial.begin(9600); // attempt to connect using WPA2 encryption: Serial.println("Attempting to connect to WPA network..."); status = WiFi.begin(ssid, pass); // if you're not connected, stop here: if ( status != WL_CONNECTED) { Serial.println("Couldn't get a wifi connection"); while(true); } // if you are connected, print out info about the connection: else { Serial.println("Connected to network"); } }
  • 35. San Secondo Parmense – Mirko Mancin 2013 WiFi Shield - Esempi Esempio di modello client/server con due Arduino con WiFi shield. Unica differenza rispetto alla classe Ethernet è che non posso assegnare un indirizzo IP fisso al server e quindi sono vincolato tutte le volte a sapere l’indirizzo del server e riprogrammare l’Arduino Client. ->WiFiShield->WiFiServer ->WiFiShield->WiFiClient
  • 36. San Secondo Parmense – Mirko Mancin 2013 I moduli XBee sono una vera manna dal cielo per chi adora lavorare con i microcontrollori ed il pc. Tali moduli, davvero molto piccoli e con prezzi abbordabili, per poter comunicare tra loro utilizzano le specifiche ZigBee e operano in Italia sulla frequenza di 2,4GHz. Tale specifica prevede che i dispositivi che la utilizzano siano a basso consumo e quindi per contro non abbiano transfer rate elevati. In rete si possono trovare tutte le informazioni che si vogliono su tale protocollo di comunicazione: Wikipedia – Zigbee Zigbee.org ZIGBEE
  • 37. San Secondo Parmense – Mirko Mancin 2013 I Moduli XBee, quindi, sfruttano il protocollo ZigBee ed implementano una comunicazione seriale come quella presente sulla porta RS232 del pc (ovviamente con diversi livelli di tensione). Esistono vari tipi di moduli ZigBee e ogni tipo di modulo può essere richiesto con un particolare tipo di antenna: cambiano le caratteristiche, le potenze in gioco ecc. Alcuni tipi di moduli, anche se diversi, possono comunicare tra loro. L’utilizzo degli XBee, poi, è davvero semplice: la codifica/decodifica di trasmissione è già eseguita via hardware; noi non dovremo fare assolutamente nulla se non fornire il dato seriale da trasmettere via usart. ZIGBEE
  • 38. San Secondo Parmense – Mirko Mancin 2013 Al primo utilizzo con un modulo XBee dovremo scontrarci con le prime due “difficoltà”: • I Moduli XBee hanno una piedinatura con passo da 2mm, più piccola della classica da 2,54mm alla quale siamo abituati normalmente. • I Moduli XBee funzionano a 3,3Volts, per cui anche i livelli logici vanno di pari passo. Questi due piccoli-grandi ostacoli possono essere aggirati molto facilmente dal momento che esistono apposite schede di adattamento in commercio. Esistono degli adattatori, che ci permettono di utilizzare tali moduli senza fare fatica e addirittura su una basetta breadboard! XBEE – Come utilizzarli
  • 39. San Secondo Parmense – Mirko Mancin 2013 Ovviamente esistono anche delle shield apposta da utilizzare con Arduino. Oltre alla Wireless Shield, esiste anche la Xbee shield che permette di utilizzare tali moduli senza aver bisogno di una breadboard. Questa shield accetta i vari tipi di moduli XBee mantenendo dimensioni molto contenute (può essere montato tranquillamente sopra una scheda Arduino UNO). XBEE – Come utilizzarli Ovviamente non si tratta di una “semplice” scheda di adattamento: ha a bordo i condensatori e il regolatore di tensione a 3,3V (accetta una tensione in ingresso fino a 18Volts sul pin denominato Vin), led per monitorare la comunicazione e pin per interfacciarsi con Arduino.
  • 40. San Secondo Parmense – Mirko Mancin 2013 SERIE 1 Serie 1 (Xbee 802.15.4 OEM Low Power RF Modules) Serie 1 PRO (Xbee-PRO 802.15.4 OEM Extended Range RF Modules) Serie 1 Digimesh (Xbee Digimesh Low Power RF Modules) Serie 1 PRO Digimesh (Xbee-PRO Digimesh Extended Range RF Modules) SERIE 2 Serie 2 (Xbee ZB ZigBee Low Power RF Modules) Serie 2B PRO (Xbee-PRO ZB S2B ZigBee Extended Range RF Modules) Serie 2B PRO Programmabile (Programmable Xbee-PRO ZB S2B ZigBee Extended Range RF Modules) XBEE – I modelli Entrambe le versioni montano tre tipi di antenne: • A chip • A filo • Con connettore U.FL
  • 41. San Secondo Parmense – Mirko Mancin 2013 Questa denominazione non è indicativa delle varie famiglie di XBee ma è piuttosto un riferimento all’hardware montato a bordo che permette loro di funzionare in un modo piuttosto che in un altro. N.B. Gli Xbee Serie 2 non sono ‘’migliori’’ di quelli di Serie 1. Sono due tipologie di moduli che operano su tecnologie differenti. XBEE – Serie
  • 42. San Secondo Parmense – Mirko Mancin 2013 Nei casi in cui si desidera realizzare una comunicazione point-to-point (ovvero devono comunicare tra loro soltanto due dispositivi) è sicuramente conveniente scegliere i moduli appartenenti alla famiglia XBee 802.15.4 OEM RF modules (ovvero la Serie 1). XBEE – Serie 1
  • 43. San Secondo Parmense – Mirko Mancin 2013 Per una comunicazione punto punto possono andar bene anche gli XBee serie 2 ma sono più difficili da utilizzare in quanto andrebbero opportunamente configurati dato che di serie sono impostati per lavorare in una rete Mesh secondo il protocollo Zigbee. XBEE – Serie 2 (per ulteriori chiarimenti rimando alla guida)
  • 44. San Secondo Parmense – Mirko Mancin 2013 Ovviamente esistono anche delle shield apposta da utilizzare con Arduino. Oltre alla Wireless Shield, è presente anche la Xbee shield che permette di utilizzare tali moduli senza aver bisogno di una breadboard. Questa shield accetta i vari tipi di moduli XBee mantenendo dimensioni molto contenute (può essere montato tranquillamente sopra una scheda Arduino UNO). XBEE – Come utilizzarli Ovviamente non si tratta di una “semplice” scheda di adattamento: ha a bordo i condensatori e il regolatore di tensione a 3,3V (accetta una tensione in ingresso fino a 18Volts sul pin denominato Vin), led per monitorare la comunicazione e pin per interfacciarsi con Arduino.
  • 45. San Secondo Parmense – Mirko Mancin 2013 1. Ogni Xbee deve essere configurato attraverso l’apposito software X-CTU via USB. Fortunatamente i moduli serie 1 sono già autoconfigurati per comunicare tra loro ad un baud rate di 9600bps in modalità trasparente. (link1)(link2) 2. Caricare un semplice sketch di prova su Arduino (senza modulo Xbee installato sopra) per la comunicazione. Il trasmittente userà l’istruzione Serial.print() mentre il ricevitore userà l’istruzione Serial.read(). 3. Mettere il modulo sopra Arduino con i pin in modalità “Xbee”. XBEE - Configurazione Per approfondire
  • 46. San Secondo Parmense – Mirko Mancin 2013 XBEE – Hello Xbee void setup(){ Serial.begin(19200); } void loop(){ Serial.println('a'); delay(1000); Serial.println('b'); delay(1000); } // LED connected to digital pin 13 int ledPin = 13; int val = 'a'; void setup(){ // sets the digital pin as output pinMode(ledPin, OUTPUT); Serial.begin(19200); } void loop(){ val = Serial.read(); if (val=='a'){digitalWrite(13,LOW);} if (val=='b'){digitalWrite(13,HIGH);} } TRASMETTITORE RICEVITORE
  • 47. San Secondo Parmense – Mirko Mancin 2013 La modalità comandi è quella normalmente utilizzata da XCTU per comunicare con il modulo XBee e permette di inviare comandi AT (lo standard utilizzato per tutti i modem). Per entrare in modalità comandi, di default basta rispettare 3 semplici regole: • Attendere almeno un secondo dall’ultimo dato ricevuto • Inviare al modulo la stringa +++ (senza ritorno a capo!) • Attendere un secondo Il modulo deve rispondere con “OK”. Il secondo da attendere sia prima che dopo è definito dal parametro GT – Guard Times, di default impostato al valore 0x03E8 (1000 in decimale), mentre il carattere da inviare per 3 volte per entrare in modalità comandi è definito dal parametro CC – Command Sequence Character, impostato di default al valore 0x2B (codice ascii del +). (Lista comandi) XBEE – AT Comands
  • 48. San Secondo Parmense – Mirko Mancin 2013 I moduli Xbee possono essere utilizzati anche in modalità API. Arduino mette a disposizione una libreria per comunicare con i moduli in tale modalità. La libreria supporta sia i moduli Serie 1 (802.15.4) che Serie 2 (ZB Pro / ZNet). Questa libreria Include il supporto per la maggior parte dei tipi di pacchetti, tra cui: TX / RX, comando AT, remoto AT, I / O Campioni e lo stato del modem. XBEE Library Nota: Questo software richiede modalità API, impostando AP = 2. Se si utilizza Series 2 XBee, è necessario installare firmware API (che spediscono con AT firmware), quindi impostare AP = 2. Questo software non funziona correttamente con AP = 1. Fare riferimento a XBeeConfiguration e WhyApiMode per maggiori informazioni.
  • 49. San Secondo Parmense – Mirko Mancin 2013 La modalità API (Application Programming Interface) è un’alternativa alla modalità trasparente che consente, oltre che trasmettere e ricevere dati, di interagire ad un livello più basso con i moduli XBee consentendo, tra le altre cose, di: • Cambiare i parametri di configurazione (inviare comandi AT) senza entrare in • modalità comandi • Conoscere l’ RSSI (Received Signal Strength Indicator – Indicatore di forza del • segnale ricevuto) • Ricevere una conferma di pacchetto dati consegnato correttamente per ogni • pacchetto trasmesso o un’indicazione di consegna fallita • Trasmettere dati a più destinatari • Identificare l’indirizzo di chi ha trasmesso il pacchetto dati XBEE – API Si capisce quindi perché la modalità trasparente abbia tale nome: i dati vengono inviati sulla seriale tali e quali, in modalità API invece i dati vengono interpretati. La modalità trasparente viene impostata, tramite XCTU, agendo sul parametro AP – API Enable. Il valore 0 identifica la modalità trasparente (API Disabled).
  • 50. San Secondo Parmense – Mirko Mancin 2013 Il modo più semplice per comunicare con i moduli XBee è in modalità punto a punto. Ciò significa che un modulo comunica direttamente con un altro modulo. I dati seriali inviati da un XBee, si trasmettono in modalità wireless, all'altro e viceversa. Un esempio potrebbe essere quello di mandare via wireless i valori letti da un potenziometro e l’altro modulo, ricevendo i dati, modifica la posizione di un servo motore. XBEE – Esempio ->PotToMotor
  • 51. San Secondo Parmense – Mirko Mancin 2013 Monitoraggio della presenza di persone all’interno di un ambiente. Comunicano tra di loro con i moduli XBee e inviano i dati al server attraverso la porta Ethernet. XBEE – Esempio ->XbeeAdvanced
  • 52. San Secondo Parmense – Mirko Mancin 2013 1. Con Processing creare 4 bottoni: Su - Giu - Dx - Sx Con Arduino ricevere via seriale i valori dei bottoni premuti e inviarli ad un modulo Xbee che si preoccuperà di far accendere 4 led che simulano la pressione dei tasti 2. Pseudo-Controller per automobile radiocomandata 3. Integrare i due esercizi precedenti XBEE – Esercizio
  • 53. San Secondo Parmense – Mirko Mancin 2013 RIFERIMENTI www.mancio90.it mirkomancin90@gmail.com