DII - Dipartimento di Ingegneria dell’Informazione Corso di Comunicazioni Wireless Arduino Board-IDE-Shield Samuele Gasparrini – [email protected] Laura Montanini – [email protected] Schema lezione Introduzione Board Arduino Uno Ver.3 Arduino Ethernet Arduino POE Galileo Ambiente di sviluppo IDE Panoramica sull’IDE Elementi principali Serial Monitor Esempi Schema lezione Shield GSM-GPRS GPS NFC Cos’è Arduino? Arduino is an open-source electronics prototyping platform based on flexible, easy-touse hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments. http://arduino.cc/ Cos’è Arduino? Le caratteristiche che contraddistinguono il progetto sono: Multipiattaforma: Mac OS X o superiore Windows XP o superiore32/64-bit Linux 32/64-bit (Ubuntu o simili) IDE integrated development environment (IDE) semplice Programmabile tramite cavo usb Software e hardware open source Es. Fritzing Cos’è Arduino? Le caratteristiche che contraddistinguono il progetto sono: Il costo totale della board è 20€ Comunità di utente molto grande Ideale per i progetti che abbiamo pensato Arduino Uno Ver.3 http://arduino.cc/en/Main/ArduinoBoardUno 5V tensione di lavoro Basato su ATmega328: (CPU, RAM, memoria flash, pin di input/output) 14 pin di input/output digitali (6 abilitati per PWM) 6 input analogici Connettore USB Power jack Pin AREF riservato per una tensione di riferimento 32 KB di spazio di memoria (0.5KB per bootloader) 16 MHz di Clock Arduino Uno Ver.3 Pin di Alimentazione: Vin: pin per di ingresso per alimentazione alternativa 5V: fornisce 5V in uscita 3.3V: fornisce 3.3V in uscita GND: Ground IOREF: Fornisce la tensione di lavoro della board RESET: permette di realizzare un segnale di reset esterno Pin di input/Output: Possono essere usati sia per input che output 0-1: trasmissione seriale 2-3: pin di interrupt PWM(3, 5, 6, 9, 10,11): realizzano un’uscita PWM SPI: 10,11,12,13: comunicazione SPI 13: pin connesso al led Arduino Uno Ver.3 Pin analogici: risoluzione a 10 bit su 1024 livelli (0-5V) Tramite il pin AREF è possibile cambiare il riferimento superiore A4,A5: pin per la comunicazione I2C(A4 =SDA ,A5=SCL) SPI (Serial Peripheral Interface) ICSP(In Circuit Serial Programming):Utilizzato per comunicazione tra board e altri device/shield SPI: 10(SS),11(MOSI),12(MISO),13(SCK): comunicazione SPI Arduino Uno Ver.3 Led: ON: led di alimentazione L: generico, connesso al pin 13 Tx-Rx: utilizzati come feedback per capire rispettivamente quando vengono inviate/ricevute delle informazione verso/da pc Oscillatore: Permette di generare una frequenza di 16 MHz ATMega16U2: Microcontrollore programmato come convertitore USB-serial Regolatore di tensione: In uscita fornisce i 5V di tensione utilizzati dalla board Arduino Ethernet http://arduino.cc/en/Main/ArduinoBoardEthernet Quasi identica ad Arduino Uno Connettore RJ45 Pin 10,11,12,13 riservati alla comunicazione Ethernet Interfaccia Wiznet Ethernet per la connessione con PC Lettore di card SD Pin 4 usato per la connessione SPI (SS)con la SD card Led connesso al pin 9 6 pin per la programmazione tramite adattatore USB Serial Light Arduino POE http://arduino.cc/en/Main/ArduinoBoardEthernet Molto simile ad Arduino Ethernet Presente il modulo POE(Power over Ethernet) Lettore di card SD La scheda è alimentabile tramite: connettore di alimentazione modulo POE connettore FTDI cable/USB Serial Galileo http://arduino.cc/en/ArduinoCertified/IntelGalileo https://communities.intel.com/community/makers/documentation/galileodocuments Galileo http://arduino.cc/en/ArduinoCertified/IntelGalileo Intel® Quark SoC X1000(architettura Intel a 32 bit a 400MHz per wearable devices) Compatibile a livello software(90%) e hardware(100%) con Arduino IDE quasi identico a quello di Arduino I/O pin alimentabili a 3.3-5V mini-PCI Express slot 100Mb Ethernet port Slot micro-SD(max 32GB) RS-232 serial port USB Host port, USB Client port Galileo http://arduino.cc/en/ArduinoCertified/IntelGalileo Kernel Linux Per rendere lo sketch permanente è necessario utilizzare una memoria SD: https://communities.intel.com/docs/DOC-22204 UART per la comunicazione seriale sui pin 0(Tx) e 1(Rx) Anche la porta USB Device permette la comunicazione seriale (…serial Monitor) 258-512KB dedicati allo sketch( Arduino è di solo 8 KB!!) Arduino IDE 1.0.5 r2 Procedure di istallazione dell’IDE Per Galileo seguire la guida in: https://communities.intel.com/docs/DOC-22204 Utilizzare il cavo tipo A/B Scaricare e istallare l’ambiente di sviluppo IDE Arduino 1.0.5 dal link: http://arduino.cc/en/Main/Software Arduino IDE 1.0.5 r2 Procedure di istallazione dell’IDE Connettere adesso la board al pc e verificare che il pin PWR sia acceso Attendere che la procedura di istallazione dei driver termini Nel caso in cui fosse necessario indicare il percorso dei driver scaricati(arduino.inf) Al termine il device sarà presente all’interno dispositivi Aprire l’IDE e provare ad eseguire lo sketch: File > Examples > 1.Basics > Blink Arduino IDE 1.0.5 r2 Integrated development environment(IDE): Command Area menu Icone principali Editor Area dei messaggi Arduino IDE 1.0.5 r2 Caratteristiche fondamentali Command Area: nome del programma(Sketch) e versione IDE Barra del menu Pulsanti principali: Verifica, Carica, Nuovo, Apri, Salva, Monitor Serale Editor: Arduino IDE 1.0.5 r2 Caratteristiche fondamentali Area dei messaggi: Permette di visualizzare errori di compilazione Indica la riga di codice in cui si è presentato l’errore Indica la porta a cui è connesso Arduino Arduino IDE 1.0.5 r2 Linguaggio di programmazione Il linguaggio utilizzato è derivato dal Processing ma con alcune differenze www.processing.org Basato su Java, permette quindi l’utilizzo di classi e relativi oggetti Di seguito verranno descritti: gli elementi principali di un programma(Sketch) le componenti fondamentali del linguaggio di programmazione utilizzato La struttura fondamentale del programma è: // the setup routine runs once when you press reset: void setup() { // ... } // the loop routine runs over and over again forever: void loop() { // ... } Arduino IDE 1.0.5 r2 Linguaggio di programmazione La funzione setup viene eseguita una sola volta permette di dichiarare/settare le variabili utilizzate nel programma // the setup routine runs once when you press reset: void setup() { // ... } La funzione loop: è eseguita ripetutamente finché non viene tolta l’alimentazione alla board rappresenta la parte fondamentale del programma // the loop routine runs over and over again forever: void loop() { // ... } Arduino IDE 1.0.5 r2 Funzioni Le funzioni loop e setup sono a tutti gli effetti delle funzioni: // Function example type functionName(parameters) { // ... } Gli elementi fondamentali sono: Tipo della variabile ritornata type Nome della funzione functionName Parametri in ingresso parameters Codice all’interno delle parentesi graffe Arduino IDE 1.0.5 r2 Parentesi {} Vengono utilizzate per racchiudere in un blocco unico una serie di istruzioni sono state usate per le funzioni loop e setup possono essere utilizzate dopo istruzioni condizionali (es.: if) { // ... } Commenti Esistono due versioni: inserire un commento in una singola riga // primo tipo inserire un commento in più righe /* secondo tipo*/ Arduino IDE 1.0.5 r2 Costanti L’IDE ha dei valori predefiniti, come ad esempio: TRUE //0 FALSE //1 HIGH //livello del pin alto LOW //livello del pin basso digitalWrite(13, HIGH); INPUT //definisce la modalità di un pin OUTPUT pinMode(13, OUTPUT); Variabili Servono per memorizzare informazioni all’interno della memoria(RAM) Usare un nome appropriato(evitare var1, var2, ecc..) A differenza della costanti il dato salvato è modificabile durante il programma int tensione = 4; boolean messaggio = TRUE; le variabili non devono avere lo stesso nome di altre keyword già utilizzate da Arduino int Serial = 4; Arduino IDE 1.0.5 r2 Variabili Tutte le variabili devono essere dichiarate prima di essere utilizzate tensione = 4; //utilizzo senza dichiarazione ... int tensione = 4; //dichiarazione tensione = 4; //utilizzo Visibilità delle variabili Una variabile può essere dichiarata: Prima della funzione setup int tensione = 4; //globale void setup() { // ... } Localizzata all’interno di una funzione Arduino IDE 1.0.5 r2 Visibilità delle variabili Localizzata all’interno di una funzione void funzione1() { int tensione = 4; //locale // ... } Dentro un blocco di codice(es.: esempio un for, if, ecc…) for(int i = 1;i<10;i++) { int tensione = 4; //locale } Tipo di dato Una lista dettaglia è presente al riferimento: http://arduino.cc/en/Reference/HomePage Arduino IDE 1.0.5 r2 Tipo di dato boolean memorizza uno tra i due possibili valori TRUE o FALSE, occupa 8 bit byte memorizza valori interi in 8 bit(1 byte) con intervallo [0 255] char dimensione di 8bit(1 byte) memorizzata come numero tramite la codifica ASCII, intervallo[-128 127] char lettera = 'A';//A = 65; int memorizza valori interi in 16 bit(2 byte) con intervallo [-32768 32767] ATTENZIONE all’overflow : x = 32768, x = x+1!!! unsigned int sempre 16 bit(2 byte) ma solo per interi positivi 0 [0 65535] long memorizza valori interi in 32 bit con intervallo [-2147483648 2147483647] In Arduino è possibile utilizzare il casting: long tensione = 2147483647 int tensioneInt = (int)tensione; Arduino IDE 1.0.5 r2 Tipo di dato unsigned long versione senza segno dei long [0 4,294,967,295] float memorizza valori decimali in 32 bit con intervallo [-3.4028E+38 3.4028E+38] double 1.7976931348623157x10^308 array collezione ordinata di valori accessibili tramite un indice. La numerazione parte da 0 int myArray = {1, 2, 3, 5}; int myArray[4] string array di tipo char terminato con il carattere null('\0') string Str[] = "Arduino"; Allo stesso tempo è possibile utilizzare la classe String: String Str = "Arduino"; Arduino IDE 1.0.5 r2 Tipo di dato Struct permette di creare delle variabili che al loro interno sono composte da membri di tipo differenti: typedef struct Struttura { String Str; int num; }; typedef struct GPRMCData Record; Arduino IDE 1.0.5 r2 Operatori aritmetici Somma: + Sottrazione: Moltiplicazione: * Divisione: / Operatori di confronto x x x x x x == y != y < y > y <= y >= y //pari a //diverso //minore //maggiore //minore uguale //maggiore uguale Arduino IDE 1.0.5 r2 Strutture di controllo If-else Viene valutato condizione, in caso di soluzione TRUE viene eseguita la prima parte. Altrimenti la seconda if(condizione) { //prima parte; } else { //Seconda parte; } for Viene ripetuto il codice per un numero volte definito for(int i = 1;i<10;i++) { //codice } Arduino IDE 1.0.5 r2 Strutture di controllo while Si esegue il codice finché la condizione è TRUE while(condizione) { //Codice; } Operatori booleani Utilizzati quando si vogliono combinare istruzioni condizionali multiple && //AND || //OR ! //NOT if ((sensor => 5) && (sensor <=10)) Arduino IDE 1.0.5 r2 Funzioni predefinite pinMode(pin, mode) Utilizzata all’interno della funzione setup() per configurare un pin come input o output Di default i pin digitali sono impostati a input, cioè ad alta impedenza. Per evitare che il pin quando lasciato floating, generi informazioni random è consigliato inserire una resistenza di pull up. pinMode(pin, OUTPUT) I pin configurati come output sono a bassa impedenza, in questo modo è possibile fornire una corrente di 20mA ai device connessi. digitalRead(pin) Legge il livello(HIGH-LOW) di uno specifico pin digitale(0-13) value = digitalRead(13); digitalWrite(pin, mode) Impostare il livello di uscita di un pin(0-13) ad HIGH o LOW digitalWrite(13, HIGH) Arduino IDE 1.0.5 r2 Funzioni predefinite analogRead(pin) Viene letto il valore di un pin analogico(0-5) con una risoluzione di 10 bit. Il risultato è compreso nel range [0 1023] value = analogRead(A2) Diversamente dai pin digitali, quelli analogici non hanno bisogno di essere dichiarati come INPUT-OUTPUT analogRead(pin) Vs digitalRead(pin) Arduino IDE 1.0.5 r2 Funzioni predefinite analogWrite(pin,value) Arduino IDE 1.0.5 r2 Funzioni predefinite Delay(ms) Ferma il programma per una quantità di tempo pari al valore in ms millis() Ritorna l’intervallo di tempo in ms a partire dall’avvio del programma min(x,y) Calcola il minimo tra due valori dello stesso tipo e torna quello più piccolo max(x,y) Equivalente a sopra ma torna il massimo abs(x) restituisce il valore assoluto della variabile x Serial Monitor Principali funzionalità Tramite il monitor seriale è possibile ricevere a pc le informazioni memorizzate all’interno della board oppure inviare comandi(Es. Accensione/spegnimento LED) Serial.begin(rate) Apre una porta seriale con baud rate pari a rate. Prepara quindi Arduino all’invio e alla ricezione di possibili informazioni da e verso il PC Quando viene utilizzata la comunicazione seriale, i pin RX e TX sono riservati a questa funzione Serial.print(data) Stampa sulla porta seriale la quantità data. Serial.println(data):Applica in automatico il ritorno di carrello void setup() { Serial.begin(9600); } void loop() { Serial.println("ciao"); //delay(200); } Serial Monitor Principali funzionalità Può essere utilizzato anche per finalità di debug int stato = 3; void setup() { Serial.begin(9600); } void loop() { if(stato == 1) Serial.println("stato 1"); else if(stato == 2) Serial.println("stato 2"); else Serial.println("stato 3"); delay(200); } Serial Monitor Principali funzionalità Inviare comandi alla board //Send command to Arduino int incomingByte = 0; void setup() { Serial.begin(9600); } void loop() { // send data only when you receive data: if (Serial.available() > 0) { // read the incoming byte: incomingByte = Serial.read(); // say what you got: Serial.print("ricevuto: "); Serial.print(incomingByte, DEC); Serial.print(" Carattere: "); Serial.println((char)incomingByte); if(incomingByte == '3') Serial.println("ricevuto 3"); } } Serial Monitor Principali funzionalità Ricevuto 13 Carattere ?vuoto? Esempio 1 Accensione LED Controllare l’accensione di un LED tramite Arduino Materiale necessario: LED Arduino Resistenza 220 Ω Cavi cavo tipo A/B Breadboard ?? Esempio 1 Accensione LED Controllare l’accensione di un LED tramite Arduino LED Arduino Resistenza 220 Ω Cavi cavo tipo A/B Breadboard Esempio 1 Accensione LED Controllare l’accensione di un LED tramite Arduino //Switch on a LED connected to Digital Pin 8 via a 220 Ohm resitors. void setup() { pinMode(8, OUTPUT); // Initialize Arduino Digital Pin 8 as output } void loop() { digitalWrite(8, HIGH); // Switch On LED } Esempio 2 Blinking del LED Spegnere e accendere il LED Stesso circuito elettrico di prima ma sketch differente //Blink a LED connected to Digital Pin 8 via a 220 Ohm resitors. void setup() { pinMode(8, OUTPUT); //Initialize Arduino Digital Pin 8 as output } void loop() { digitalWrite(8, HIGH); // Switch On LED delay(500); // Wait for half a second digitalWrite(8, LOW); // Switch Off LED delay(500); // Wait for half a second } Esempio 3 Controllo del blinking LED Controllare il tempo di accensione e spegnimento del LED tramite un potenziometro LED Potenziometro Arduino Resistenza 220 Ω Cavi cavo tipo A/B Breadboard Esempio 3 Controllo del blinking LED Controllare il tempo di accensione e spegnimento del LED tramite un potenziometro //Varying the Blinking time of the LED using a Pot int value=0; int mval; void setup() { Serial.begin(9600); //pinMode(5, OUTPUT); pinMode(8, OUTPUT); // Initialize Arduino Digital Pin 8 as output } void loop() { value=analogRead(A1); //read analog value from input A1 //delay output given to the LED mval = map(value, 0, 1023, 100, 1000); Serial.println(value); digitalWrite(8, HIGH); // Switch On LED delay(mval); digitalWrite(8, LOW); // Switch Off LED delay(mval); //analogWrite(5,mval); } Riferimenti Link: http://arduino.cc/en/Reference/HomePage Libri: Arduino Workshop Getting Started with Arduino Arduino Programming Notebook Shield Sono PCB collegabili ad Arduino tramite i pin di I/O Permettono di aggiungere features al sistema Shield Link ufficiale: http://store.arduino.cc/index.php?main_page=index&cPath=5&language=it shieldlist.org Circa 300 shield!!! GSM-GPRS Seed Studio GSM-GPRS shield V.2 http://www.seeedstudio.com/wiki/GPRS_Shield_V2.0 Compatibile con Arduino Uno, Ethernet, POE e Galileo Interfaccia di comunicazione selezionabile tra: hardware serial e software serial Quad band: 850/900/1800/1900MHz Supporta il protocollo TCP/UDP Modulo controllabile tramite comandi AT: Standard - GSM 07.07 & 07.05 e Enhanced SIMCOM AT Commands Alloggio per la SIM GSM-GPRS Interfaccia di comunicazione selezionabile Hardware serial È possibile comunicare con il modulo tramite un’interfaccia seriale sui pin 0 e 1 19200 bps 8-N-1 Il serial Monitor però non è più utilizzabile con Arduino(mentre con Galileo…) Software serial In alternativa è possibile utilizzare la libreria Software Serial(solo per Arduino…) #include <SoftwareSerial.h> SoftwareSerial GPRS(7, 8); http://arduino.cc/en/Reference/SoftwareSerial La libreria permette di utilizzare due pin digitali per realizzare una comunicazione seriale La board si aspetta di inviare/ricevere le informazioni sui pin 7-8 GSM-GPRS Comando AT(attention): AT + command Sono delle sequenze da inviare al modulo per richiedere delle informazioni Tutto ok? Tx: AT\r Rx: OK Leggere sms N.1 in memoria Tx: AT+CMGR=1\r Rx: +CMGR: "REC READ","+39338999****","","14/03/25,09:19:18+04" CIAO CIAO OK GSM-GPRS Comando AT(attention): Inviare un sms (non utilizzare il terminale di Arduino, alternative: PuTTY-Docklight) Tx: AT+CMGF=1\r entra in modalità testo Rx: OK Tx: AT + CMGS = "+39340490****" Rx: OK > È possibile scrivere il messaggio > Prova mess \r Per una lista completa di comandi AT si veda: http://seeedstudio.com/wiki/images/a/a8/SIM900_AT_Command_Manual_V1.03.pdf Ricevere/effettuare una chiamata Ottenere i parametri di cella GPS Global Positioning System ITEAD GPS SHIELD Basato sul modulo GPS NEO-6M GPS I dati possono essere salvati all’interno della SD utilizzando la libreria SD.h Antenna esterna Comunicazione seriale UART(Tx-Rx) su due dei possibili pin digitali GPS Global Positioning System ITEAD GPS SHIELD Non sono necessari comandi AT Stringa di informazione inviata ad Arduino ogni 1s $GPRMC,220516,A,4916.45,N,12311.12,W,173.8,231.8,130694,004.2,W*70 $: carattere di inizio stringa GPRMC: identificativo del stringa(GP - GPS) GP: GP=GPS mentre GL=Glonass RMC: Recommended minimum specific GPS/Transit data (altri: GSV - GGA) Time 220516: tempo di arrivo 22h 05min 16sec (UTC: Coordinated Universal Time) Quality A: qualità del segnale A=valido V = warning Lat 4916.45 N: latitudine 49° 16.45’ Nord Long 12311.12 W: longitudine 123° 11.12’ Ovest Speed 173.8 : velocità in Nodi Date 130694: data in cui viene ricevuto il messaggio ddmmyy (d=giorni, m=mesi, y=anni) Direction 231.8 : direzione di movimento in gradi Variation 004.2W: Variazione rispetto al Nord magnetico OperMode *70: checksum Non sempre le stringhe sono corrette/complete NFC Near Field Communication Perché NFC?: Procedura di configurazione della comunicazione semplificata Sicurezza della comunicazione Definizioni: TAG NFC(passivo): memoria + antenna Reader \Writer NFC(attivo) RFID Vs NFC NFC sotto famiglia della tecnologia RFID Una comunicazione NFC è bidirezionale Condividono la stessa frequenza di lavoro: 13.56MHz (HF RFID) NFC reader e tag devono essere molto vicini tra loro(pochi cm) NFC Near Field Communication TAG NFC NXP MIFARE Ultralight (Tag Tipo 2) http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf Basati sullo standard ISO-14443A Accesso in lettura/scrittura con la possibilità di configurare il tag come read-only Velocità di trasmissione 106kbps Memoria di tipo EEPROM divisa in 16 settori da 4 byte ciascuno (TOT di 512 bit) Posizione Numero di byte Decimale Esadecimale 0 1 2 3 0 0x00 Serial number(R) 1 0x01 Serial number(R) 2 0x02 Serial number(R) Internal(R) Lock bytes(WORM) Lock bytes(WORM) 3 0x03 OTP(WORM) OTP(WORM) OTP(WORM) OTP(WORM) Da 4 a 15 Da 0x04 a 0x0F Memoria utente(RW) NFC Near Field Communication Reader \Writer NFC Adafruit PN532 NFC/RFID https://www.adafruit.com/products/789 Per comunicare con la board è necessario utilizzare una libreria specifica: https://github.com/adafruit/Adafruit_NFCShield_I2C Comunicazione I2C tramite i pin A4-A5 Autenticazione non richiesta Arduino Due http://arduino.cc/en/Main/ArduinoBoardDue 3,3V tensione di lavoro Basato su AT91SAM3X8E (microcontrollore a 32 bit che integra un core ARM Cortex-M3) 84 MHz di Clock 54 pin di input/output digitali (12 abilitati per PWM) 12 input analogici 2 output analogici (DAC) Con l’arrivo di Arduino DUE è anche stato rilasciato l’IDE 1.5.0 che contiene tutta la parte relativa alla compilazione del codice per ARM Arduino Due http://arduino.cc/en/Main/ArduinoBoardDue 2 porte micro USB: “Programming port” e “Native port” Pulsante “Erase” per cancellare il contenuto della Flash Power jack 512 KB di spazio di memoria (per il programma) 96 kB memoria SRAM (per le variabili del programma) Wi-fi • http://arduino.cc/en/Main/ArduinoWiFiShield • Tensione operativa 5V (fornita dall'Arduino) • Connessione : 802.11b/g networks • Antenna integrata • Crittografia: WEP e WPA2 Personal • on-board micro SD slot Wi-fi • Connessione con Arduino tramite il bus SPI (attraverso il connettore ICSP) • Micro-USB per aggiornamento firmware WiFi • Usa il pin IOREF presente nelle schede più recenti (Uno rev3, Mega2560 rev3, ecc.) • Se si usa su schede più vecchie è necessario collegare il pin IOREF a 5V o 3,3 V tramite un jumper Wi-fi • • • • Insieme allo shield, Arduino fornisce una libreria che permette alla board di connettersi ad internet: Wi-Fi library http://arduino.cc/en/Reference/WiFi La libreria Wi-Fi è simile alla libreria Ethernet La scheda può essere usata sia come client sia come server • Il lettore di schede SD è accessibile tramite la libreria SD (http://arduino.cc/en/Reference/SD) Il protocollo http • Che cos’è l’http? • L'HyperText Transfer Protocol è usato come sistema per la trasmissione d'informazioni fra client e server attraverso una connessione IP • Le specifiche del protocollo sono gestite dal World Wide Web Consortium (W3C) • Un server HTTP generalmente resta in ascolto delle richieste dei client sulla porta 80 Il protocollo http • Quando viene fatta una richiesta tramite http, il server individua un file nel proprio file system basato sull'URL richiesto • Questo file può essere un file regolare o un programma • Nel secondo caso il server esegue il programma e, a seconda della sua configurazione, spedisce l’output sottoforma di stringa o di pagina web Il messaggio di richiesta • Il messaggio di richiesta è composto di tre parti: – riga di richiesta (request line); – sezione header (informazioni aggiuntive); – body (corpo del messaggio). • • • • • La riga di richiesta è composta da metodo, URI e versione del protocollo Il metodo di richiesta può essere uno dei seguenti: GET, POST, HEAD, DELETE, CONNECT, … I metodi HTTP più comuni sono GET e POST Il metodo GET è usato per ottenere il contenuto della risorsa indicata come URI Il metodo POST è usato di norma per inviare informazioni al server (ad esempio i dati di un form) Il messaggio di risposta • • • • Il messaggio di risposta è di tipo testuale ed è composto da tre parti: riga di stato (status-line), codice a tre cifre che descrive l’esito della richiesta. Ad esempio: 200 OK. Il server ha fornito correttamente il contenuto 404 Not Found. La risorsa richiesta non è stata trovata e non se ne conosce l'ubicazione sezione header, i più comuni sono: Server. Indica il tipo e la versione del server Content-Type. Indica il tipo di contenuto restituito body (contenuto della risposta) Query string • Quando una risorsa viene richiesta tramite URI è possibile utilizzare una query string • La query string è parte dell'URL che è stato passato al programma • Il suo utilizzo permette ai dati di essere passati dal client HTTP (spesso un browser) al programma lato server • Tipica struttura di una stringa http contenente una query string: http://server/path/program?query_string Query string • La sintassi delle query string non è formalmente definita • Generalmente si usa questa sintassi: parametro1=valore1¶metro2=valore2¶ metro3=valore3 • A ciascun parametro viene assegnato un valore utilizzando il separatore "=" • I vari parametri sono intervallati dal simbolo "&" Il linguaggio PHP • PHP (PHP: Hypertext Preprocessor) è un linguaggio di programmazione interpretato • Originariamente è stato concepito per la programmazione di pagine web dinamiche • L'interprete PHP è un software libero • Attualmente è principalmente utilizzato per sviluppare applicazioni web lato server Il linguaggio PHP • Utilizzo del linguaggio PHP in un’architettura client-server Il linguaggio PHP • Tramite protocollo http è possibile richiamare uno script PHP ed inviargli dei parametri • I parametri vengono recuperati dallo script tramite la funzione $_GET http://localhost/path/program.php?pippo=valore_1 Il sistema domotico Jago • Jago: Prototipo del sistema domotico utilizzato per condurre test in laboratorio • Sviluppato da: – ArieLAB, spinoff dell'UnivPM – AUTOMA Srl, azienda produttrice di sistemi domotici – Laboratorio di TLC dell‘UnivPM Il sistema domotico Jago • Jago è costituito da: – 2 lampade – 1 finestra – 1 serranda • Permette di: – – – – Aprire/Chiudere una serranda Aprire/Chiudere una finestra Accendere/Spegnere due lampade Attuare più comandi contemporaneamente (scenari) • È comandato : – Manualmente → pulsanti – Via Wi-fi o Ethernet → protocollo http Architettura di Jago • Jago è composto da tre schede "XN-3OUT" • • • • • Sono schede di uscita digitale Gestiscono fino a tre relè Sono costituite da un microcontrollore microchip PIC24F-16 bit. Ogni scheda viene identificata con un "id“ Al suo interno, ogni singolo relè viene identificato con un "pin“. Architettura di Jago ID = 2 ID = 3 ID = 8 Il protocollo di comunicazione • Jago può essere controllato tramite un protocollo di comunicazione chiamato “Xefiro” • Per richiedere l’attivazione di un carico pilotato da una XN-3OUT si usa la stringa chiamata “Scenario” • Esempio – Luce on: • http://192.168.21.5:1234/Scenario?rid=0&DevTy pe=8&ScenNum=255&instantAck=0&DevNum=1& p1=0&p2=1&p3=0&p4=0&p5=0&set=1 Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 address e port: indirizzo IP e la porta del gateway a cui è connesso il sistema domotico Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 rid (requestId): è un contatore compreso tra 1 e 255, lega la richiesta del client alla risposta inviata dal sistema Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 •DevType: identifica la scheda XN-3OUT che dovrà pilotare il carico Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 ScenNum: serve per le configurazioni di scenari Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 •instantAck: indica il tempo in secondi di attività del comando; il valore 0 indica l’invio immediato Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 DevNum: indica il numero di pin della XN-3OUT a cui è rivolto il comando Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 p2: se impostato a 1 invia un segnale con livello alto, mentre con 0 invia un segnale con livello basso: • Luci: 0 per spegnimento, 1 per accensione • Serranda/ Finestra: 1 per attivare i motori Il protocollo di comunicazione • Esempio: • http://address:port/Scenario?rid=0&DevType=8&ScenNu m=255&instantAck=0&DevNum=1&p1=0&p2=1&p3=0&p4 =0&p5=0&set=1 p3: identifica l’attuatore da comandare all’interno della scheda XN-3OUT Le basi di dati • Che cos’è un DB? • Rappresenta una raccolta di dati ben strutturata • I dati sono organizzati secondo un modello logico (relazionale, gerarchico, …) • L’interazione con l’utente o con altre applicazione viene gestita da uno specifico software chiamato DBMS (Database management system) Le basi di dati • Sfruttano tre tipi di linguaggio: – Data definition language – definisce il tipo di dato e le relazioni fra di essi – Data manipulation language – esegue operazioni quali inserimento, aggiornamento e cancellazione di occorrenze di dati – Query language – permette di effettuare ricerche fra i dati Accesso al DB • Accesso ad un DB tramite un’architettura clientserver Accesso al DB • Esempio di scrittura su DB tramite script PHP: • Lato client: – http://address:port/path/nomefile.php?value=1 – GET /path/nomefile.php?value=1 • Lato server:
© Copyright 2024 Paperzz