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

使用python脚本储存mosquito服务器数据到sqlite

一、架构

下位机(esp32)→ MQTT broker(mosquito)→上位机(python前端)

                                              python脚本

                                               sqlite数据库

二、安装sqlite

1、更新系统

sudo apt update

2、安装python3和pip

sudo apt install python3 python3-pip

3、安装需要的python库

pip3 install paho-mqtt

4、安装sqlite

sudo apt install sqlite3

三、执行python脚本

1、python脚本编写

import sqlite3
import json
import paho.mqtt.client as mqtt
from datetime import datetime# ==================== 配置区域 ====================
MQTT_BROKER = "192.168.136.55"
MQTT_PORT = 1883
MQTT_TOPIC = "test/esp32/data"  # 请确保与ESP32发布的主题一致DATABASE_FILE = '/home/han/sensor_data.db'  # 数据库文件路径CLIENT_ID = "python_database"USERNAME = "han2"
PASSWORD = "123456"# ================================================# 初始化数据库
def init_db():conn = sqlite3.connect(DATABASE_FILE)c = conn.cursor()# 创建表(如果不存在)c.execute('''CREATE TABLE IF NOT EXISTS sensor_data (id INTEGER PRIMARY KEY AUTOINCREMENT,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,topic TEXT NOT NULL,temperature REAL,humidity REAL)''')conn.commit()conn.close()print(f"Database initialized at {DATABASE_FILE}")# MQTT 回调函数
def on_connect(client, userdata, flags, rc):print(f"Connected to MQTT broker with result code {rc}")client.subscribe(MQTT_TOPIC)print(f"Subscribed to topic: {MQTT_TOPIC}")def on_message(client, userdata, msg):try:payload = msg.payload.decode()print(f"Received: [{msg.topic}] {payload}")# 解析JSONdata = json.loads(payload)sensor_data = data.get('params', {})  # 适配您的格式# 提取数据temp = sensor_data.get('temp')humidity = sensor_data.get('humidity')# 写入数据库conn = sqlite3.connect(DATABASE_FILE)c = conn.cursor()c.execute("INSERT INTO sensor_data (topic, temperature, humidity) VALUES (?, ?, ?)",(msg.topic, temp, humidity))conn.commit()conn.close()print(f"Data stored: Temp={temp}, Humidity={humidity}")except Exception as e:print(f"Error processing message: {e}")# 主程序
if __name__ == "__main__":print("Starting MQTT to SQLite bridge...")init_db()client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, CLIENT_ID)client.on_connect = on_connectclient.on_message = on_message# 如果服务器需要认证,请取消下面两行的注释# client.username_pw_set(USERNAME, PASSWORD)client.connect(MQTT_BROKER, MQTT_PORT, 60)client.loop_forever()

2、运行脚本

①在FinalShell上,上传写好的python程序。

②运行程序
nohup python3 mqtt_to_sqlite.py > bridge.log 2>&1 &
③检查进程是否运行
ps aux | grep python3

四、查看数据库

查看数据库之前应该确定下位机已经开始发数据了。

