《ESP32 物联网全栈实战-11》小程序进阶
第 11 篇小程序进阶——ECharts 图表 历史查询 告警推送上篇做了一个能看能控的基础版。这篇加上三个进阶功能温度曲线ECharts、历史数据查询HTTP API InfluxDB、阈值告警推送。1. 集成 ECharts 温度曲线微信小程序用echarts-for-weixin组件。这是 ECharts 官方适配的小程序版。安装# 项目根目录npminstallec-canvas# 然后开发者工具 → 工具 → 构建 npm页面中引入pages/history/history.json{usingComponents:{ec-canvas:../../ec-canvas/ec-canvas},navigationBarTitleText:温度历史}pages/history/history.wxmlviewclasscontainerviewclasschart-boxec-canvasidtempChartcanvas-idtempChartec{{ec}}/ec-canvas/viewviewclasstime-tabsbuttonsizeminibindtaploadHistorydata-range1h近1小时/buttonbuttonsizeminibindtaploadHistorydata-range6h近6小时/buttonbuttonsizeminibindtaploadHistorydata-range24h近24小时/button/view/viewpages/history/history.jsimport*asechartsfrom../../ec-canvas/echarts;Page({data:{ec:{// 懒加载canvas 渲染完成后才初始化 EChartslazyLoad:true,},tempData:[],humiData:[],},onLoad(){// 获取 ec-canvas 组件实例this.ecComponentthis.selectComponent(#tempChart);this.initChart();this.loadHistory(1h);},initChart(){this.ecComponent.init((canvas,width,height,dpr){constchartecharts.init(canvas,null,{width:width,height:height,devicePixelRatio:dpr,});chart.setOption(this.getChartOption());this.chartchart;returnchart;});},getChartOption(){return{color:[#ff6b6b,#48dbfb],legend:{data:[温度,湿度],bottom:0},grid:{top:20,bottom:40,left:50,right:20},xAxis:{type:time,axisLabel:{fontSize:10}},yAxis:[{type:value,name:°C,min:0,max:50},{type:value,name:%,min:0,max:100},],tooltip:{trigger:axis},series:[{name:温度,type:line,smooth:true,data:[],yAxisIndex:0,},{name:湿度,type:line,smooth:true,data:[],yAxisIndex:1,},],};},asyncloadHistory(range){wx.showLoading({title:加载中...});try{constresawaitwx.request({url:https://api.your-server.com/history?range${range},method:GET,});consttempDatares.data.temp.map(d[newDate(d.time),d.value]);consthumiDatares.data.humi.map(d[newDate(d.time),d.value]);this.chart.setOption({series:[{data:tempData},{data:humiData},],});}catch(err){wx.showToast({title:加载失败,icon:error});}finally{wx.hideLoading();}},});2. 后端 API——从 InfluxDB 查历史数据小程序不能直接连数据库需要一个中间 API 服务。最简单的方案用 Node.js/Express 写一个轻量 API跑在服务器上。// api-server.js (Node.js Express)constexpressrequire(express);const{InfluxDB}require(influxdata/influxdb-client);constappexpress();constinfluxnewInfluxDB({url:http://localhost:8086,token:my-super-secret-token,});app.get(/history,async(req,res){constrangereq.query.range||1h;// 1h / 6h / 24hconstqueryApiinflux.getQueryApi(iot-org);constqueryfrom(bucket: sensor-data) | range(start: -${range}) | filter(fn: (r) r._measurement mqtt_consumer) | filter(fn: (r) r._field temp or r._field humi) | aggregateWindow(every:${range1h?30s:5m}, fn: mean);consttemp[],humi[];forawait(const{values,row}ofqueryApi.iterateRows(query)){constpoint{time:row[2],value:row[5]};if(row[4]temp)temp.push(point);elsehumi.push(point);}res.json({temp,humi});});app.listen(3000,()console.log(API Server on :3000));3. 阈值告警推送方案 A小程序内告警// 在 MQTT message 回调中this.client.on(message,(topic,payload){constdataJSON.parse(payload.toString());if(data.temp40){wx.showModal({title:⚠️ 高温警告,content:当前温度${data.temp}°C超过阈值 40°C,showCancel:false,});// 播放提示音小程序支持wx.vibrateLong();}this.setData({temperature:data.temp.toFixed(1),humidity:data.humi.toFixed(1),});});方案 B微信服务通知需要订阅消息流程 1. 用户点击订阅告警按钮 → 调用 wx.requestSubscribeMessage 2. 用户同意 → 拿到一次推送权限 3. 后端检测到温度超标 → 调用微信 API 推送模板消息// 小程序端订阅wx.requestSubscribeMessage({tmplIds:[模板ID_高温告警],success(res){if(res[模板ID_高温告警]accept){// 保存用户 openid → 后端用于推送}},});4. 增加刷新与重连机制IoT 小程序最大的痛点是不知道数据为什么不更新了。增强健壮性Page({data:{connected:false,lastUpdate:},onLoad(){this.connectMQTT();// 每 30 秒检查一次 MQTT 心跳this.heartbeatTimersetInterval((){if(!this.data.connected){console.log(重连中...);this.connectMQTT();}},30000);},// 记录最后更新时间updateLastTime(){constnownewDate();this.setData({lastUpdate:${now.getHours()}:${now.getMinutes()}:${now.getSeconds()},});},// 手动刷新refreshData(){this.client.publish(device/refresh/cmd,1);},onUnload(){clearInterval(this.heartbeatTimer);if(this.client)this.client.end();},});5. 调试技巧问题排查方法MQTT 连不上检查wss://域名是否已配置到白名单数据不更新打开开发者工具 → Console → 看有没有message日志ECharts 白屏检查ec-canvas组件路径是否正确API 请求失败检查服务器域名白名单request合法域名真机不显示预览时勾选不校验合法域名仅开发有效真机必须配置下一篇完整项目——智能 WiFi 插座从硬件到小程序全链路

