当前位置: 首页 > news >正文

树莓派边缘计算网关搭建:集成MQTT、SQLite与Flask的完整解决方案

一、项目概述

随着物联网(IoT)的快速发展,边缘计算的应用越来越广泛。边缘计算可以将数据处理和分析推向离数据源更近的地方,从而降低延迟,提高效率。本文将介绍如何利用树莓派构建一个多协议边缘计算网关,以支持各种传感器和设备的连接和数据传输。

该项目的主要目标是实现一个边缘网关,能够通过不同的通信协议(如MQTT、HTTP、CoAP等)采集和处理来自传感器的数据,并将这些数据发送至云端或本地数据库进行存储和分析。

二、系统架构

1. 硬件选型

  • 主控单元:树莓派4B

  • 传感器:温度传感器(如DHT11)、湿度传感器、运动传感器等

  • 其他模块:Wi-Fi和蓝牙模块(树莓派4B内置)

2. 通信协议

  • MQTT:用于轻量级的设备间消息传递。

  • HTTP/HTTPS:用于与云服务或Web应用程序的交互。

  • CoAP:用于低功耗设备的通信。

3. 技术栈

  • 操作系统:Raspberry Pi OS

  • 编程语言:Python

  • 数据库:SQLite(用于本地数据存储)

  • 中间件:Eclipse Mosquitto(MQTT代理)

  • 云平台:AWS IoT(可选)

4. 系统架构图

Cloud
数据采集
消息传递
存储数据
提供数据
HTTP请求
可选数据转发
AWS IoT
传感器设备
MQTT代理
树莓派边缘计算网关
SQLite数据库
Flask Web服务
用户界面

三、环境搭建

1. 安装Raspberry Pi OS

  1. 下载Raspberry Pi Imager并安装。

  2. 使用Raspberry Pi Imager将Raspberry Pi OS写入SD卡。

  3. 将SD卡插入树莓派,连接显示器和电源,启动树莓派。

2. 更新系统

运行以下命令更新系统:

sudo apt updatesudo apt upgrade -y

3. 安装Python和依赖库

树莓派通常预装Python,但我们需要安装一些额外的库。

sudo apt install python3 python3-pip -ysudo pip3 install paho-mqtt flask

4. 安装并配置Eclipse Mosquitto

sudo apt install mosquitto mosquitto-clients -y

启动Mosquitto服务:

sudo systemctl start mosquittosudo systemctl enable mosquitto

5. 安装SQLite

sudo apt install sqlite3 libsqlite3-dev -y

四、代码实现

1. 数据采集模块

在上面的代码中,我们已经完成了读取DHT11传感器数据并将其发布到MQTT代理的功能。接下来,我们需要将此脚本保存并运行。

保存并运行数据采集脚本
  1. 在树莓派上创建一个Python脚本文件,例如 sensor_data.py

    nano sensor_data.py
    
  2. 将以下代码粘贴到文件中:

import Adafruit_DHTimport paho.mqtt.client as mqttimport time\# 设置传感器类型和GPIO引脚sensor = Adafruit_DHT.DHT11pin = 4  # GPIO引脚编号\# MQTT设置mqtt_broker = "localhost"  # 本地Mosquitto代理mqtt_topic = "sensor/data"\# 创建MQTT客户端client = mqtt.Client()client.connect(mqtt_broker)while True:# 读取传感器数据humidity, temperature = Adafruit\_DHT.read\_retry(sensor, pin)if humidity is not None and temperature is not None:# 构建消息message = f"Temperature: {temperature}°C, Humidity: {humidity}%"print(message)# 发布到MQTTclient.publish(mqtt_topic, message)else:print("Failed to retrieve data from the sensor.")# 每10秒读取一次数据time.sleep(10)
  1. 保存并退出编辑器(在nano中按 CTRL + X,然后按 Y 确认保存)。

  2. 运行Python脚本:

    python3 sensor_data.py
    

2. 创建Web服务模块

接下来,我们将创建一个简单的Flask Web服务,用于展示传感器数据。