打开数据库 + 查询所有数据
han@han:~$ sqlite3 sensor_data.db 
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> select * from sensor_data...> ;
1|2025-09-11 11:45:12|test/esp32/data|98.0|99.0
2|2025-09-11 11:45:15|test/esp32/data|99.0|100.0
3|2025-09-11 11:45:18|test/esp32/data|0.0|1.0
4|2025-09-11 11:45:21|test/esp32/data|1.0|2.0
5|2025-09-11 11:45:24|test/esp32/data|2.0|3.0
6|2025-09-11 11:45:27|test/esp32/data|3.0|4.0
7|2025-09-11 11:45:30|test/esp32/data|4.0|5.0
8|2025-09-11 11:45:33|test/esp32/data|5.0|6.0
9|2025-09-11 11:45:36|test/esp32/data|6.0|7.0
10|2025-09-11 11:45:39|test/esp32/data|7.0|8.0
11|2025-09-11 11:45:42|test/esp32/data|8.0|9.0
12|2025-09-11 11:45:45|test/esp32/data|9.0|10.0
13|2025-09-11 11:45:48|test/esp32/data|10.0|11.0
14|2025-09-11 11:45:51|test/esp32/data|11.0|12.0
15|2025-09-11 11:45:54|test/esp32/data|12.0|13.0
16|2025-09-11 11:45:57|test/esp32/data|13.0|14.0
17|2025-09-11 11:46:00|test/esp32/data|14.0|15.0
18|2025-09-11 11:46:03|test/esp32/data|15.0|16.0
19|2025-09-11 11:46:06|test/esp32/data|16.0|17.0
20|2025-09-11 11:46:09|test/esp32/data|17.0|18.0
21|2025-09-11 11:46:12|test/esp32/data|18.0|19.0
22|2025-09-11 11:46:15|test/esp32/data|19.0|20.0
23|2025-09-11 11:46:18|test/esp32/data|20.0|21.0
24|2025-09-11 11:46:21|test/esp32/data|21.0|22.0
25|2025-09-11 11:46:24|test/esp32/data|22.0|23.0
26|2025-09-11 11:46:27|test/esp32/data|23.0|24.0
27|2025-09-11 11:46:30|test/esp32/data|24.0|25.0
28|2025-09-11 11:46:33|test/esp32/data|25.0|26.0
29|2025-09-11 11:46:36|test/esp32/data|26.0|27.0
30|2025-09-11 11:46:39|test/esp32/data|27.0|28.0
31|2025-09-11 11:46:42|test/esp32/data|28.0|29.0
32|2025-09-11 11:46:45|test/esp32/data|29.0|30.0
33|2025-09-11 11:46:48|test/esp32/data|30.0|31.0
34|2025-09-11 11:46:51|test/esp32/data|31.0|32.0
35|2025-09-11 11:46:54|test/esp32/data|32.0|33.0
36|2025-09-11 11:46:57|test/esp32/data|33.0|34.0
37|2025-09-11 11:47:00|test/esp32/data|34.0|35.0
38|2025-09-11 11:47:03|test/esp32/data|35.0|36.0
39|2025-09-11 11:47:06|test/esp32/data|36.0|37.0
40|2025-09-11 11:47:09|test/esp32/data|37.0|38.0
41|2025-09-11 11:47:12|test/esp32/data|38.0|39.0
42|2025-09-11 11:47:15|test/esp32/data|39.0|40.0
43|2025-09-11 11:47:18|test/esp32/data|40.0|41.0
44|2025-09-11 11:47:21|test/esp32/data|41.0|42.0
45|2025-09-11 11:47:24|test/esp32/data|42.0|43.0
46|2025-09-11 11:47:27|test/esp32/data|43.0|44.0
47|2025-09-11 11:47:30|test/esp32/data|44.0|45.0
48|2025-09-11 11:47:33|test/esp32/data|45.0|46.0
49|2025-09-11 11:47:36|test/esp32/data|46.0|47.0
50|2025-09-11 11:47:39|test/esp32/data|47.0|48.0
51|2025-09-11 11:47:42|test/esp32/data|48.0|49.0
52|2025-09-11 11:47:45|test/esp32/data|49.0|50.0
53|2025-09-11 11:47:48|test/esp32/data|50.0|51.0
54|2025-09-11 11:47:51|test/esp32/data|51.0|52.0
55|2025-09-11 11:47:54|test/esp32/data|52.0|53.0
56|2025-09-11 11:47:57|test/esp32/data|53.0|54.0
57|2025-09-11 11:48:00|test/esp32/data|54.0|55.0
58|2025-09-11 11:48:03|test/esp32/data|55.0|56.0
59|2025-09-11 11:48:06|test/esp32/data|56.0|57.0
60|2025-09-11 11:48:09|test/esp32/data|57.0|58.0
61|2025-09-11 11:48:12|test/esp32/data|58.0|59.0
62|2025-09-11 11:48:15|test/esp32/data|59.0|60.0
63|2025-09-11 11:48:18|test/esp32/data|60.0|61.0
64|2025-09-11 11:48:21|test/esp32/data|61.0|62.0
65|2025-09-11 11:48:24|test/esp32/data|62.0|63.0
66|2025-09-11 11:48:27|test/esp32/data|63.0|64.0
67|2025-09-11 11:48:30|test/esp32/data|64.0|65.0
68|2025-09-11 11:48:33|test/esp32/data|65.0|66.0
69|2025-09-11 11:48:36|test/esp32/data|66.0|67.0
70|2025-09-11 11:48:39|test/esp32/data|67.0|68.0
71|2025-09-11 11:48:42|test/esp32/data|68.0|69.0
72|2025-09-11 11:48:45|test/esp32/data|69.0|70.0
73|2025-09-11 11:48:48|test/esp32/data|70.0|71.0
74|2025-09-11 11:48:51|test/esp32/data|71.0|72.0
75|2025-09-11 11:48:54|test/esp32/data|72.0|73.0
76|2025-09-11 11:48:57|test/esp32/data|73.0|74.0
77|2025-09-11 11:49:00|test/esp32/data|74.0|75.0
78|2025-09-11 11:49:03|test/esp32/data|75.0|76.0
79|2025-09-11 11:49:06|test/esp32/data|76.0|77.0
80|2025-09-11 11:49:09|test/esp32/data|77.0|78.0
81|2025-09-11 11:49:12|test/esp32/data|78.0|79.0
82|2025-09-11 11:49:15|test/esp32/data|79.0|80.0
83|2025-09-11 11:49:18|test/esp32/data|80.0|81.0
84|2025-09-11 11:49:21|test/esp32/data|81.0|82.0
85|2025-09-11 11:49:24|test/esp32/data|82.0|83.0
86|2025-09-11 11:49:27|test/esp32/data|83.0|84.0
87|2025-09-11 11:49:30|test/esp32/data|84.0|85.0
88|2025-09-11 11:49:33|test/esp32/data|85.0|86.0
89|2025-09-11 11:49:36|test/esp32/data|86.0|87.0
90|2025-09-11 11:49:39|test/esp32/data|87.0|88.0
91|2025-09-11 11:49:42|test/esp32/data|88.0|89.0
92|2025-09-11 11:49:45|test/esp32/data|89.0|90.0
93|2025-09-11 11:49:48|test/esp32/data|90.0|91.0
94|2025-09-11 11:49:51|test/esp32/data|91.0|92.0
95|2025-09-11 11:49:54|test/esp32/data|92.0|93.0
96|2025-09-11 11:49:57|test/esp32/data|93.0|94.0
97|2025-09-11 11:50:00|test/esp32/data|94.0|95.0
98|2025-09-11 11:50:03|test/esp32/data|95.0|96.0
99|2025-09-11 11:50:06|test/esp32/data|96.0|97.0
100|2025-09-11 11:50:09|test/esp32/data|97.0|98.0
101|2025-09-11 11:50:12|test/esp32/data|98.0|99.0
102|2025-09-11 11:50:15|test/esp32/data|99.0|100.0
103|2025-09-11 11:50:18|test/esp32/data|0.0|1.0
104|2025-09-11 11:50:21|test/esp32/data|1.0|2.0
105|2025-09-11 11:50:24|test/esp32/data|2.0|3.0
106|2025-09-11 11:50:27|test/esp32/data|3.0|4.0
107|2025-09-11 11:50:30|test/esp32/data|4.0|5.0
108|2025-09-11 11:50:33|test/esp32/data|5.0|6.0
109|2025-09-11 11:50:36|test/esp32/data|6.0|7.0
110|2025-09-11 11:50:39|test/esp32/data|7.0|8.0
111|2025-09-11 11:50:42|test/esp32/data|8.0|9.0
112|2025-09-11 11:50:45|test/esp32/data|9.0|10.0
113|2025-09-11 11:50:48|test/esp32/data|10.0|11.0
114|2025-09-11 11:50:51|test/esp32/data|11.0|12.0
115|2025-09-11 11:50:54|test/esp32/data|12.0|13.0
116|2025-09-11 11:50:57|test/esp32/data|13.0|14.0
117|2025-09-11 11:51:00|test/esp32/data|14.0|15.0
118|2025-09-11 11:51:03|test/esp32/data|15.0|16.0
119|2025-09-11 11:51:06|test/esp32/data|16.0|17.0
120|2025-09-11 11:51:09|test/esp32/data|17.0|18.0
121|2025-09-11 11:51:12|test/esp32/data|18.0|19.0
122|2025-09-11 11:51:15|test/esp32/data|19.0|20.0
123|2025-09-11 11:51:18|test/esp32/data|20.0|21.0
124|2025-09-11 11:51:21|test/esp32/data|21.0|22.0
125|2025-09-11 11:51:24|test/esp32/data|22.0|23.0
126|2025-09-11 11:51:27|test/esp32/data|23.0|24.0
127|2025-09-11 11:51:30|test/esp32/data|24.0|25.0
128|2025-09-11 11:51:33|test/esp32/data|25.0|26.0
129|2025-09-11 11:51:36|test/esp32/data|26.0|27.0
130|2025-09-11 11:51:39|test/esp32/data|27.0|28.0
131|2025-09-11 11:51:42|test/esp32/data|28.0|29.0
132|2025-09-11 11:51:45|test/esp32/data|29.0|30.0
133|2025-09-11 11:51:48|test/esp32/data|30.0|31.0
134|2025-09-11 11:51:51|test/esp32/data|31.0|32.0
135|2025-09-11 11:51:54|test/esp32/data|32.0|33.0


