文章目录
- 哔哩哔哩视频教程
- 1、阿里云物联网平台对接微信小程序
- 2、阿里云物联网平台对接web客户端
- 2-1MQTT服务器编写
- 2-2 web端Servlet部分编写
哔哩哔哩视频教程
【阿里云物联网综合开发,STM32+ESP8266+微信小程序+web客户端一篇教程详细讲解】 https://www.bilibili.com/video/BV1jj8oesEiS/?share_source=copy_web&vd_source=7a7fe2f7182275906c92294b4f15eecc
1、阿里云物联网平台对接微信小程序
微信小程序这一块,只要完成产品云流转这一步,其他都没有太大的问题。
实现主要源码如下:
index.wxml
<view style="flex-direction: row;" class="view-led">
<view class="view-text-led">远程开灯</view>
<image src="img/ledon.jpg"
style="width: 100px; height: 120px"
class="image-1"/>
<button type="primary" bindtap="onClickOpen" size="mini" class="button-on" style="width: 200rpx; height: 64rpx; left: 0rpx; top: -103rpx">
开灯
</button>
</view>
<view style="flex-direction: row;" class="view-led">
<view class="view-text-led">远程关灯</view>
<!-- 显示图片 -->
<image src="img/ledoff.jpg"
style="width: 100px; height: 120px"
class="image-1"/>
<button type="warn" bindtap="onClickOff" size="mini" class="button-on"
style="width: 200rpx; height: 64rpx; left: 0rpx; top: -103rpx">
关灯
</button>
</view>
<view style="flex-direction: row;" class="view-led">
<view class="view-text-led">温度显示</view>
<image src="/pages/index/img/thermometer.png"
style="width: 100px; height: 100px; left: 42rpx; top: 4rpx"
class="image-2"/>
<text style="position: relative; left: 268rpx; top: -84rpx">温度:{{LightSwitch}}℃</text>
</view>
index.wxss
button{
/*外边距*/
margin:5px;
}
.button-on{
margin-left: 110px;
position: relative;
display: inline-block;
box-sizing: border-box;
position: relative
}
/* 远程控制led文字样式 */
.view-text-led{
margin-top: 20px;
margin-bottom: 10px;
display: flex;
justify-content: center;
align-items: center;
}
.view-led{
border: solid red 1rpx;
margin: 10px;
}
.image-1{
margin-left: 20px;
margin-bottom: 10px;
}
.image-2{
position: relative;
margin-bottom: 10px;
}
index.js
var mqtt = require('../../utils/mqtt.min.js')
//const crypto = require('../../utils/aliyun/hex_hmac_sha1.js')
let that = null;
// 需要订阅的主题
const topic = '/sys/[您的ProductKey]/[您的DeviceName]/thing/service/property/set';
//发布的主题
const topic2 = '/[您的ProductKey]/[您的DeviceName]/user/update';
//阿里云连接地址,需要在详情页选择不校验合法域名,否则会报错
const connectUrl = 'wxs://k0efkfcSwlt.iot-as-mqtt.cn-shanghai.aliyuncs.com';
let options = {
clean: true, // 保留会话
connectTimeout: 4000, // 超时时间
reconnectPeriod: 1000, // 重连时间间隔
clientId: '[您的ProductKey].[您的ProductKey]|securemode=2,signmethod=hmacsha256,timestamp=1706677614045|',
username: '[您的ProductKey]&[您的ProductKey]',
password: 'b174a6c6967b2265468c2a6d7fafc5a83f271de81bcc799e4c30fa59cd4581a2',
}
//创建客户端
const client = mqtt.connect(connectUrl, options)
// 成功连接后触发的回调
client.on('connect', () => {
console.log('已经连接成功');
wx.showToast({
title: '阿里云连接成功!'
})
//订阅主题
client.subscribe([topic], () => {
console.log(`订阅了主题 ${topic}`);
});
})
Page({
//定义初始数据
data:{
LightSwitch: 0,
imgSrc: '/pages/index/img/ledoff.jpg'
},
//开关灯
// switchEvent_1: function(e){
// var isChecked = e.detail.value;
// if (isChecked) {
// this.setData({
// imgSrc: '/pages/index/img/ledon.jpg'
// })
// } else {
// this.setData({
// imgSrc: '/pages/index/img/ledoff.jpg'
// })
// }
// },
onClickOpen(){
client.publish(topic2, '{"params":{"LEDSwitch":1},"version":"1.0"}');
console.log('成功发送数据');
wx.showToast({
title: '开灯命令已发送!'
})
},
onClickOff(){
client.publish(topic2, '{"params":{"LEDSwitch":0},"version":"1.0"}');
console.log('成功发送数据');
wx.showToast({
title: '关灯命令已发送!'
})
},
//onLoad(Object query) 页面加载时触发。一个页面只会调用一次,可以在 onLoad的参数中获取打开当前页面路径中的参数。
onLoad:function () {
that = this;
//消息监听
client.on('message', function (topic, message) {
// console.log('收到数据' + message + '\r\n');
let dataFromALY = {};
var f = 0.0;
try{
dataFromALY = JSON.parse(message);
//打印接收到的数据
console.log(dataFromALY);
f = dataFromALY.items.temperature.value;
console.log('获取到ESP8266发送的温度值:' + f + '\r\n');
//修改温度数据
that.setData({
LightSwitch: f
})
}catch(error){
console.log(error);
}
})
}
})
源代码链接:
链接:https://pan.baidu.com/s/1s3N3J_rx_PIpc2xw1RvX0g
提取码:m0w5
2、阿里云物联网平台对接web客户端
2-1MQTT服务器编写
web客户端使用Tomcat和Servlet实现,但是Tomcat是Servlet的容器,只能处理请求和响应。故需要实现订阅阿里云物联网平台的topic,实时接收设备发布过来的数据,可以另外编写一个MQTT客户端,客户端再连接数据库,这样web端通过查询最新数据来实现将设备发布过来的数据实时显示(如温度数据)。
MQTT服务器可参考阿里云物联网平台使用文档——Java Link SDK
我参考例程对原程序进行了修改,在为数据库添加数据上,使用多线程的方式,单独开设一个线程进行操作,这样对订阅数据和往数据库添加数据不会冲突。
开发环境我使用的是idea社区版。
2-2 web端Servlet部分编写
对web客户端的编写,首先编写好前端界面,下面介绍几个功能的实现原理:
1、温度实时显示:使用js编写一个脚本,每隔一段时间向服务器发送一个请求,服务器接收到请求后往数据库要最新的温度数据。
2、开灯和关灯功能实现:使用HTTPS连接通信,参考阿里云物联网平台HTTPS通信和HTTP客户端接入示例
实现例程如下:
链接:https://pan.baidu.com/s/1LKdwTfDYuvPmrVJevUrJsA
提取码:1f7r
例程使用Eclipse编写,仅做参考!