打印
[STM32F4]

STM32使用SQL数据库功能

[复制链接]
1171|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 i工程师 于 2023-6-11 11:21 编辑

最近我们在做电动汽车充电桩项目,需要跟国电通后台通信。正常情况下我们的数据会及时的通过tcp上传到后台,正常情况下我们无需实现强大的数据库功能,提供一个队列,一条一条发送即可。但国电通表示后台数据库也有可能丢数据,要求我们底层存储至少2万条最近的交易数据,要求能随时查询任意一条数据。
我们使用的是stm32f407VGT6单片机,通过内部数据结构实现上述功能,感觉非常困难。本来想通过队列方式一条一条存储发送,但无法满足任意数据随时查询功能。自己写一些结构和算法,但感觉比较困难,同时也容易出bug,效率也不行。

后来在某宝找到一款LS10串口数据库模块,数据库功能比较强大,价格也还行,这里记录下评估情况。


常用的关系型数据库功能:
1, 创建表;
2, 插入数据;
3, 修改数据;
4, 查询数据;
5, 删除数据;
6, 删除表。

根据手册,LS10模块使用5V电源,uart TTL接口(3.3V)与单片机通信,使用AT命令实现数据库功能。LS10模块可供数据库使用的空间为约2.5M。

LS10模块上电启动成功后,串口会输出Rdy标志。

此时,给LC10发AT回车能得到OK响应,见下图:


AT+SQL命令用于执行数据库语句,下面一一介绍。

1, 创建表
给LC10模块发送如下命令:AT+SQL=”CREATE TABLE test_tab(ID INTPRIMARY KEY NOT NULL,PAR1 INT,PAR2 REAL,PAR3 TEXT)” 该AT命令用于创建sql表格,表格名为test_tab,表格列项分别为ID,PAR1,PAR1,PAR3,其中ID为int型,且为主键,PAR1为INT型,PAR2为REAL型,PAR3为TEXT型。接着可以使用AT+SQLSTRU查询模块内表格及结构。见下图:

从上图可以看出,模块内部已经创建了test_tab表格。

2, 插入一行数据
AT+SQL=”INSERTINTO test_tab VALUES(1,188,1.253,’abcdefg’)”该命令向所有列插入数据,插入的数据分别为1,188,1.253和‘abcdefg’;
AT+SQL=”INSERTINTO test_tab (ID,PAR3) VALUES(2,’hijklmn’)”该命令向部分列插入数据;
我们可以使用select语句查看我们插入的数据,如下图:

从上图可以看出,我们插入的数据已经可以查询到了,其中&是列分隔符。

3, 修改数据
发送如下命令:
AT+SQL="UPDATEtest_tab SET PAR2=2.568,PAR3='I love China' WHERE ID=1"该命令将ID为1的列,所对应的PAR2改为2.568,PAR3改为’I love China’
从上图可以看出,对应的数据已经完成修改;

4, 删除数据
AT+SQL="DELETE FROM test_tab WHERE ID<=1"上述命令用于删除ID<=1的数据行;

执行完成后,通过select语句查询,ID为1的数据已经被删除。

5, 删除表
AT+SQL="DROP TABLE test_tab"该命令用于删除表test_tab
执行删除表命令后,使用AT+SQLSTRU查询,可以看出表格已经被删除。


容量测试,分享如下:

表格结构(sn int primary key not null,id int,p1 int,p2 int,p3 real,p4 text,p5 text),
存储的内容分别为
sn(自增),id(自增),p1(自增),p2(自增),1.23456,abcdefghijklmn

空间占用快满时,存储了115888条数据。

按照手册的要求,始终保留至少500K空间,也至少能存储50000条数据。

资料下载:
链接:https://pan.baidu.com/s/1UkrQQ63QB39Hl2xNxq0ypw
提取码:ls10


62777648536fbee8be.png (821.63 KB )

62777648536fbee8be.png

80352648537138596e.png (821.63 KB )

80352648537138596e.png

28196648537d71311c.png (32.3 KB )

28196648537d71311c.png

使用特权

评论回复
沙发
田舍郎| | 2023-6-11 21:00 | 只看该作者
这个方案比较不错呢

使用特权

评论回复
板凳
Jacquetry| | 2023-6-11 22:12 | 只看该作者
还以为直接用stm32实现的呢

使用特权

评论回复
地板
i工程师|  楼主 | 2023-6-12 08:39 | 只看该作者
Jacquetry 发表于 2023-6-11 22:12
还以为直接用stm32实现的呢

用模块实现的

使用特权

评论回复
5
icecut| | 2023-6-12 10:09 | 只看该作者
这都可以. 我也可以搞一个开源的数据库放进去.

使用特权

评论回复
6
LLGTR| | 2023-6-12 15:57 | 只看该作者
还有这种模块,厉害了!

使用特权

评论回复
7
朝生| | 2023-6-12 15:57 | 只看该作者
加上这个模块,单片机都和电脑一样了。

使用特权

评论回复
8
软核硬核| | 2023-6-12 15:57 | 只看该作者
感谢分享,以后可以考虑这个方案!

使用特权

评论回复
9
Henryko| | 2023-6-12 21:36 | 只看该作者
加上数据库不就可以做服务器了

使用特权

评论回复
10
i工程师|  楼主 | 2023-6-13 15:21 | 只看该作者
Henryko 发表于 2023-6-12 21:36
加上数据库不就可以做服务器了

是滴,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