# IT明星不是梦 # WIFI模块开发教程之W600连云篇1:onenet三色灯项目小程序篇②

前言

本文研究如何使用小程序连接云平台,进而控制上一节中连接到onenet云平台的RGB三色灯设备。

一、理论基础

1.先睹为快

视频地址:https://www.ixigua.com/i6806304062091297292/

2.功能点简述

小程序开机页面

小程序界面布局

小程序访问onenet接口

小程序3秒刷新数据状态

小程序控制弹出编辑框设置房间号

小程序调用storage接口存取数据

二、使用实例

1.云端创建产品

接下来咱们进入正题,首先需要在云端创建一个产品,步骤如下:

创建产品

登录onenet官网,注册一个账号,地址:https://open.iot.10086.cn, 点进开发者中心,创建产品,产品配置信息如下:

注意;操作系统这里使用RT_Thread,没有此选项,选用linux即可

创建数据点

数据流模板->添加数据流模板

创建产品数据点,此处创建power和color两个数据点,power表示总开关,power为0时候,灯关闭;power不为0的时候,color数值起作用,用以选择不同模式。

创建后台显示数据面板

应用管理->独立应用->添加应用

注意:红色、绿色、蓝色按钮和颜色显示图片均链接color数据点,颜色显示图片仅显示左右,按钮可以下发选择不同的灯颜色,其中红色按钮开状态数值为2,关数值为0,绿色按钮开状态数值为3,关数值为0,蓝色按钮开状态数值为4,关数值为0;颜色显示图片中白色状态数值为1,红色为2,绿色为3,蓝色为4,数据流同样选择color,具体如下图所示

到此为止,我们已经完成了产品的创建工作,接下来将要处理设备接入问题。

2.小程序开机页面

start.wxml文件:

<view>
      <image src="../../image/start/start.png" class=‘welcome-img‘></image>
      <button class=‘welcome-btn‘ bindtap=‘goToIndex‘>点击开启</button>
</view>

start.wxss文件:

.hahahh {
  height: 1198rpx;
}

image {
  height: 1198rpx;
  width: 100%;
}

.welcome-img {
  position: absolute;
  z-index: 1;
}

.welcome-btn {
  background-color: #27e4b5;
  color: white;
  font-size: 38rpx;
  width: 330rpx;
  height: 90rpx;
  text-align: center;
  line-height: 90rpx;
  border-radius: 10px;
  position: absolute;
  bottom: 120rpx;
  left: 20px;
  right:20px;
  z-index: 2;
}

start.js文件:

var app = getApp();
Page({
  data: {
    remind: ‘加载中‘,
    angle: 0
  },
  goToIndex: function () {
    wx.switchTab({
      url: ‘/pages/index/index‘,
    });
  },
  onLoad: function () {
    var that = this
  },
  onShow: function () {

  },
  onReady: function () {
    var that = this;
    setTimeout(function () {
      that.setData({
        remind: ‘‘
      });
    }, 1000);
    wx.onAccelerometerChange(function (res) {
      var angle = -(res.x * 30).toFixed(1);
      if (angle > 14) { angle = 14; }
      else if (angle < -14) { angle = -14; }
      if (that.data.angle !== angle) {
        that.setData({
          angle: angle
        });
      }
    });
  },
})

3.小程序主页布局

.js文件调用https接口访问onenet提供的接口获取所有绑定的设备信息,然后小程序通过 wx:for 遍历设备,逐个显示在主页,主要程序如下:

index.wxml

  <view  wx:for="{{devices}}" wx:key="id" wx:for-item="item" data-id="{{item.id}}" bindtap="toDetailsTap">
    <view class="device">
      <view class="single_image_wrap">
        <image src="../../image/led/led.jpg" class="device_image"></image>
      </view>
      <view class="device_info">
        <navigator url="../led/led?id={{item.id}}">
          <view class="device_name">
            <text>LED</text>
          </view>
          <view class="device_d">
            <view class="room">
              <text>{{room_name}}</text>
            </view>
            <view class="device_status">
              <text>{{item.online === true ? ‘ 在线‘ : ‘离线‘}}</text>
            </view>
          </view>

        </navigator>
      </view>
    </view>

