123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- <template>
- <view class="page">
- <view class="page">
- <view class="weui-form">
- <view class="weui-form__text-area">
- <view class="weui-form__title">xBlufi蓝牙配网{{version}}</view>
- <view class="weui-form__desc">设计理念:简单/快速上手</view>
- </view>
- <view class="weui-form__control-area">
- <view class="weui-cells__group weui-cells__group_form">
- <view class="weui-cells__title">需配置入网当前路由器SSID:{{ssid}}</view>
- <view class="weui-cells weui-cells_form">
- <view class="weui-cell">
- <picker @change="bindPickerChange" :value="index" :range="array">
- <view class="picker">
- Wi-Fi列表:{{array[index]}}
- </view>
- </picker>
- </view>
- <view class="weui-cell">
- <view class="weui-cell__hd"><label class="weui-label">密码:</label></view>
- <view class="weui-cell__bd">
- <input class="weui-input" :value="password" @input="bindPasswordInput" type="text"
- placeholder="在此输入路由器密码" />
- </view>
- </view>
- <view class="weui-cell">
- <view class="weui-cell__hd"><label class="weui-label">数据:</label></view>
- <view class="weui-cell__bd">
- <input class="weui-input" @input="bindCustomDataInput" type="text"
- placeholder="在此输入自定义数据" />
- </view>
- </view>
- </view>
- </view>
- </view>
- <view class="weui-form__tips-area">
- <label for="weuiAgree" class="weui-agree">
- <input id="weuiAgree" type="checkbox" class="weui-agree__checkbox" /><span
- class="weui-agree__text">{{connected?"蓝牙已连接":"蓝牙已断开"}}
- </span>
- </label>
- </view>
- <view class="weui-form__opr-area">
- <button @tap="OnClickStart" :disabled="!isInitOK" type="primary">{{isInitOK?"开始配网并发送自定义数据":"设备初始化失败或非2.4G网络"}}</button>
- </view>
- </view>
- </view>
- </view>
- </template>
- <script>
- var xBlufi = require("@/utils/blufi/xBlufi.js");
- export default {
- data() {
- return {
- version: '2.2',
- name: '',
- index: 0,
- array: [],
- connectedDeviceId: '',
- connected: true,
- deviceInfo: null,
- isInitOK: false,
- ssid:'',
- password: '',
- customData: ''
- }
- },
- onShow: function(options) {
- this.initWifi()
- },
- onLoad: function(options) {
- var that = this
- this.initWifi()
- this.name = options.name;
- this.connectedDeviceId = options.deviceId;
- xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent);
- xBlufi.notifyInitBleEsp32({
- deviceId: options.deviceId,
- })
- wx.showLoading({
- title: '设备初始化中',
- })
- },
- onUnload: function() {
- let that = this
- xBlufi.notifyConnectBle({
- isStart: false,
- deviceId: that.connectedDeviceId,
- name: that.name,
- });
- xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
- },
- methods: {
- funListenDeviceMsgEvent: function(options) {
- let that = this
- let ssid_arry = this.array;
- switch (options.type) {
- case xBlufi.XBLUFI_TYPE.TYPE_STATUS_CONNECTED:
- that.connected = options.result
- if (!options.result) {
- wx.showModal({
- title: '很抱歉提醒你!',
- content: '小程序与设备异常断开',
- showCancel: false, //是否显示取消按钮
- // success: function(res) {
- // wx.navigateBack({
- // url: '../search/search'
- // })
- // },
- })
- }
- break;
- case xBlufi.XBLUFI_TYPE.TYPE_CONNECT_ROUTER_RESULT:
- wx.hideLoading();
- if (!options.result)
- wx.showModal({
- title: '温馨提示',
- content: '配网失败,请重试',
- showCancel: false, //是否显示取消按钮
- })
- else {
- if (options.data.progress == 100) {
- let ssid = options.data.ssid;
- wx.showModal({
- title: '温馨提示',
- // content: `成功连接路由器【${options.data.ssid}】`,
- content: `成功连接路由器【${that.ssid}】`,
- showCancel: false, //是否显示取消按钮
- success: function(res) {
- wx.setStorage({
- key: ssid,
- data: that.password
- })
- //判断是否为空
- if (that.customData)
- //开始发送自定义数据,此方法可以在蓝牙连接esp设备之后,随时随地调用!
- xBlufi.notifySendCustomData({
- customData: that.customData,
- })
- },
- })
- }
- }
- break;
- case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
- wx.showModal({
- title: '收到自定义设备数据',
- content: `【${options.data}】`,
- showCancel: false, //是否显示取消按钮
- })
- break;
- case xBlufi.XBLUFI_TYPE.TYPE_CONNECT_NEAR_ROUTER_LISTS:
- wx.hideLoading();
- if ('' === options.data.SSID) break;
- if(!ssid_arry.includes(options.data.SSID)) ssid_arry.push(options.data.SSID)
- that.array = ssid_arry;
- that.ssid = that.array[0];
- that.isInitOK = true
- break;
- case xBlufi.XBLUFI_TYPE.TYPE_INIT_ESP32_RESULT:
- wx.hideLoading();
- if (options.result) {
- xBlufi.notifySendGetNearRouterSsid()
- wx.showLoading({
- title: '模组获取周围WiFi列表...',
- })
- } else {
- that.connected = false
- wx.showModal({
- title: '温馨提示',
- content: `设备初始化失败`,
- showCancel: false, //是否显示取消按钮
- })
- }
- break;
- }
- },
- OnClickStart: function() {
- if (!this.ssid) {
- wx.showToast({
- title: 'SSID不能为空',
- icon: 'none'
- })
- return
- }
- if (!this.password) {
- wx.showToast({
- title: '密码不能为空',
- icon: 'none'
- })
- return;
- }
- wx.showLoading({
- title: '正在配网',
- mask: true
- })
-
- xBlufi.notifySendRouterSsidAndPassword({
- ssid: this.ssid,
- password: this.password,
- success: res => {
- console.log(res, 'res');
- },
- fail:err=>{
- console.log(err, 'err');
- }
- })
- },
- stringToUtf8Bytes: function(str) {
- // 编码为百分比转义字符串(如 "%E6%88%91" => "我")
- const encoded = encodeURIComponent(str);
- const bytes = [];
- let i = 0;
- while (i < encoded.length) {
- if (encoded[i] === '%') {
- // 提取 % 后的两个字符作为十六进制字节(如 "%E6" => 0xE6)
- bytes.push(parseInt(encoded.substr(i + 1, 2), 16));
- i += 3; // 跳过 %XX 三个字符
- } else {
- // 普通 ASCII 字符直接转为字节(如 "A" => 0x41)
- bytes.push(encoded.charCodeAt(i));
- i++;
- }
- }
- return bytes;
- },
- bytesToBase64: function(bytes) {
- return wx.arrayBufferToBase64(new Uint8Array(bytes).buffer);
- },
- bindPasswordInput: function(e) {
- this.password = e.detail.value
- },
- bindCustomDataInput: function(e) {
- this.customData = e.detail.value
- },
- initWifi() {
- },
- bindPickerChange: function(e) {
- this.index = e.detail.value
- let password = wx.getStorageSync(this.array[e.detail.value])
- this.ssid = this.array[e.detail.value]
- this.isInitOK = true
- this.password = password == undefined ? "" : password
- },
- }
- }
- </script>
- <style scoped lang="scss">
- @import url(@/utils/blufi/weui.scss);
- page,
- .page {
- height: 100%;
- }
- button {
- width: 75%;
- }
- </style>
|