小工具知识网

当前位置: 首页 > 行业知识 > 【物联网项目】前端uniapp连接后端、硬件,使用Echarts

行业知识

【物联网项目】前端uniapp连接后端、硬件,使用Echarts

2026-11-13 11:46:52 来源:互联网转载

前言

在大二结束的暑假,自己一直都在准备湖南省的物联网技能赛。比赛要求是在三个小时内快速搭建物联网项目题,需包含PC端和APP端,因此我们选择了使用uniapp来搭建项目。经过暑假两个月的学习和训练,自己在物联网项目上有了进一步的了解。不仅学会了前端应该如何与后端、硬件连接,也进一步学习了如何使用uniapp。现将在此期间在网络上搜罗到了资料,总结分享在这里。

作者简介:前端新人小白

博客首页:我的学习笔记

‍♀️近期目标:深入学习三剑客

目录

⛳前端连接后端

具体使用步骤

1.创建一个utils文件夹,在里面创建request.js文件

2.在utils文件下创建api.js文件

3.vue页面使用

⛳前端连接硬件

一、安装环境

二、具体使用步骤

1.配置连接参数

2.vue页面引用mqtt

⛳uniapp使用echarts图表

一、安装环境

二、具体使用步骤

 结尾


⛳前端连接后端

具体使用步骤

1.创建一个utils文件夹,在里面创建request.js文件

request.js内容

// 服务器地址const BASE_URL = '/api' // 代理的api或者后端地址 // 请求,参数{url:'', data:{}, method:'POST'}export const request = (options) => {return new Promise((resolve, reject) => {console.log(options.url);uni.request({url: BASE_URL + options.url,method: options.method || 'GET',// header:{token: uni.getStorage('user') ? uni.getStorage('user').token : ''},            // 后端需要的请求头header: {Authorization: uni.getStorageSync('token') ?`Bearer ${uni.getStorageSync('token')}` : '',Client: 'APP'},data: options.data || {},success: res => {const data = res.dataif (data.code === 401) {uni.reLaunch({url: '/pages/login/login'})return}resolve(data)},fail: error => {uni.showToast({icon: 'error',title: '操作错误'})reject(error)}})})}

2.在utils文件下创建api.js文件

api.js内容

import { request } from '@/utils/request.js' /** * 接口 * @param data  请求数据 * @@return */export const add = data => {return request({url: '接口',method: '请求方法',data })}

3.vue页面使用

import { getList } from '@/api/getList.js' // 然后直接使用methods: {/**获取数据*/init(){getList(this.paramas).then(res => {console.log(res)})},}

⛳前端连接硬件

uniapp使用MQTT协议连接emqx,进而给硬件发送消息

一、安装环境

在uniapp项目终端分别运行安装mqtt和uuid的命令行

uuid生成的唯一标识码用于生成mqtt中的clientId,防止clientId与他人重复,导致mqtt连接失败。

npm install mqttnpm install uuid

二、具体使用步骤

1.配置连接参数

在utils文件下新建mqtt.js文件

mqtt.js内容:

export const MQTT_IP = '192.168.9.128:8083/mqtt'//mqtt地址端口, 使用emqx时一定要加mqttconst MQTT_USERNAME = 'public'//mqtt用户名const MQTT_PASSWORD = 'public'//密码export const MQTT_OPTIONS = {    connectTimeout: 5000,    clientId: '',    username: MQTT_USERNAME,    password: MQTT_PASSWORD,    clean: false}

2.vue页面引用mqtt

vue页面:

    import { v4 } from 'uuid';    import {        MQTT_IP,        MQTT_OPTIONS    } from '@/utils/mqtt.js';    var mqtt = require('mqtt/dist/mqtt.js')    var client    export default {        mounted() {this.connect() //连接        },        methods: {            connect() {                MQTT_OPTIONS.clientId = v4()                var that = this                // #ifdef H5                client = mqtt.connect('ws://' + MQTT_IP, MQTT_OPTIONS)                // #endif                // #ifdef MP-WEIXIN||APP-PLUS                client = mqtt.connect('wx://' + MQTT_IP, MQTT_OPTIONS)                // #endif                client.on('connect', function() {                    console.log('连接成功')client.publish('填写要发布主题', '填写要发布的内容', {qos: 1})                    client.subscribe('填写要订阅主题', function(err) {                        if (!err) {                            console.log('订阅成功')                        }                    })                }).on('reconnect', function(error) {                    console.log('正在重连...')                }).on('error', function(error) {                    console.log('连接失败...', error)                }).on('end', function() {                    console.log('连接断开')                }).on('message', function(topic, message) {                    console.log('接收推送信息:', message.toString())                })            }        }    }

⛳uniapp使用echarts图表

一、安装环境

uniapp终端输入指令

pnpm add echarts-or-npm install echarts

二、具体使用步骤

HTML

 

 script

import * as echarts from 'echarts'export default {    data() {        return {            option: {                tooltip: {                    trigger: 'axis',                    axisPointer: {                        type: 'shadow'                     },                    confine: true                },                legend: {                    data: ['热度', '正面', '负面']                },                grid: {                    left: 20,                    right: 20,                    bottom: 15,                    top: 40,                    containLabel: true                },                xAxis: [                    {                        type: 'value',                        axisLine: {                            lineStyle: {                                color: '#999999'                            }                        },                        axisLabel: {                            color: '#666666'                        }                    }                ],                yAxis: [                    {                        type: 'category',                        axisTick: { show: false },                        data: ['汽车之家', '今日头条', '百度贴吧', '一点资讯', '微信', '微博', '知乎'],                        axisLine: {                            lineStyle: {                                color: '#999999'                            }                        },                        axisLabel: {                            color: '#666666'                        }                    }                ],                series: [                    {                        name: '热度',                        type: 'bar',                        label: {                            normal: {                                show: true,                                position: 'inside'                            }                        },                        data: [300, 270, 340, 344, 300, 320, 310],                    },                    {                        name: '正面',                        type: 'bar',                        stack: '总量',                        label: {                            normal: {                                show: true                            }                        },                        data: [120, 102, 141, 174, 190, 250, 220]                    },                    {                        name: '负面',                        type: 'bar',                        stack: '总量',                        label: {                            normal: {                                show: true,                                position: 'left'                            }                        },                        data: [-20, -32, -21, -34, -90, -130, -110]                    }                ]            },        };    },    // 组件能被调用必须是组件的节点已经被渲染到页面上    // 在页面mounted里调用,有时候mounted 组件也未必渲染完成    mounted() {        this.$refs.chart.init(echarts, chart => {            chart.setOption(this.option);        });    },

上一篇:众人帮修改真实姓名指南,如何避免潜在法律风险?

下一篇:医院服务器装机怎么装?