FTPmicro Tutorial

FTPmicro embedded web server

FTPmicro è un web-server grande quanto un package DIP40, realizzato grazie ad un PIC18F67J60. Tale microcontrollore è un PIC ad 8-bit di fascia alta che integra, nel suo piccolo package, un controller ethernet 10BaseT.

Nonostante le ridotte dimensioni, la scheda ha caratteristiche davvero interessanti, infatti dispone di uno slot per schede di memoria microSD, un sensore di temperatura TC1047, e numerosi pin di I/O digitali ed analogici. Ma ancora più importante è il software che può essere eseguito su questo dispositivo; in particolare, utilizzando lo stack TCP/IP di Microchip, adattato a questo particolare hardware, è possibile avere in pochi minuti un server HTTP ed UDP con client DHCP. FTPMicro non richiede alcun componente esterno per il suo funzionamento: è sufficiente caricare il software nel PIC ed alimentare la scheda a circa 5V. E’ poi presente un comodo connettore per il programmatore/debugger ICD2 di Microchip. Grazie alla presenza della memoria SD, si possono immagazzinare un gran numero di file che saranno disponibili al server HTTP. Così si può creare un completo sito web, composto sia da parti statiche (HTML, CSS, JavaScript, ecc.) che da parti dinamiche (CGI).Leggendo dati in tempo reale ed inviando comandi, è possibile controllare qualunque hardware.

La Memoria SD
Nella scheda di memoria microSD, può essere immagazzinato qualunque tipo di file direttamente da computer; infatti viene utilizzato il FileSystem FAT16 quindi perfettamente compatibile con i Sistemi Operativi più comuni.

Dunque, affinchè FTPmicro sia in grado di leggere la scheda, è necessario formattarla con questo FileSystem.
Inoltre, il software supporta soltanto i nomi corti per i file, ovvero al massimo 8 caratteri per il nome, e 3 caratteri per l’estenzione. Nomi più lunghi sono supportati, ma il limite è imposto dalla seguente define dichiarata nel file FAT16.h:

#define MAX_FILENAME_LEN( 32)

La scheda può essere inserita e rimossa dal sistema anche durante il funzionamento, infatti è supportato l’hot-plug.

Configurazione

La scelta dell’indirizzo IP dipende dalla rete in cui si trova il dispositivo, perciò può essere facilmente modificato nel file StackTsk.h, modificando le sequenti define:

// esempio: 10.0.0.6
#define MY_DEFAULT_IP_ADDR_BYTE1 (10)
#define MY_DEFAULT_IP_ADDR_BYTE2 (0)
#define MY_DEFAULT_IP_ADDR_BYTE3 (0)
#define MY_DEFAULT_IP_ADDR_BYTE4 (6)

Allo stesso modo è anche possibile cambiare l’indirizzo MAC:

// esempio: 00:04:A3:00:00:00
#define MY_DEFAULT_MAC_BYTE1 (0x00)
#define MY_DEFAULT_MAC_BYTE2 (0x04)
#define MY_DEFAULT_MAC_BYTE3 (0xA3)
#define MY_DEFAULT_MAC_BYTE4 (0x00)
#define MY_DEFAULT_MAC_BYTE5 (0x00)
#define MY_DEFAULT_MAC_BYTE6 (0x00)

L’indirizzo IP non deve necessariamente essere statico, ma può essere assegnato automaticamente dal server DHCP. Per fare ciò bisogna abilitare il client DHCP scommentando la riga

//#define STACK_USE_DHCP

sempre nel file StackTsk.h.

Nell’esempio proposto, i LED del modulo Ethernet sono utilizzati come LED generici; per fare ciò il bit di configurazione ETHLED è stato settato ad OFF; quindi, per ripristinare il normale utilizzo di tali LED, modificare la configurazione ad ON.

#pragma config XINST=OFF, WDT=OFF, FOSC2=ON, FOSC=HSPLL, ETHLED=ON

A questo punto è possibile ricompilare il firmware e caricarlo nel PIC.

Il Server HTTP

