跳到主要内容

传感器数据采集模拟器

没有真实硬件时,你可以先写一个模拟器,周期性生成传感器数据,并把数据序列化为 JSON。这对 IoT 后端、协议调试和数据管道测试很有用。

添加依赖

Cargo.toml
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"

编写代码

src/main.rs
use serde::Serialize;
use std::thread;
use std::time::{Duration, SystemTime, UNIX_EPOCH};

#[derive(Serialize)]
struct SensorData {
device_id: String,
temperature: f32,
humidity: f32,
timestamp: u64,
}

fn now() -> u64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_secs()
}

fn main() -> Result<(), serde_json::Error> {
let mut temperature = 25.0;

loop {
temperature += 0.1;

let data = SensorData {
device_id: "sensor-001".to_string(),
temperature,
humidity: 60.0,
timestamp: now(),
};

println!("{}", serde_json::to_string(&data)?);
thread::sleep(Duration::from_secs(1));
}
}

示例输出

{"device_id":"sensor-001","temperature":25.1,"humidity":60.0,"timestamp":1720000000}

可以继续扩展

  • 写入文件
  • 通过 UDP 发送
  • 通过 MQTT 上报
  • 加入随机波动
  • 支持命令行参数设置设备编号

小结

模拟器能让你在没有硬件时先验证数据格式和系统链路。Rust 的结构体和 serde 很适合表达这类结构化数据。