采用flex布局,具体内容参考index.wxss实现:

.device {
  position: relative;
  height: 120rpx;
  background-color: #FFF;
  padding-left: 80rpx;
  border-bottom: 1rpx solid #E7E7EB;
}
.single_image_wrap {
  position: absolute;
  left: 10rpx;
}
.device_image {
  width: 100rpx;
  height: 100rpx;
}
.device_info {
  position: relative;
  height: 100rpx;
  margin-left: 40rpx;
}
.device_name {
  font-size: 14px;
  margin-top: 20rpx;
}
.device_d{
  display: flex;
  flex-direction: row;
  justify-content: space-between
}
.room {
  color: #929292;
  font-size: 12px;
}
.device_status {
  font-size: 14px;
  color: #FF1493;
  margin-right: 40rpx;
}

4.小程序访问onenet接口

首先打开Onenet文档:https://open.iot.10086.cn/doc/

由于上一篇中设备是通过mqtt协议连接onenet,因此本篇小程序访问onenet接口也需要访问MQTT相关接口,如下所示:

由上图可知查询数据需要调用URL:

http(s)://api.heclouds.com/devices/device_id/datastreams/datastream_id

device_id:需要替换为设备ID
datastream_id:需要替换为数据流ID
小程序调用实例:

//查看设备连接状态,并刷新按钮状态
wx.request({
    url: "http://api.heclouds.com/devices/" + id + "/datapoints?datastream_id=color",
    header: {
        ‘content-type‘: ‘application/x-www-form-urlencoded‘,
        "api-key": API_KEY
    },
    data: {

    },
    success(res) {
        console.log(res)
        deviceConnected = true

        if (that.data.switchFlag != true)
        {
            color_value = res.data.data.datastreams[0].datapoints[0].value
            switch (parseInt(color_value)) {
                case 1:
                    that.setData({
                        redSwitchChecked: false,
                        greenSwitchChecked: false,
                        blueSwitchChecked: false
                    })
                    break;
                case 2:
                    that.setData({
                        redSwitchChecked: true,
                        greenSwitchChecked: false,
                        blueSwitchChecked: false
                    })
                    break;
                case 3:
                    that.setData({
                        redSwitchChecked: false,
                        greenSwitchChecked: true,
                        blueSwitchChecked: false
                    })
                    break;
                case 4:
                    that.setData({
                        redSwitchChecked: false,
                        greenSwitchChecked: false,
                        blueSwitchChecked: true
                    })
                    console.log("color_value is ", color_value)
                    console.log("blueSwitchChecked is ", that.data.blueSwitchChecked)
                    break;
            }
            console.log("color_value is ", color_value)
        }else{
            that.setData({
                switchFlag:false
            })
        }
    },
    fail(res) {
        console.log("请求失败")
        deviceConnected = false
    }
})
},

5.小程序3秒刷新数据状态

在onLoad()中调用setInterval函数设置每隔3秒访问一次onenet设备的数据,及时更新显示页面,

that.data.myintervalid = setInterval(function () {
that.onShow()
}, 3000)

