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(8×2)cm ed un comune display 16×2. 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 16×2, ma il codice qui presentatoè stato modificato per supportare anche LCD 20×4;
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

5 Comments

  1. Emanuele 14 marzo 2012
  2. seon 4 luglio 2012
  3. Emanuele 4 luglio 2012
  4. seon 4 luglio 2012
  5. Emanuele 4 luglio 2012

Leave a Reply