文章转载自:

http://fbSQ7jan.mnjyf.cn
http://rjMqGzzH.mnjyf.cn
http://LaTL5xEJ.mnjyf.cn
http://beEhI5Sq.mnjyf.cn
http://iYPr1FK3.mnjyf.cn
http://fn0rMeIQ.mnjyf.cn
http://mpC7g7hW.mnjyf.cn
http://Z4R3QtmD.mnjyf.cn
http://bLapLyvh.mnjyf.cn
http://QMUr9s42.mnjyf.cn
http://1xmWypLl.mnjyf.cn
http://Rp8SFlOt.mnjyf.cn
http://meKpaWEl.mnjyf.cn
http://ZePsTixQ.mnjyf.cn
http://k9J1Y4v4.mnjyf.cn
http://CKwn9aeE.mnjyf.cn
http://Oop48oEe.mnjyf.cn
http://E6N2M14J.mnjyf.cn
http://yPJXS4JX.mnjyf.cn
http://qfdUkqzW.mnjyf.cn
http://rVIARzSJ.mnjyf.cn
http://Q6xSvSLH.mnjyf.cn
http://la66Zx71.mnjyf.cn
http://oangxXsY.mnjyf.cn
http://4QSfU4id.mnjyf.cn
http://VKHEmZsO.mnjyf.cn
http://q9znn4Iu.mnjyf.cn
http://xGKAYj5f.mnjyf.cn
http://QZvwlj0a.mnjyf.cn
http://5EkHRoRG.mnjyf.cn
http://www.dtcms.com/a/378216.html