onShow()中正式调用onenet接口访问onenet设备的数据

  onShow: function (e) {
    var that = this
    that.getDataPoints(that.data.id)
  },
 getDataPoints: function (id) {
    var that = this
    var deviceConnected
    var color_value = 0
    //查看设备连接状态,并刷新按钮状态
    wx.request({
      url: "http://api.heclouds.com/devices/" + id + "/datapoints?datastream_id=color",
      header: {
        ‘content-type‘: ‘application/x-www-form-urlencoded‘,
        "api-key": API_KEY
      },
      data: {

      },
      success(res) {
        console.log(res)
        deviceConnected = true

        if (that.data.switchFlag != true)
        {
          color_value = res.data.data.datastreams[0].datapoints[0].value
          switch (parseInt(color_value)) {
            case 1:
              that.setData({
                redSwitchChecked: false,
                greenSwitchChecked: false,
                blueSwitchChecked: false
              })
              break;
            case 2:
              that.setData({
                redSwitchChecked: true,
                greenSwitchChecked: false,
                blueSwitchChecked: false
              })
              break;
            case 3:
              that.setData({
                redSwitchChecked: false,
                greenSwitchChecked: true,
                blueSwitchChecked: false
              })
              break;
            case 4:
              that.setData({
                redSwitchChecked: false,
                greenSwitchChecked: false,
                blueSwitchChecked: true
              })
              console.log("color_value is ", color_value)
              console.log("blueSwitchChecked is ", that.data.blueSwitchChecked)
              break;
          }
          console.log("color_value is ", color_value)
        }else{
          that.setData({
            switchFlag:false
          })
        }
      },
      fail(res) {
        console.log("请求失败")
        deviceConnected = false
      }
    })
  },

当页面切换到其他页面隐藏起来或者退出后,应该删除定时器,停止数据更新

 onHide: function () {
    // 页面隐藏
    clearInterval(this.data.myintervalid);
  },

  onUnload: function () {
    // 页面关闭
    clearInterval(this.data.myintervalid);
  },

6.小程序调用storage接口存取数据

存储房间号:

try {
    wx.setStorageSync(‘room_name‘, this.data.room_name)
} catch (e) {
    console.log("setStorageSync error")
 }

读取房间号:

    try {
        var value = wx.getStorageSync(‘room_name‘)
        if (value) {
            // Do something with return value
            that.setData({
                room_name:value
            })
        }
    } catch (e) {
        // Do something when catch error
        console.log("get stroage data error!")
    }

三、运行

如视频中介绍首先设备上电,onenet后台列表将会刷新出来设备状态,然后点开小程序,小程序设备主页如下图:

点进去在线的设备:

最后设置房间号:

设置完成后退出到主页面,可以看到房间号已经刷新为了我们设置的。

四、结语

本节完,实际操作过程中需要注意的地方有如下几点:

(1) 设备连云

首先需要设备通过mqtt方式连接到onenet,可以参考上一篇onenet三色灯项目mqtt篇①

(2) 修改房间号

现在房间号只是存在了本地,如果本地清理数据后,房间号将会消失,这点需要注意,后期抽空做一个后台,mqtt部分还是基于onenet,增加房间号存储,权限认证等功能。

(3) 获取资料

如您在使用过程中有任何问题,请加QQ群进一步交流,也可以github提Issue。

QQ交流群:906015840 (备注:物联网项目交流)

github仓库地址:https://github.com/solitary-sand/wechat_onenet_led

一叶孤沙出品:一沙一世界,一叶一菩提

原文地址:https://blog.51cto.com/14616151/2482541

时间: 2024-10-24 15:33:36

# IT明星不是梦 # WIFI模块开发教程之W600连云篇1:onenet三色灯项目小程序篇②的相关文章

WIFI模块开发教程之W600网络篇1:AP模式下TCP Client通信

前言 本文研究如何在AP模式下进行TCP Client通信,所谓AP模式是说模块起来一个softAP热点,可以供其他WIFI设备连接,当其他设备连接成功后,另WIFI模块作为客户端,局域网中其他设备作为服务端进行TCP数据通信. 一.理论基础 本节要处理的有两个问题,其一是如何利用RT_Thread起来一个softAP,其二是如何使用Socket套接字编程搞定TCP Client程序编写. 1.模块开启SoftAP 模块需要起来一个名字为sand,密码为12345678的热点,RT_Thread

WIFI模块开发教程之W600网络篇2:AP模式下TCP Server通信

