2011-10-30 17 views
5

Sto lavorando a un progetto in cui utilizzo un Arduino con un modulo Bluetooth e il mio cellulare Samsung Galaxy S II con sistema operativo Android. L'idea del progetto è quella di inviare alcuni comandi dal mio cellulare ad Arduino via Bluetooth. Voglio includere un database in Arduino in modo che quando invio le informazioni di accesso dal mio cellulare, Arduino controllerà il database e se le informazioni di accesso corrispondono, recupera alcuni dati dal database e li invia al mio cellulare.Come memorizzare un database all'interno di un Arduino?

Come posso memorizzare un database all'interno di Arduino? Devo acquistare una EEPROM o una RAM esterna? E come posso gestire quel database (aggiungere, cancellare e manipolare i dati)?

My Ardunio è di tipo UNO, BTW.

+0

Questo è * modo * troppo ampio per ricevere risposta su SO. Stai praticamente chiedendo "Come faccio a fare tutto questo?" senza aver nemmeno studiato abbastanza per fare le domande giuste. –

+0

@BrianRoach Sto solo chiedendo il modo giusto per farlo, non sto chiedendo dettagli. –

+0

@ Eng.Fouad Si prega di evitare il termine "database" in un tale contesto, perché un database è completamente diverso da quello di cui si ha bisogno. Vedi [Wikipedia] (http://en.wikipedia.org/wiki/Database) –

risposta

7

Solo per un semplice accesso non è necessario un database, probabilmente è sufficiente una semplice tabella.

Considerare innanzitutto che in genere le EEPROM consentono da 1000 a 100000 cicli di scrittura. Significa che se scrivi una singola cella più di 100000 hai un'alta probabilità che la tua cella muoia, non puoi più scriverla.

La domanda è: quanti accessi sono consentiti? Si tratta di scegliere la giusta struttura dati e capire qual è la quantità di memoria richiesta.

Conoscere il potere computazionale di Arduino: se gli accessi sono solo 2 .. 50, una semplice lista sarebbe sufficiente. L'inserimento alla fine è O (1), la cancellazione è O (n), la ricerca è O (n). Tuttavia, un elenco collegato consente di ridurre il numero di scritture per la cancellazione a un valore piccolo e costante.

Se gli accessi sono maggiori, 50 .. 1000, è sufficiente una matrice ordinata con ricerca binaria. L'inserimento è O (n), la cancellazione è O (n), la ricerca è O (n log n). Tuttavia il numero di scritture è O (n) sia per la cancellazione che per l'inserimento, e poiché la scrittura è lenta e può bruciare celle, dipende dal numero di aggiornamenti che si desidera eseguire.

Se gli accessi sono 1000 o più un albero binario è buono. L'inserimento è O (n log n), la cancellazione è O (n log n), la ricerca è O (n log n). La cosa buona è che per l'inserimento e la cancellazione hai solo bisogno di un numero piccolo e costante di scritture.

Anche una tabella hash è buona, ma di solito usano più memoria. L'inserimento è mediato O (1), la cancellazione è mediata O (1), la ricerca è mediata O (1). L'inserimento e la cancellazione richiedono solo un piccolo numero costante di operazioni di scrittura, meno di un albero binario. Come ho detto, questa struttura dati utilizza più memoria, la velocità ha un costo.

Non hai bisogno di un vero database relazionale, ma probabilmente se hai bisogno di troppi utenti, hai bisogno di una EEPROM esterna.

Ovviamente, è necessario salvare questi dati in una memoria flash, interna o esterna, o si perderà il database quando si ripristina o si spegne la macchina.

Possiamo anche dire che non è necessario memorizzare nome utente e password, è sufficiente memorizzare un hash della password e del nome utente. Se il nome utente e la password hash esistono, è possibile consentire l'accesso. In questo modo è possibile utilizzare una memoria di dimensioni fisse e meno memoria. È possibile utilizzare MD5, è il telefono Android che deve inviare l'hash MD5, ovvero 16 byte, quindi l'Arduino deve solo verificare se l'hash MD5 esiste nell'elenco degli utenti, ad esempio. E questo è facile e veloce.

+0

+1 Grazie amico, questo è molto utile :) –

0

Poiché si utilizza la connessione Bluetooth, è possibile semplicemente convalidare l'indirizzo MAC del telefono o altre informazioni univoche.

Problemi correlati