2011-10-30 364 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地址或其他独特信息。

相关问题