10分钟上手marimo:物联网设备数据实时可视化全攻略
还在为物联网设备数据采集后的处理流程头疼?marimo作为新一代Python笔记本,能让你用几行代码完成从传感器数据接收、实时处理到可视化仪表盘的全流程搭建。本文将带你从零开始构建一个物联网数据监控系统,无需复杂后端知识,全程可视化操作。
为什么选择marimo处理物联网数据?
传统物联网数据处理往往需要搭建复杂的后端服务、数据库和前端展示系统,而marimo通过以下特性简化这一流程:
- 即时响应的交互界面:通过marimo.ui组件快速构建控制面板
- 内置数据处理能力:支持Pandas/Polars数据框架,兼容各类传感器数据格式
- 低代码可视化:一行代码生成动态图表,支持实时数据更新
- 轻量级部署:单个
.py文件即可部署为Web应用,适合边缘设备
快速开始:构建你的第一个物联网数据仪表盘
1. 准备工作
首先确保已安装marimo:
pip install marimo
创建新项目文件:
marimo create iot_dashboard.py
2. 模拟传感器数据输入
虽然marimo没有内置的IoT协议支持,但我们可以通过模拟数据展示完整流程。以下代码创建一个模拟温度传感器数据流:
import marimo
import random
import time
from datetime import datetime
app = marimo.App()
@app.cell
def _():
import marimo as mo
import polars as pl
import matplotlib.pyplot as plt
return (mo, pl, plt)
@app.cell
def _(mo):
# 创建模拟传感器数据生成器
def generate_sensor_data():
return {
"timestamp": datetime.now().isoformat(),
"temperature": round(random.uniform(20.0, 30.0), 2),
"humidity": round(random.uniform(30.0, 70.0), 2),
"pressure": round(random.uniform(980.0, 1020.0), 2)
}
# 创建数据存储状态
sensor_data, set_sensor_data = mo.state([generate_sensor_data()])
# 创建刷新按钮
refresh_button = mo.ui.button("刷新数据")
# 点击按钮更新数据
if refresh_button.clicked:
new_data = generate_sensor_data()
set_sensor_data(sensor_data.value + [new_data])
return (generate_sensor_data, sensor_data, set_sensor_data, refresh_button)
3. 数据表格展示
使用marimo的表格组件展示历史数据,支持排序和过滤:
@app.cell
def _(mo, sensor_data):
# 显示数据表格
data_table = mo.ui.table(
sensor_data.value,
hover_template="{{timestamp}}: 温度={{temperature}}°C",
header_tooltip={
"timestamp": "采集时间",
"temperature": "温度(°C)",
"humidity": "湿度(%)",
"pressure": "气压(hPa)"
}
)
data_table
return (data_table,)
完整表格组件用法可参考examples/ui/table.py,该示例展示了如何添加悬停提示、自定义表头说明和处理长表格滚动。
4. 实时趋势图表
将传感器数据可视化为时间序列图表,直观展示变化趋势:
@app.cell
def _(plt, sensor_data):
# 转换数据为DataFrame
df = pl.DataFrame(sensor_data.value)
# 创建温度趋势图
plt.figure(figsize=(10, 4))
plt.plot(df["timestamp"], df["temperature"], 'r-', marker='o')
plt.title("温度变化趋势")
plt.xticks(rotation=45)
plt.tight_layout()
plt.gca()
return (df,)
marimo支持多种可视化库,包括Matplotlib、Plotly和Altair。更复杂的图表示例可参考examples/outputs/plots.py。
5. 数据持久化存储
将采集的数据保存到CSV文件,以便后续分析:
@app.cell
def _(df, mo):
# 创建保存按钮
save_button = mo.ui.button("保存数据到CSV")
# 点击保存数据
if save_button.clicked:
df.write_csv("sensor_data.csv")
mo.md("✅ 数据已保存到 sensor_data.csv")
save_button
return (save_button,)
数据编辑和保存的完整示例可参考examples/ui/data_editor.py,该示例展示了如何创建可编辑表格并保存修改。
系统架构与扩展方向
数据流程
marimo物联网数据处理系统的核心流程如下:
功能扩展建议
- 真实设备接入:通过Python MQTT库(paho-mqtt)替换模拟数据生成器,代码示例:
import paho.mqtt.client as mqtt
def on_message(client, userdata, msg):
sensor_data = json.loads(msg.payload)
set_sensor_data(sensor_data.value + [sensor_data])
client = mqtt.Client()
client.on_message = on_message
client.connect("mqtt.eclipseprojects.io", 1883, 60)
client.subscribe("sensor/temperature")
client.loop_start()
-
云端集成:参考examples/cloud/gcp/google_cloud_bigquery.py将数据同步到云端数据库
-
告警系统:添加阈值判断和通知功能:
if df["temperature"].last() > 28.0:
mo.ui.alert("温度过高警告!", type="warning")
部署与运行
将完整代码保存为iot_dashboard.py,通过以下命令运行:
marimo run iot_dashboard.py
marimo会自动启动Web服务器,在浏览器中打开http://localhost:8080即可访问你的物联网数据仪表盘。对于边缘设备部署,可以使用marimo deploy命令生成独立可执行文件。
总结
本文展示了如何使用marimo快速构建物联网数据处理系统,主要包括:
- 数据采集与模拟
- 表格数据展示
- 趋势可视化
- 数据持久化
通过marimo的交互式编程环境,你可以在一个文件中完成从数据处理到UI设计的全流程,大大简化了物联网应用的开发复杂度。更多高级用法可参考官方文档docs/index.md和示例库examples/。
你还想扩展哪些物联网功能?欢迎在评论区留言,下一期我们将介绍如何添加AI异常检测功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