创建Flask应用
  1. 创建一个新的Python文件,例如 app.py

    nano app.py
    
  2. 将以下代码粘贴到文件中:

from flask import Flask, jsonify
import sqlite3app = Flask(__name__)
# 数据库连接函数
def get_db_connection():conn = sqlite3.connect('sensor_data.db')conn.row_factory = sqlite3.Rowreturn conn@app.route('/data', methods=['GET'])
def get_data():conn = get_db_connection()data = conn.execute('SELECT * FROM readings ORDER BY id DESC').fetchall()conn.close()return jsonify([dict(row) for row in data])if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
  1. 保存并退出编辑器。

3. 数据存储模块

为了将传感器数据存储到SQLite数据库中,我们需要在数据采集模块中添加数据库写入的逻辑。

修改数据采集模块以支持SQLite

sensor_data.py 中,添加数据库写入功能:

import Adafruit_DHT
import paho.mqtt.client as mqtt
import time
import sqlite3# 设置传感器类型和GPIO引脚
sensor = Adafruit_DHT.DHT11
pin = 4  # GPIO引脚编号# MQTT设置
mqtt_broker = "localhost"  # 本地Mosquitto代理
mqtt_topic = "sensor/data"# 创建MQTT客户端
client = mqtt.Client()
client.connect(mqtt_broker)# 数据库连接函数
def get_db_connection():conn = sqlite3.connect('sensor_data.db')return conn# 创建表(如果不存在)
conn = get_db_connection()
conn.execute('''
CREATE TABLE IF NOT EXISTS readings (id INTEGER PRIMARY KEY AUTOINCREMENT,temperature REAL,humidity REAL,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)
''')
conn.close()while True:# 读取传感器数据humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)if humidity is not None and temperature is not None:# 保存数据到SQLite数据库conn = get_db_connection()conn.execute('INSERT INTO readings (temperature, humidity) VALUES (?, ?)',(temperature, humidity))conn.commit()conn.close()# 构建消息message = f"Temperature: {temperature}°C, Humidity: {humidity}%"print(message)# 发布到MQTTclient.publish(mqtt_topic, message)else:print("Failed to retrieve data from the sensor.")# 每10秒读取一次数据time.sleep(10)

四、代码实现

4. 启动Web服务

在终端中启动Flask Web服务,以便我们可以通过浏览器访问传感器数据。

  1. 运行Flask应用:

    python3 app.py
    
  2. 在浏览器中访问 http://<树莓派的IP地址>:5000/data,你应该能够看到从传感器采集到的温度和湿度数据的JSON格式输出。这些数据是从SQLite数据库中读取的。

    例如,输出可能如下所示:

    [
    {"id": 1, "temperature": 22.0, "humidity": 45.0, "timestamp": "2024-08-04 12:01:22"},
    {"id": 2, "temperature": 23.0, "humidity": 50.0, "timestamp": "2024-08-04 12:01:32"},
    ...
    ]
    

5. 测试MQTT功能

为了验证MQTT功能的正常工作,可以使用MQTT客户端订阅传感器数据主题。

  1. 在另一个终端中,使用Mosquitto客户端进行订阅:

    mosquitto_sub -h localhost -t sensor/data
    
  2. 你应该能够看到来自传感器的数据实时打印在终端中。

五、项目总结

在本项目中,我们成功地使用树莓派构建了一个多协议的边缘计算网关,涉及以下关键步骤:

  1. 硬件和软件环境搭建:我们选择了树莓派4B作为控制单元,并安装了Raspberry Pi OS。通过安装Python及其相关库,确保了系统的正常运行。

  2. 数据采集模块:通过DHT11传感器实时采集温度和湿度数据,并将这些数据通过MQTT协议发送到本地的Mosquitto代理。

  3. 数据存储模块:使用SQLite数据库存储传感器数据,并确保数据持久性。

  4. Web服务模块:通过Flask框架创建Web服务,以便用户可以通过HTTP请求获取传感器的历史数据。

  5. 测试和验证:通过MQTT客户端订阅消息和通过浏览器访问Web服务,验证了整个系统的功能和数据流的正确性。

相关文章:

树莓派边缘计算网关搭建:集成MQTT、SQLite与Flask的完整解决方案

一、项目概述 随着物联网&#xff08;IoT&#xff09;的快速发展&#xff0c;边缘计算的应用越来越广泛。边缘计算可以将数据处理和分析推向离数据源更近的地方&#xff0c;从而降低延迟&#xff0c;提高效率。本文将介绍如何利用树莓派构建一个多协议边缘计算网关&#xff0c…...

如何通过GD32 MCU内部ADC参考电压通道提高采样精度?

ADC采样精度受很多因素影响&#xff0c;比如电源波动、参考电压波动、输入信号波动等&#xff0c;GD32 MCU内部提供了一个参考电压通道&#xff0c;理论上可以优化由于电源和参考电压较大波动引入的采样误差。 如下图所示&#xff0c;GD32F303 ADC内部17通道为VREFINT参考电压…...

Centos安装OpenSearch

Centos安装OpenSearch 下载并安装OpenSearch下载OpenSearch RPM包导入公共GNU Privacy Guard&#xff08;GPG&#xff09;密钥。此密钥验证您的OpenSearch实例是否已签名安装RPM包安装完设置开机自启动OpenSearch启动OpenSearch验证OpenSearch是否正确启动 测试OpenSearch向服务…...

【pkill pgrep】Centos/Linux pkill命令详细介绍

【pkill & pgrep】Centos/Linux pkill命令详细介绍 简介 基础语法 选项介绍 退出状态 基本用法 注意事项 简介 系统版本&#xff1a;Centos7.6 pkill命令用于杀死一个进程&#xff0c;会根据进程名称和其他属性杀死进程&#xff08;默认会向进程发送SIGTERM信号&…...

Java如何使用 HTTP 请求下载图片

工具类&#xff1a; public FileInputStream fileDownload(String fileLink) throws Exception {System.out.println("开始下载"fileLink);// 转码中文URL url new URL(encodeURLChinese(fileLink));System.out.println("fileLink:"url);// 开始下载Trust…...

ARM/Linux嵌入式面经(二十):地平线嵌入式开发

一面 1、自己介绍一下项目 一个清晰、结构化的表达能极大地提升你的专业形象。所以一定要养成结构性的回答,真的铁子,信我。 项目介绍示例 项目名称:智能温控系统 项目背景: 该项目旨在开发一款应用于智能家居环境的智能温控系统,通过精准控制室内温度,提高居住舒适度…...

无人机竞速赛

速度与激情的空中盛宴&#xff0c;无人机竞速赛再次点燃我们的肾上腺素&#xff01; 想象一下&#xff0c;数百架智能飞行器在蓝天下疾驰&#xff0c;如同未来战士穿梭于现实与虚拟的边界&#xff0c;每一次转弯、加速都精准至极&#xff0c;挑战着物理与技术的极限&#xff0…...

【书生大模型实战营(暑假场)】入门任务二 Git 关卡

入门任务二 Git 关卡 参考&#xff1a; 教程任务 注意&#xff1a; 项目Github链接 1 闯关任务 1.1 使用 Git 完成破冰介绍 本任务将基于开发机实现&#xff0c;重点在于熟悉Git操作。首先要了解 Git操作的常见四部曲&#xff0c;即&#xff1a;舔 Add&#xff0c;提 Co…...

OSPF小实验

根据题目完成下列实验&#xff1a; 拓扑图详细设计如下&#xff1a; 1.基础配置 R1&#xff1a; [R1]interface s4/0/0 [R1-Serial4/0/0]ip address 12.1.1.1 24 [R1]interface LoopBack 0 [R1-LoopBack0]ip address 1.1.1.1 24 R2&#xff1a; [R2]interface s4/0/1 [R2-…...

蛋白质生物学:从序列到结构和疾病 下载并同时打开1LYZ和1H6M的PDB文件(提交图片)。描述这种蛋白质的二级和三级结构。(10分)