相关新闻

【机器学习入门】多元线性回归超详细教程 —— 从原理到 sklearn 代码全实现

【机器学习入门】多元线性回归超详细教程 —— 从原理到 sklearn 代码全实现

文章目录前言一、线性回归是什么?二、数据集介绍三、sklearn LinearRegression API 详解3.1 构造函数参数3.2 常用属性3.3 常用方法四、代码案例:多元线性回归预测血压五、结果分析5.1 回归方程5.2 系数解读5.3 模型评估六、避坑指南:那些年我…

2026/11/1 20:22:12 阅读更多 →
【MV】Stereo Vision 1: Fundamentals of Multiple View Geometry

【MV】Stereo Vision 1: Fundamentals of Multiple View Geometry

文章目录1、多视几何2、三角化(Triangulation)3、双目立体视觉原理1、多视几何 图注: 同一三维点 (X) 在不同相机中的投影满足 (xiKi[Ri∣ti]X)(x_iK_i[R_i\mid t_i]X)(xi​Ki​[Ri​∣ti​]X),每幅图像对应独立的内参与外参。 图…

2026/11/3 11:24:37 阅读更多 →
元初混沌体系架构 第二卷 第六篇 7G通–时–空–频–能 五维统一底层架构

元初混沌体系架构 第二卷 第六篇 7G通–时–空–频–能 五维统一底层架构

第六篇 7G通–时–空–频–能 五维统一底层架构承启前置 四维壁垒终结与大一统架构开篇本卷前五篇已依次完成7G顶层公理立论、三代代际断层界定、地星两域边界切割、时空畸变扰动公理搭建、光速时延壁垒与鸿蒙补偿模型落地,彻底拆解星际通信两大核心物理桎梏&#…

2026/11/1 20:22:19 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/3 10:57:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/3 2:27:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/3 10:47:27 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/3 10:57:33 阅读更多 →

日新闻

周新闻

月新闻