Home
Accesso / Registrazione
 di 

FTPmicro Tutorial - Esempio: Notizie ANSA su LCD

FTPmicro Tutorial - Esempio: Notizie ANSA su LCD

Leggere i Feed RSS senza PC tramite il solo utilizzo di FTPmicro(8x2)cm ed un comune display 16x2. Ovviamente è necessaria una connesione internet tramite ethernet.

Introduzione su come leggere i feed rss senza pc

In questo articolo vedremo un altro esempio pratico sull'utilizzo di FTPMicro e dello stack TCP/IP di Microchip.
In particolare verrà utilizzato il client TCP per visualizzare in un display LCD le più recenti notizie, direttamente dal sito dell''ANSA.

Il progetto FTPmicro con il software open source per leggere i Feed RSS senza PC, è disponibile open source. Potete realizzarlo da soli (fai-da-te) scaricando tutti i codici sorgenti (Schema elettrico, lista parti, layout, esempi di codice sorgente sviluppato su piattaforma Microchip) da questa pagina FTPmicro.

Se ti interessa FTPmicro montato e collaudato puoi trovarlo nel nostro negozio online

Hardware
L'hardware è costituito semplicemente da FTPMicro e da un display LCD alfanumerico Hitachi-compatibile.
I collegamenti tra questi due elementi sono configurabili a piacimentodal file HardwareProfile.h, nella sezione dedicata ad FTPMicro
(#elif defined(FTPMICRO)):
#define LCD_DATA_TRIS(TRISE)
#define LCD_DATA_IO(LATE)
#define LCD_RD_WR_TRIS(TRISBbits.TRISB5)
#define LCD_RD_WR_IO(LATBbits.LATB5)
#define LCD_RS_TRIS(TRISFbits.TRISF6)
#define LCD_RS_IO(LATFbits.LATF6)
#define LCD_E_TRIS(TRISFbits.TRISF5)
#define LCD_E_IO(LATFbits.LATF5)

Il software originale prevede soltanto display del tipo 16x2, ma il codice qui presentatoè stato modificato per supportare anche LCD 20x4;
per questo è presente la definizione di LCD_MODE_20x4 nel fileLCDBlocking.h.

RSS
Per leggere le notizie ANSA, FTPMicro non va di certo a consultare le pagine web, ma si affida
ad un feed RSS: si tratta un file XML,costantemente aggiornato, che contiene soltanto dati essenziali come titolo, testo, data, ecc.
Vediamo uno stralcio di questo file:

<item><title>Miss Italia 2007 e'' Silvia Battisti</title><description>E'' arrivata alle finali con la fascia di Miss Veneto</description><link>http://www.ansa.it/site/notizie/awnplus/topnews/news/2007-09-25_125104380.html</link><copyright>Copyright ANSA Tutti i diritti riservati</copyright><pubDate>2007-09-25 01:08</pubDate></item>
Ciò che ci interessa è il titolo della notizia, che verrà visualizzato sul display.
Quindi, il cuore del programma è costituito da un parser che analizza il file e ne estrapola soltanto i titoli.

GenericTCPClient
Lo stack comprende un file chiamato GenericTCPClient, il quale contiene unesempio pronto all''uso di client HTTP.
Vediamo come funziona il parser:
- E'' presente un buffer dove vengono salvate 4 o 8 notizie (a seconda del display),per il quale è stato riservato un banco di RAM nello script del linker.
- Nella sezione SM_PROCESS_RESPONSE, viene esaminato il file, e quindi salvatenel buffer le notizie a partire dalla numero t_count, fino al riempimento del buffer.
- Terminata l''analisi, si passa alla sezione SM_DONE dove: si ricomincia il processo se non è stataletta nessuna notizia (news_i = 0), oppure si passa a SM_DISPLAY.
- In quest''ultima, una notizia viene visualizzata ogni circa 5 secondi sul display.
In generale, vengono salvate NEWS_NUMBER notizie e visualizzate una alla volta,poi viene scaricato nuovamente il Feed e salvate le successive; raggiunta la fine del file, si ricomincia da capo.

Esaminiamo alcuni dettagli.
Dichiarazione della variabile che funge da buffer:

#pragma udata news_bufchar news[256];
#pragma udata

Il codice che costituisce il parser:

while(TCPGet(MySocket, &i))
switch(ParsingState){
case PS_HOME:
k = 0;
if (i == ''<'' && (news_i < NEWS_NUMBER))
ParsingState = PS_TAG;
break;
case PS_TAG:
if (i == ''>'') {
if (k == 5 && !memcmppgm2ram((char*)LCDText, "title", 5) && (t_cnt++ >= t_count)){
ParsingState = PS_TITLE;
}
else
ParsingState = PS_HOME;
k = 0;
break;
}
if (k < 5)
LCDText[k++] = i;
break;
case PS_TITLE:
if (i == ''<''){
if (k < NEWS_LEN) news[news_i*NEWS_LEN + k] = ''\\0''; ParsingState = PS_HOME;
news_i++;
break;
}
if (k < NEWS_LEN)
news[news_i*NEWS_LEN + k++] = i;
break;}

Si cerca il tag <title> e si salva il contenuto nel buffer, ma si saltano t_count titoli.

Visualizzazione:
case SM_DISPLAY:
if (TickGet() - Timer < 5*TICK_SECOND)
break;
memcpy((void*)LCDText, (void*)&news[k*NEWS_LEN], NEWS_LEN);
LCDUpdate();
k++;
Timer = TickGet();
if (k == news_i) {
if (news_i < NEWS_NUMBER)
t_count = 0;
else
t_count += NEWS_NUMBER;
t_cnt = 0;
news_i = 0;
GenericTCPExampleState = SM_HOME;
}
break;

In quest''ultima parte avviene la visualizzazione sull'LCD della notizia corrente; la variabile t_count, come già accennato,conta blocchi di NEWS_NUMBER notizie, mentre k la notizia nel buffer correntemente visualizzata.
Una volta visualizzate tutte le notizie in memoria, t_count viene incrementato di NEWS_NUMBER e quindi sitorna a SM_HOME, dove verrà riscaricato il Feed; se si è giunti alla fine del file, invece, t_count torna a zero.

Il progetto FTPmicro con il software open source per leggere i Feed RSS senza PC, è disponibile open source. Potete realizzarlo da soli (fai-da-te) scaricando tutti i codici sorgenti (Schema elettrico, lista parti, layout, esempi di codice sorgente sviluppato su piattaforma Microchip) da questa pagina FTPmicro.

Se ti interessa FTPmicro montato e collaudato puoi trovarlo nel nostro negozio online

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Emanuele

Leggere i feed RSS senza PC

ritratto di seon

richiesta

Ciao Emanuele,

è possibile realizzare un sistema analogo costituito da più display ad esempio 10. Ognuno deve mostrare un valore univoco che gli viene fornito da un mio script in php tutto su interfaccia ethernet?

ritratto di Emanuele

FTPmicro

Ciao Seon,
si certo, è fattibile :)

ritratto di seon

richiesta

mi dia il suo indirizzo email così da poterla contattare in privato grazie!

ritratto di Emanuele

Contatto

Puoi contattarmi direttamente tramite il CONTACT del mio profilo oppure su tutti i social network (FB, Linkedin etc.)

http://it.emcelettronica.com/emanuele

ritratto di Nicop6

Info creazione stack

Ciao emanuele!
Sono un appassionato di arduino....ma purtroppo sono ancora alle prime "ARMI"...
Dovrei realizzare uno strack per pilotare un lcd con 3 variabili di stato in ingresso per far variare la scritta che appare sull'LCD....
Mi chiedevo se potevi darmi una mano...
Ti ringrazio anticipatamente...
Ciao Nico

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 22 utenti e 77 visitatori collegati.

Ultimi Commenti