0


物联网应用:MQTT数据发送+前端vue的交互+Echarts

前言

在物联网应用中,单片机硬件数据可以通过NB-IoT,LoRa等广域网通信进行数据传递。

NBIoT:低功耗广域网,覆盖广、连接多、速率快、成本低、功耗低、架构优

LoRa:广域网无线通信:由终端、网关、网络服务器、应用服务器组成,具有低功耗、覆盖范围广,抗干扰强的特点,可用于上km的远距离传输,几百kb,应用于企业智能抄表等等

这里使用的是MQTT协议发送,数据格式为JSON,前端Vue调用数据展示

MQTT订阅与数据发送

数据发送是以基于ESP32的等硬件发送

通过MQTTX的数据测试软件完成我们的信息, 并设置订阅一个主题:

注意:由于MQTT发送方和接收方是两个用户,所以ID不能相同

前端Vue引用

import mqtt from 'mqtt/dist/mqtt.min.js';

methods方法中:

initMqttConnection() {

  1. // 填写端口号和用户名 密码
  2. this.client = mqtt.connect('ws://59.11x.xxx.xx:端口号/mqtt', {
  3. username: '',
  4. password: ''
  5. });
  6. this.client.on('connect', () => {
  7. console.log('MQTT connected');
  8. // 订阅的主题
  9. this.client.subscribe('topic/01');
  10. });
  11. this.client.on('message', (topic, message) => {
  12. const data = JSON.parse(message.toString());
  13. console.log('MQTT JSON Data:', data);
  14. this.updateData(data);
  15. });
  16. this.client.on('error', (err) => {
  17. console.log('MQTT connection error:', err);
  18. });
  19. },

mounted中挂载

mounted() {

  1. this.initMqttConnection();

},


完整的测试代码

JSON数据:

  1. {
  2. "Tem": 22,
  3. "Hum": 60,
  4. "SoilHum": 70,
  5. "WLeval": 14,
  6. "WQuality": "10"
  7. }
<template>
  1. <h1>MQTT Real-time Data</h1>
  2. <div class="sensor-data-container">
  3. <div class="sensor-data-item">
  4. <div class="label">Temperature</div>
  5. <div class="value">{{ temperature }}°C</div>
  6. </div>
  7. <div class="sensor-data-item">
  8. <div class="label">Humidity</div>
  9. <div class="value">{{ humidity }}%</div>
  10. </div>
  11. <div class="sensor-data-item">
  12. <div class="label">Soil Humidity</div>
  13. <div class="value">{{ soilHumidity }}%</div>
  14. </div>
  15. <div class="sensor-data-item">
  16. <div class="label">Water Level</div>
  17. <div class="value">{{ waterLevel }}cm</div>
  18. </div>
  19. <div class="sensor-data-item">
  20. <div class="label">Water Quality</div>
  21. <div class="value">{{ waterQuality }}</div>
  22. </div>
  23. </div>
</template> <script> import * as mqtt from 'mqtt/dist/mqtt.min' export default { name: 'App', data() { return { client: null, temperature: 0, humidity: 0, soilHumidity: 0, waterLevel: 0, waterQuality: '' } }, mounted() { this.connectMQTT() }, methods: { connectMQTT() { // this.client = mqtt.connect('mqtt://broker.emqx.io:1883', { this.client = mqtt.connect('ws://59.11x.xxx.xx:端口号/mqtt', { clientId: '', username: '', password: '' }); this.client.on('connect', () => { console.log('MQTT connection successful!') this.client.subscribe('topic/01') }) this.client.on('message', (topic, message) => { console.log(`Received message from ${topic}: ${message.toString()}`) const data = JSON.parse(message.toString()) this.temperature = data.Tem this.humidity = data.Hum this.soilHumidity = data.SoilHum this.waterLevel = data.WLeval this.waterQuality = data.WQuality }) this.client.on('error', (err) => { console.error('MQTT connection error:', err) }) } } } </script> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } .sensor-data-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 20px; margin-top: 40px; } .sensor-data-item { background-color: #f4f4f4; border-radius: 8px; padding: 20px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .label { font-weight: bold; margin-bottom: 10px; } .value { font-size: 24px; } </style>

效果图:

Echarts的使用和渲染

import * as echarts from 'echarts';

// or

import echarts from 'echarts'

// 这里以温度为例

//初始化

{{ temperature }}°C
  1. <div class="data-chart">
  2. <div ref="tempChart" style="width: 100%; height: 180px;"></div>
  3. </div>
  4. </div>

//mounted挂载

this.initCharts();

// 初始化

initCharts() {

  1. this.tempChart = echarts.init(this.$refs.tempChart);

}

//

updateData(data) {

  1. this.temperature = data.Tem;

}

//写入图表

updateCharts(data) {

  1. this.tempChartData.push(data.Tem);

}

// 图表格式数据

this.tempChart.setOption({

  1. grid: {
  2. top: '10%',
  3. bottom: '10%',
  4. left: '10%',
  5. right: '10%'
  6. },
  7. xAxis: {
  8. type: 'category',
  9. splitLine: {
  10. show: false
  11. }
  12. },
  13. yAxis: {
  14. type: 'value',
  15. min: 0,
  16. max: 50,
  17. splitLine: {
  18. show: false
  19. }
  20. },
  21. series: [
  22. {
  23. data: this.tempChartData,
  24. type: 'bar',
  25. itemStyle: {
  26. color: '#ff6b6b'
  27. }
  28. }
  29. ],
  30. tooltip: {
  31. trigger: 'axis',
  32. formatter: '{b}: {c}°C'
  33. }
  34. });

Echart数据效果图:

传MQTT数据后

标签: 前端 vue.js echarts

本文转载自: https://blog.csdn.net/weixin_72775126/article/details/138288562
版权归原作者 Intelleee 所有, 如有侵权,请联系我们删除。

“物联网应用:MQTT数据发送+前端vue的交互+Echarts”的评论:

还没有评论