相关文章:

  • win10使用ssh访问vmware虚拟机
  • 高并发服务器-多路IO转接-select
  • 【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT工具替代
  • 你知道服务器和电脑主机的区别吗?
  • 接力邓承浩,姜海荣能讲好深蓝汽车新故事吗?
  • 广东充电芯片助力新能源汽车车载系统升级
  • 大数据电商流量分析项目实战:Day2-1 补充Mysql和sql安装和学习
  • 【Unity UGUI 交互组件——Dropdown(TMP版本)(10)】
  • 自动化拨号爬虫体系:虚拟机集群部署与增量管理
  • 【机器人运动学】正运动学分析
  • 基于机器学习的P2P网贷平台信用违约预测模型
  • 工厂怎么认证iso14067
  • flutter项目 -- 换logo、名称 、签名、打包
  • 【Windows】VMware安装Ubuntu操作系统
  • 仿函数的分析与应用
  • 框架漏洞详解
  • Day02 集合 | 30. 串联所有单词的子串、146. LRU 缓存、811. 子域名访问计数
  • 基于springboot的教育资源共享管理系统
  • 汽车网络安全 CyberSecurity ISO/SAE 21434 测试之一
  • Fiddler
  • 【软件设计师(中级)】P1 计算机系统知识(待完成)
  • KronosTokenizer结构解析
  • (网络编程)网络编程套接字 UDP的socket API 代码解析
  • iPhone17系列发布!跨端如何破局?
  • 把nginx、jar包、redis做成windows系统服务,开机自动启动
  • Java学习笔记四(继承)
  • Redis分布式锁的try-with-resources实现
  • 广东省省考备考(第九十七天9.11)——言语(刷题巩固第三节课)
  • ReentrantLock 源码深度解析
  • 机器人驭风而行:低空经济如何开启智能新纪元