如何在Arduino中存储数据库?

时间:2011-10-30 16:34:19

标签: android c database arduino microcontroller

我正在开发一个项目,我使用带有蓝牙模块的Arduino和带有Android OS的手机Samsung Galaxy S II。该项目的想法是通过蓝牙将一些命令从我的手机发送到Arduino。我想在Arduino中包含一个数据库,以便当我从手机发送登录信息时,Arduino会检查数据库,如果登录信息匹配,它会从数据库中检索一些数据并将其发送到我的手机。

如何在Arduino中存储数据库?我应该购买外部EEPROM还是RAM?我该如何处理该数据库(添加,删除和操作数据)?

我的Ardunio属于UNO,BTW。

2 个答案:

答案 0 :(得分: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,Android手机必须发送MD5哈希值,即16个字节,因此Arduino必须只检查那里的用户列表中是否存在MD5哈希值。 这很简单快捷。

答案 1 :(得分:0)

由于您使用的是蓝牙连接,因此您只需验证手机的MAC地址或其他独特信息即可。