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:
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
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
Ciao
voglio acquistare questo dispositivo, prima pero ho alcune domande da farti.
Io ho bisogno di controllare tramite ethernet da remoto due servo motori attraverso dei digital output.
Questo dispositivo mi consente di farlo?, o meglio ha la possibilità?
Io dovrei creare una mia applicazione server a cui mi connetto con un client unix da remoto, è Possibile?? Penso di si, dal momento che il protocollo è lo stesso.
In seguito vorrei farti qualche domanda piu specifica sui sorgenti, perchè io ho solo scritto applicativi di server unix, dunque cercherei una similutudine con alcune funzioni.
spero in una risposta.
ciao e grazie
PS posso avere la tua email ??
Ciao,
si, con ftpmicro puoi controllare in remoto anche dei servomotori, in quanto hai il controllo sulle uscite del micro e puoi anche accedere alla periferica pwm, quindi variare la velocità dei motori da remoto.
L’hardware è pronto (ftpmicro) devi solo inserire la parte di potenza motor driver.
Per il software, è disponibile lo stack tcp/ip per il collegamento remoto e come esempio una pagina web dove puoi accendere e spengere dei led…. dovresti modificare sia la pagina web (magari mettendo uno slide per il controllo velocità) ed il firmware per ftpmicro, agganciando la periferica pwm.
Un saluto
Emanuele
La mia email è
[email protected]
ma preferisco sempre rispondere nei commenti (quando possibile) per rendere pubbliche le risposte, magari sono di aiuto anche ad altri.
ciao
come ti dicevo nell’email puoi consigliarmi un programmatore anche un MPlab con un minimo di debug ( esempio: possibilità di accendere alcuni led in qualsiasi parte del codice per verificare se entra in degli if o porzioni di codice annidato, o per gestire eccezioni hardware).
Inoltre sai se è possibile acquistare FTPmicro di seconda mano da qualcuno che conosci, perchè il suo prezzo è circa 70 Euro, ma tra spedizione ed iva mi costerà solo questo circa 110 Euro.
grazie
Ciao,
per sviluppare con ftpmicro ci vuole MPLAB (gratuito da Microchip) e un debugger tipo ICD2 o ICD3 (costano sotto i 200euro da Farnell).
L’ftpmicro già è predisposto con il connettore per debuggare.
Il software da quale partire (stack e applicativo base)invece è disponibile qui sul sito.
Per quanto riguarda i costi:
hai visto il nostro Academics (Università)?
http://it.emcelettronica.com/universit%C3%A0-regolamento-studenti
Puoi accumulare punti spendibili sul Catalogo Farnell oppure anche sul nostro store (dove è presente ftpmicro)
Un saluto
Emanuele
scusami ma 200 euro mi sembrano troppi.
Dal sito della microchip ho notato il Pickit2 pero ancora non ho capito se va bene per il PIC18F67J60 che è montato su FTPmicro.Anche perchè è alimentato direttamente dalla USB, e non so se basta.
Per quanto riguarda invece il connettore I2C mi hanno consigliato di acquistare un adattatore. Non so se m’hanno detto bene, infatti chiedo a te che sei piu esperto dell’FTPmicro.
Non vorrei spendere 200 Euro, ma neanche comprare una cosa che non funzioni.
Su questo sito che mi hai consigliato si deve accumulare punti, cosa che io non ho, e inoltre non penso di poterli avere subito, anche perche nn ho creato niente.
Dubbio: il connettore per debuggare di cui parli è l’ICSP ??
guarda cosa ho scoperto su ebay, se per favore lo puoi controllare. Se mi dici che va bene per l’FTPmicro lo compro perchè il prezzo veramente competitivo
Debugger-Programmatore-ICD1-ICD2-MPLAB-ICD-Cavo-RS-232
Schema elettrico in alta risoluzione e tutta la documentazione è stata inviata
A quanto ho capito, serve anche la licenza cel C18 per programmare l’ftp micro, distribuita da microchip, vero? oppure sbaglio?
posso averla anche io, oppure è identica a quella presente in sezione download?
E’ tutto in download
Buongiorno,
Mi consigliate qualche risorsa, online o libro, per come funziona / si programmano i PIC e magari gli Arduino? Premetto che non ho approfondito ancora molro le differenze fra loro. Mi pare però di capire che i primi siano più economini sebbene meno potenti, ma adattissimi per piccoli progetti embedded.
Una ventina di anni fa avevo realizzato qualche circutito poi non ho più avuto il tempo di dedicarmici.
Sono un programmatore e conosco vari linguaggi, sebbene alcuni non li uso da tanto tempo. Sono programmabili in un linguaggio simil C per caso ?
Oltre alla parte didattica di cosa altro avrei bisogno per iniziare a sperimentare ?
Grazie mille
Anticipatamente
Claudio
Ops mi accorgo di aver messo questo titolo nel post sbagliato prima!
Questo è quello giusto 🙂
Qualcuno ha usato FTPmicro per la misurazione dei carichi ? So che sul mercato ce ne sono un sacco ma a parte il fatto che sono in genere limitati a poche linee hanno un paio di difetti cumuni: la scarsa pecisione in quanto nessuno di loro misura la tensione ma te la fanno inserire fissa, mentre, almeno da me varia fra i 234 ed i 249 V, e poi per evere i dati online vendono costosi abbonamenti (20/30€/anno sono troppi per una cosa del genere)
A proposito quante linee analogiche ha questa scheda ?
Grazie mille
Buona giornata
Claudio
Ciao,
ho una scheda FTPmicro ma non riesco a reperire la documentazione necessaria (Schema elettrico, lista parti, layout, codice sorgente, …), o meglio quando premo sul link indicato (http://it.emcelettronica.com/internet-delle-cose-webserver-embedded-open-source-appena-8-cm) mi dice che il contenuto è esclusivo per gli abbonati platinum.
Non essendo abbonato platinum, come posso ottenere tutta la documentazione?
Grazie in anticipo!
Ti ho risposto su FB 🙂
Ciao Emanuele, anzitutto complimenti per il dispositivo! Sono uno studente di elettronica e per un progetto che devo realizzare ho bisogno di qualcosa che a seguito di un trigger esterno invii una mail e l’ftpmicro è proprio l’ideale! Dove potrei comprarlo?
Salve Circk,
il progetto non è più disponibile, ma essendo open source, puoi trovare tutta la documentazione sul nostro blog.
Se vuoi qualcosa di già pronto, ti consiglio ESPertino, la nostra nuova scheda IoT, Arduino compatibile, con WiFi e BLE a bordo, che può sicuramente svolgere quanto richiesto.
http://www.espertino.com