SQLite 数据库 IoT 数据采集案例 IoT DATA COLLECTION CASE 并发写入

SQLite 数据库阿木 发布于 4 天前 1 次阅读


IoT 数据采集案例:SQLite 数据库的代码实现

随着物联网(IoT)技术的快速发展,数据采集在各个行业中扮演着越来越重要的角色。在物联网数据采集案例中,如何高效、准确地存储和管理数据是关键问题。SQLite 作为一款轻量级的数据库,因其简单易用、跨平台等特点,成为许多嵌入式系统和移动应用的首选数据库。本文将围绕一个IoT数据采集案例,介绍如何使用SQLite数据库进行数据存储和查询,并展示相应的代码实现。

系统设计

系统架构

本案例的系统架构主要包括以下几个部分:

1. 数据采集模块:负责从传感器或其他数据源采集数据。

2. 数据处理模块:对采集到的数据进行处理,如清洗、转换等。

3. 数据存储模块:将处理后的数据存储到SQLite数据库中。

4. 数据查询模块:提供数据查询接口,供其他模块或用户查询数据。

技术选型

- 数据采集:Python的`pynput`库

- 数据处理:Python的`pandas`库

- 数据存储:Python的`sqlite3`库

- 数据查询:Python的`sqlite3`库

数据库设计

SQLite数据库的设计是数据采集系统稳定运行的基础。以下是一个简单的数据库设计示例:

sql

CREATE TABLE IF NOT EXISTS iot_data (


id INTEGER PRIMARY KEY AUTOINCREMENT,


sensor_id TEXT NOT NULL,


data_type TEXT NOT NULL,


data_value REAL NOT NULL,


timestamp DATETIME DEFAULT CURRENT_TIMESTAMP


);


在这个设计中,`iot_data`表包含以下字段:

- `id`:数据记录的唯一标识符。

- `sensor_id`:传感器的标识符。

- `data_type`:数据的类型,如温度、湿度等。

- `data_value`:数据的实际值。

- `timestamp`:数据采集的时间戳。

代码实现

数据采集模块

python

from pynput import keyboard


import sqlite3

数据库连接


conn = sqlite3.connect('iot_data.db')


cursor = conn.cursor()

数据采集函数


def on_press(key):


try:


假设按下空格键时采集数据


if key == keyboard.Key.space:


采集数据


sensor_id = 'sensor_001'


data_type = 'temperature'


data_value = 25.5


cursor.execute("INSERT INTO iot_data (sensor_id, data_type, data_value) VALUES (?, ?, ?)",


(sensor_id, data_type, data_value))


conn.commit()


print("Data collected and stored successfully.")


except Exception as e:


print("Error:", e)

监听键盘事件


with keyboard.Listener(on_press=on_press) as listener:


listener.join()


数据处理模块

python

import pandas as pd

假设从文件中读取数据


data = pd.read_csv('sensor_data.csv')

数据清洗和转换


data['timestamp'] = pd.to_datetime(data['timestamp'])


data['data_value'] = data['data_value'].astype(float)

返回清洗后的数据


return data


数据存储模块

在数据采集模块中,我们已经使用了`sqlite3`库将数据存储到SQLite数据库中。

数据查询模块

python

数据查询函数


def query_data(sensor_id, start_time, end_time):


cursor.execute("SELECT FROM iot_data WHERE sensor_id=? AND timestamp BETWEEN ? AND ?",


(sensor_id, start_time, end_time))


results = cursor.fetchall()


return results

示例:查询传感器001在2023-01-01 00:00:00到2023-01-01 23:59:59之间的数据


results = query_data('sensor_001', '2023-01-01 00:00:00', '2023-01-01 23:59:59')


print(results)


总结

本文以一个IoT数据采集案例为背景,介绍了如何使用SQLite数据库进行数据存储和查询。通过Python编程语言和相应的库,实现了数据采集、处理、存储和查询等功能。在实际应用中,可以根据具体需求对系统进行扩展和优化,以满足不同场景下的数据采集需求。