从零开始搭建一个完整的物联网系统:架构设计 + 设备通信 + 数据可视化

 一、项目目标

搭建一个完整的物联网系统,用于 实时监控环境数据(如温度、湿度)。系统主要包括:

设备端(NodeMCU + DHT11 传感器)

云平台(MQTT Broker + 数据存储)

Web端(实时图表展示)

 二、系统架构图

[传感器设备]

   ↓ (DHT11采集)

[NodeMCU]

   ↓ (MQTT通信)

[EMQX云服务器]

   ↓

[Web后端: Flask + MongoDB]

   ↓

[前端: ECharts可视化]

 三、硬件准备

设备 数量 说明

NodeMCU ESP8266 1 Wi-Fi 控制器

DHT11 传感器 1 温湿度传感器

杜邦线 若干 用于连接

MicroUSB数据线 1 上电 + 串口调试

 四、设备端编程(ESP8266 + Arduino IDE)

安装依赖

1. 安装 Arduino IDE

2. 添加 ESP8266 支持板

3. 安装库:

DHT sensor library

Adafruit Unified Sensor

PubSubClient

代码

#include <ESP8266WiFi.h>

#include <PubSubClient.h>

#include <DHT.h>

#define DHTPIN D4

#define DHTTYPE DHT11

const char* ssid = "your-wifi";

const char* password = "your-password";

const char* mqtt_server = "broker.emqx.io"; // 公共 MQTT Broker

WiFiClient espClient;

PubSubClient client(espClient);

DHT dht(DHTPIN, DHTTYPE);

void setup() {

  Serial.begin(115200);

  dht.begin();

  setup_wifi();

  client.setServer(mqtt_server, 1883);

}

void setup_wifi() {

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(1000);

    Serial.println("Connecting to WiFi...");

  }

}

void loop() {

  if (!client.connected()) {

    reconnect();

  }

  client.loop();

  float h = dht.readHumidity();

  float t = dht.readTemperature();

  String payload = "{\"temperature\":" + String(t) + ",\"humidity\":" + String(h) + "}";

  client.publish("iot/env", payload.c_str());

  delay(5000);

}

void reconnect() {

  while (!client.connected()) {

    if (client.connect("ESP8266Client")) {

      client.subscribe("iot/env");

    } else {

      delay(5000);

    }

  }

}

---

 五、搭建云端平台(MQTT + 数据存储)

你可以使用免费的 MQTT Broker,例如:

EMQX

Mosquitto

HiveMQ

数据持久化(Python + Flask + MongoDB)

pip install flask pymongo paho-mqtt

# app.py

from flask import Flask, jsonify

from pymongo import MongoClient

import paho.mqtt.client as mqtt

import json

app = Flask(__name__)

client = MongoClient("mongodb://localhost:27017/")

db = client["iot"]

collection = db["env_data"]

def on_connect(client, userdata, flags, rc):

    client.subscribe("iot/env")

def on_message(client, userdata, msg):

    data = json.loads(msg.payload.decode())

    collection.insert_one(data)

mqtt_client = mqtt.Client()

mqtt_client.on_connect = on_connect

mqtt_client.on_message = on_message

mqtt_client.connect("broker.emqx.io", 1883, 60)

mqtt_client.loop_start()

@app.route("/data")

def get_data():

    data = list(collection.find({}, {"_id": 0}))

    return jsonify(data)

if __name__ == "__main__":

    app.run(debug=True)

六、前端可视化(ECharts)

你可以使用 ECharts + Axios 获取 Flask API 的数据并动态展示。

<!DOCTYPE html>

<html>

<head>

  <meta charset="utf-8">

  <title>环境监控</title>

  <script src="https://cdn.jsdelivr.net/npm/echarts"></script>

  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

</head>

<body>

  <div id="main" style="width: 800px; height: 600px;"></div>

  <script>

    const chart = echarts.init(document.getElementById('main'));

    function fetchData() {

      axios.get('/data').then(response => {

        const data = response.data;

        const times = data.map((_, i) => i);

        const temp = data.map(d => d.temperature);

        const humi = data.map(d => d.humidity);

        chart.setOption({

          title: { text: '温湿度实时数据' },

          tooltip: {},

          legend: { data: ['温度', '湿度'] },

          xAxis: { data: times },

          yAxis: {},

          series: [

            { name: '温度', type: 'line', data: temp },

            { name: '湿度', type: 'line', data: humi }

          ]

        });

      });

    }

    setInterval(fetchData, 5000);

    fetchData();

  </script>

</body>

</html>

七、总结与提升

本项目展示了一个基础但完整的物联网系统:

设备层: 传感器 + 控制器(ESP8266)

网络层: MQTT 协议连接

平台层: 后端存储 + 接口服务

应用层: 前端数据展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值