前言 本文研究如何在AP模式下进行TCP Server通信,所谓AP模式是说模块起来一个softAP热点,可以供其他WIFI设备连接,当其他设备连接成功后,另WIFI模块作为服务端,等待局域网中其他客户端连接后通信. 一. 理论基础 本节要处理的有两个问题,其一是如何利用RT_Thread连接路由器,其二是如何使用Socket套接字编程搞定TCP Server程序编写. 1.连接路由器 模块需要开启station,并且连接到一个路由器,RT_Thread中只需要调用wlan.mgnt.h中的函数

13-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案微信小程序篇(网页版MQTT)

https://www.cnblogs.com/yangfengwu/p/11148976.html 抱歉哈...最近由于做板子,,教程的进度落下了... 这些天总共做了还几块板子 首先对当前这个教程的这个板子做了修订,调整了下布局,替换换了以前用的Micro USB 接口,开关降压改为MP4462 STM32+Air720H(全网通GPRS)+以太网+422/485+4-20ma采集    https://www.cnblogs.com/yangfengwu/category/1472273.

?Unity 2D游戏开发教程之2D游戏的运行效果

Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问,会在本节集中揭晓. (1)单击Unity上方,工具栏里的播放按钮,开始运行当前的游戏,默认精灵当前进入的是Idle动画状态,如图1-34所示. 图1-34  Idle状态 (2)当读者按下键盘上的左.右方向键,或者A.D键的时候,精灵会进入Walking动画状态,并且会向左或者向右移动,如图1-3

AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码

AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 WatchKit Extension,如图2.18所示.其中,Watch App部分位于用户的iWatch上,它目前为止只允许包含Storyboard文件和Resources文件.在我们的项目里,这一部分不包括任何代码.WatchKit Extension部分位于用户的iPhone安装的对应App上,这

iOS 9应用开发教程之ios9中实现button的响应

iOS 9应用开发教程之ios9中实现button的响应 IOS9实现button的响应 button主要是实现用户交互的.即实现响应.button实现响应的方式能够依据加入button的不同分为两种:一种是编辑界面加入button实现的响应:还有一种是使用代码加入button实现的响应. 1.编辑界面加入button实现的响应 使用编辑界面加入button能够使用拖动的方式来实现button的响应,它也是最简单的一种实现响应的方式. [演示样例2-4]下面将实现轻拍button,改变主视图背景

HealthKit开发教程之HealthKit的辅助数据

HealthKit开发教程之HealthKit的辅助数据 在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据.压力类型数据.时间类型数据.温度类型数据.标量类型数据和电导率类型数据.本节将针对这6个辅助数据进行讲解. HealthKit的体积类型数据 体积,或称容量.容积,几何学专业术语,是物件占有多少空间的量.体积单位可以用来测量物体的体积.由体积单位和值组成的数据就是体积类型的数据.体积单位可以分为:国际体积单位.英制体积单位和美制体积单位. 1.国际体积单位 体积

iOS 9应用开发教程之ios9的视图

iOS 9应用开发教程之ios9的视图 了解IOS9的视图 在iPhone或者iPad中,用户看到的和摸到的都是视图.视图是用户界面的重要组成元素.本节将主要讲解ios9视图的添加.删除以及位置和大小的设置等内容. ios9视图库介绍 在视图库中存放了iOS开发中所需的所有视图.开发者可以在创建好iOS应用程序的项目以后,打开画布的设计界面,这时在工具窗口的下半个窗口中,单击Show the Object library图标,就会显示出视图库,如图1.46所示. 图1.46  视图库 在视图库中

Xamarin Anroid开发教程之Anroid开发工具及应用介绍

Xamarin Anroid开发教程之Anroid开发工具及应用介绍 Xamarin开发Anroid应用介绍 如今智能手机已经盛行了好几年,而针对这些智能手机的软件开发也变得异常火热.但是在Android平台下只能使用Java开发,iOS平台下也只能使用Objective-C或Swift开发.对于那些C#程序员却只能眼看着这些火热的平台流口水.在几年前只能重新学习一门新的语言,才可以进入这些智能手机开发行业.现在,我们有了Xamarin.C#程序员不需要了解其它语言,就可以开始编写Android