Download and open the PDB files of 1LYZ and 1H6M together in one view (submit an image). Describe the secondary and tertiary structure of this protein. (10 marks) 下面给出完整详细的解答&#xff1a; 同时打开1LYZ和1H6M的PDB文件得到&#xff1a; 首先二级结构…...

用VBA在Word中随机打乱单词表,进行分列

一、效果展示&#xff08;以下是三次随机打乱的结果&#xff09; 二、代码 Sub 随机分单词到后面的单元格()Dim C1 As CellDim str, str1, aDim shuffledArray() As VariantSet C1 Selection.Range.Tables(1).Cell(1, 1)str C1.Range.textstr mid(str, 3, Len(str) - 4)str…...

UNI-APP_点击,长按,触摸,结束触摸事件

touchstartEventHandle手指触摸动作开始字节跳动小程序不支持touchmoveEventHandle手指触摸后移动字节跳动小程序不支持touchendEventHandle手指触摸动作结束字节跳动小程序不支持touchcancelEventHandle手指触摸动作被打断&#xff0c;如来电提醒&#xff0c;弹窗字节跳动小程…...

【QT】Qt 音视频

Qt 音视频 Qt 音视频1. Qt 音频2. Qt 视频 Qt 音视频 在 Qt 中&#xff0c;音频主要是通过 QSound 类来实现。但是需要注意的是 QSound 类只支持播放 wav 格式的音频文件。也就是说如果想要添加音频效果&#xff0c;那么首先需要将非 wav 格式的音频文件转换为 wav 格式。 通…...

CSP-J 复赛 模拟题6

1.大小写字母互换&#xff1a; 题目描述 由输入给定一个字符串&#xff0c;你的任务是将原字符串中的大写字母转换成其对应的小写字母&#xff0c;还要将原字符串中的小写字母转换成对应的大写字母&#xff0c;其余字符不变。 输出转换之后得到的新字符串。 输入格式 一行…...

拷贝函数的三种调用方式

1.使用一个已经创建完成的对象来初始化一个新对象&#xff0c;就比如有参构造接收了一个属性后拷贝构造copy它后可以将获取的值赋值给自己的属性 记得拷贝后还要再进行赋值才行 2.值传递的方式给函数参数 额外声明一点&#xff0c;因为我们知道struct和class很相似&#xff0c…...

C语言 | Leetcode C语言题解之第327题区间和的个数

题目&#xff1a; 题解&#xff1a; #define FATHER_NODE(i) (0 (i) ? -1 : ((i) - 1 >> 1)) #define LEFT_NODE(i) (((i) << 1) 1) #define RIGHT_NODE(i) (((i) << 1) 2)/* 优先队列&#xff08;小根堆&#xff09;。 */ typedef s…...

统计学:条件概率模型

照片由Edge2Edge Media在Unsplash上拍摄 一、介绍 在概率的许多应用中&#xff0c;不可能直接观察实验的结果&#xff1b;而是观察与结果相关的事件。因此&#xff0c;条件概率模型对于考虑和利用从观察到的事件中获得的信息至关重要。此外&#xff0c;条件概率模型与贝叶斯定理…...

前端工程师学习springboot2.x之配置idea热更新实现高效率开发节奏

目前已经学习springboot实现了增删改查分页查询&#xff0c;每次修改业财或者是代码重启项目都让我觉得很闹心&#xff0c;现在给出idea2021版本自带热更新操作设置&#xff0c;设置过程分享给大家 总结&#xff1a;以上就是配置的全部过程&#xff0c;祝大家写代码快乐…...

文本rerank与图像rerank

1、文本rerank&#xff1a; 这里介绍的是目前比较流行和通用一套方案&#xff1a;先利用特征检索&#xff08;这里是特征空间上的相似度&#xff09;&#xff0c;召回相关信息&#xff0c;然后对query与召回的相关信息进行rerank&#xff08;这里是利用cross-encoder网络做一个…...

Docker 在 Windows 系统下的使用指南:数据卷和数据库

Docker 在 Windows 系统下的使用指南&#xff1a;数据卷和数据库 Docker 提供了强大的功能来创建、管理和持久化数据。数据卷是 Docker 中用于存储和管理数据的机制&#xff0c;使得数据能够在容器的生命周期之外持久化。数据库容器可以利用数据卷来持久化数据库文件&#xff…...