Grazie al server HTTP, è possibile comunicare con la scheda semplicemente con un web-browser, da qualunque sistema operativo.
Il server è in grado di prelevare un file direttamente dalla memoria SD ed inviarlo a destinazione.
Inoltre una richiesta può interagire con il software (e quindi con l’hardware) essenzialmente in due modi: in “lettura”, richiedendo dati tramite una pagina CGI, ed in “scrittura” ovvero inviando dei comandi.
Una pagina CGI (Common Gateway Interface) non è altro che una pagina html, che però può contenere il carattere di escape % seguito da un numero decimale a due cifre; tale numero identifica una variabile che sarà richiesta al programma.

In particolare viene invocata la funzione HTTPGetVar che si trova nel file MainDemo.c:

WORD HTTPGetVar(BYTE var, WORD ref, BYTE* val)

il primo parametro identifica la varibile di cui si richiede il valore;
il secondo è un indice, utilizzato per varibili composte da più byte;
l’ultimo parametro punta alla locazione dove scriveremo il valore della variabile (più precisamente scriveremo il byte ref-esimo).
Il valore di ritorno sarà HTTP_END_OF_VAR se abbiamo inviato tutti i byte della varibile var, altrimenti sarà l’indice del prossimo byte da inviare, ovvero ref+1.

Vediamo un breve esempio:

<b>Variabile 1</b>: %01 <br>

<b>Varibile 2</b>: <em>%02</em>

In questo file CGI sono presenti due variabili, quindi verrà chiamata HTTPGetVar, con var pari a 1, la quale restituirà attraverso val, ad esempio il carattere ‘A’. Successivamente viene richiamata HTTPGetVar, ma con var uguale a 2; stavolta supponiamo che il dato sia una stringa, perciò tale funzione verrà chiamata più volte fin quando non si giungerà al termine della stringa (ad esempio “Ciao”).
A questo punto il server può inviare la risposta a chi ha richiesto la pagina, che riceverà:

<b>Variabile 1</b>: A <br>

<b>Varibile 2</b>: <em>Ciao</em>

Se alla pagina richiesta aggiungiamo dei parametri sarà possibile far eseguire delle azioni al software.
Una richiesta con parametri ha questo aspetto:

http://10.0.0.6/pagina.htm?param1=val1&param2=val2

Tale richiesta viene automaticamente analizzata dal server HTTP e passata al metodo HTTPExecCmd, sottoforma di array di stringhe.
Il metodo HTTPExecCmd è così definito:

void HTTPExecCmd(BYTE** argv, BYTE argc)

Quindi nell’esempio fatto prima, argv sarà:

argv[0] = pagina.htm
argv[1] = param1
argv[2] = val1
argv[3] = param2
argv[4] = val2

mentre argc (numero di elementi) varrà 5. In questo modo, scrivendo del codice opportuno all’interno di tale metodo,
il PIC può eseguire diverse funzioni a seconda dei parametri ricevuti.
Inoltre al termine del metodo, argv[0] deve contenere il nome della pagina da restituire, che può essere quella richiesta (ad es. pagina.htm) oppure un’altra.

FTPmicro Tutorial. Esempio pratico
FTPmicro Tutorial. Fat16c
FTPmicro Tutorial. SDC
FTPmicro Tutorial. SMTP
FTPmicro Tutorial – Esempio: Notizie ANSA su LCD

Tutta la documentazione su FTPmicro è disponibile a questa pagina FTPmicro per Utenti Premium.
Potete realizzarlo da soli (fai-da-te) scaricando tutti i codici sorgenti (Schema elettrico realizzato con Orcad, lista parti, circuito stampato realizzato con Orcad, file gerber, codice sorgente assembler realizzato su piattaforma Microchip).

Il progetto montato e collaudato è disponibile sul nostro store –> FTPmicro

14 Comments

  1. claxz70 23 marzo 2013
  2. claxz70 23 marzo 2013
  3. lucagiuliodori 7 febbraio 2014
  4. Emanuele 8 febbraio 2014
  5. Giovanni123 10 marzo 2009
  6. Emanuele 18 marzo 2009
  7. Giovanni123 18 marzo 2009
  8. Emanuele 18 marzo 2009
  9. Giovanni123 18 marzo 2009
  10. Giovanni123 18 marzo 2009
  11. lfelicetti 21 giugno 2011
  12. lfelicetti 22 giugno 2011
  13. Emanuele 22 giugno 2011
  14. Emanuele 7 aprile 2010

Leave a Reply