2011-10-30 119 views
5

我正在使用Arduino和藍牙模塊以及我的手機Samsung Galaxy S II與Android OS一起使用的項目。該項目的想法是通過藍牙從手機發送一些命令到Arduino。我想在Arduino中包含一個數據庫,這樣當我從手機發送登錄信息時,Arduino將檢查數據庫,如果登錄信息匹配,它會從數據庫中檢索一些數據並將其發送到我的手機。如何在Arduino中存儲數據庫?

如何在Arduino中存儲數據庫?我應該購買外部EEPROM還是RAM?我該如何處理這個數據庫(添加,刪除和操作數據)?

我的Ardunio類型爲UNO,順便說一句。

+0

這是*方式*太寬,無法在SO上回答。你基本上問「我怎麼做這一切?」甚至沒有足夠的研究來提出正確的問題。 –

+0

@BrianRoach我只是要求正確的方式來做到這一點,我並不是在要求細節。 –

+0

@ Eng.Fouad在這種情況下,請避免使用「數據庫」這個詞,因爲數據庫是一種完全不同於你所需要的東西。見[Wikipedia](http://en.wikipedia.org/wiki/Database) –

回答

7

只是簡單的登錄你不需要數據庫,你可能只需要一個簡單的表。

首先考慮一下,通常EEPROM允許從1000到100000個寫週期。這意味着,如果你寫的單個細胞超過100000個,那麼你的細胞死亡的可能性很高,你不能再寫了。

問題是,允許多少次登錄?選擇正確的數據結構並理解所需的內存量是多少。

瞭解Arduino的計算能力:如果登錄只是2..50,那麼簡單的列表就足夠了。最後的插入是O(1),刪除是O(n),查找是O(n)。然而,鏈接列表將允許您將要刪除的寫入次數減少到一個恆定的小值。

如果登錄數多於50 .. 1000,則使用二分搜索的排序數組就足夠了。插入是O(n),刪除是O(n),查找是O(n log n)。但是,對於刪除和插入,寫入次數爲O(n),由於寫入速度較慢並且可以刻錄單元,所以取決於您想要執行的更新次數。

如果登錄數是1000或更多,則二叉樹是好的。插入是O(n log n),刪除是O(n log n),查找是O(n log n)。好處在於,對於插入和刪除,您只需要一個小而恆定的寫入次數。

另外一個散列表是好的,但他們通常使用更多的內存。插入平均O(1),刪除平均O(1),查找平均O(1)。插入和刪除只需要少量不變的寫入操作,少於二叉樹。正如我所說的,這個數據結構使用更多的內存,速度是有代價的。

你不需要一個真正的關係數據庫,但如果你需要太多的用戶,你可能需要一個外部EEPROM。

當然,您必須將這些數據保存在內部或外部閃存中,否則在重置或關閉機器時會丟失數據庫。

我們也可以說,你不需要存儲用戶名和密碼,你可以存儲密碼和用戶名的散列。如果存在散列的用戶名和密碼,則可以允許登錄。通過這種方式,您可以使用固定大小的內存和更少的內存。例如,您可以使用MD5,它是必須發送MD5哈希的Android手機,即16個字節,因此Arduino必須僅檢查該用戶列表中是否存在該MD5哈希值。 這很簡單快捷。

+0

+1感謝隊友,這非常有幫助:) –

0

由於您使用的是藍牙連接,因此您可以簡單地驗證手機的MAC地址或其他獨特信息。