Qwen3.5-35B-A3B-AWQ-4bit开源模型教程:AWQ 4bit量化多模态模型部署全流程

Qwen3.5-35B-A3B-AWQ-4bit开源模型教程&#xff1a;AWQ 4bit量化多模态模型部署全流程 想找一个能看懂图片、还能跟你聊天的AI模型&#xff1f;今天要介绍的Qwen3.5-35B-A3B-AWQ-4bit&#xff0c;就是一个专门为视觉理解设计的“聪明”模型。它不仅能分析图片内容&#xff0c;…...

计算机毕业设计:Python水网数据可视化与水位预测系统 Flask框架 数据分析 可视化 大数据 AI 线性回归 河流数据 水位预测(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝50W&#xff0c;前互联网大厂软件研发、集结硕博英豪成立软件开发工作室&#xff0c;专注于计算机相关专业项目实战6年之久&#xff0c;累计开发项目作品上万套。凭借丰富的经验与专业实力&#xff0c;已帮助成千上万的学生顺利毕业&#xff0c;…...

EF Core 10向量搜索扩展架构设计图泄露事件(内部PPT第7页已证实):这3个设计决策将重写.NET AI应用开发范式

第一章&#xff1a;EF Core 10向量搜索扩展的演进背景与战略定位随着AI应用在企业级系统中加速落地&#xff0c;传统关系型数据库的标量查询能力已难以满足语义检索、相似性匹配等新兴场景需求。EF Core 10首次将向量搜索能力深度融入ORM层&#xff0c;标志着微软在数据访问技术…...

【技术精讲】从理论到实践:手把手教你完成DFA最小化

1. 什么是DFA最小化&#xff1f;为什么需要它&#xff1f; 想象一下你正在整理一个杂乱无章的衣柜。有些衣服你从来不穿&#xff08;死状态&#xff09;&#xff0c;有些衣服功能重复&#xff08;等价状态&#xff09;。DFA最小化就像给衣柜做断舍离&#xff0c;保留所有必要的…...

Vue可视化打印设计终极指南:5分钟告别复杂代码,拖拽式布局惊艳全场

Vue可视化打印设计终极指南&#xff1a;5分钟告别复杂代码&#xff0c;拖拽式布局惊艳全场 【免费下载链接】vue-plugin-hiprint hiprint for Vue2/Vue3 ⚡打印、打印设计、可视化设计器、报表设计、元素编辑、可视化打印编辑 项目地址: https://gitcode.com/gh_mirrors/vu/v…...

WarcraftHelper 2024新版:经典魔兽争霸III兼容性优化工具全指南

WarcraftHelper 2024新版&#xff1a;经典魔兽争霸III兼容性优化工具全指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 在现代电脑上重温经典游戏…...

2025最权威的六大AI论文网站推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术研究环境里头&#xff0c;若是合理地运用AI写作工具&#xff0c;那么能够有效地…...

MapAnything损失函数深度剖析:如何设计多任务学习框架

MapAnything损失函数深度剖析&#xff1a;如何设计多任务学习框架 【免费下载链接】map-anything MapAnything: Universal Feed-Forward Metric 3D Reconstruction 项目地址: https://gitcode.com/gh_mirrors/map/map-anything MapAnything作为一款先进的通用前馈度量3D…...

PHP异步I/O迁移紧急预案(含同步代码自动转换工具链+CI/CD熔断检测脚本)

第一章&#xff1a;PHP异步I/O迁移紧急预案概览当传统阻塞式 PHP 应用遭遇高并发 I/O 瓶颈&#xff08;如大量 HTTP 请求、数据库查询或文件读写&#xff09;&#xff0c;服务响应延迟激增、连接池耗尽、CPU 利用率反常偏低——此时&#xff0c;异步 I/O 迁移已非优化选项&…...

FanControl实战指南:3步实现Windows电脑风扇智能温控

FanControl实战指南&#xff1a;3步实现Windows电脑风扇智能温控 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...