智慧农业_微信小程序端

这篇具有很好参考价值的文章主要介绍了智慧农业_微信小程序端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

很多学生毕设采用智慧农业,在这里给大家分享一下微信小程序采用UDP协议 远程控制相关硬件设备的项目

主要实现功能: 

  1.  远程控制相关设备

  2.  远程检测传感器相关数据

资源下载: 【免费】智慧农业-微信小程序端UDP控制资源-CSDN文库

   本项目主要使用三个页面工程: 

     list: 主页

     control:  控制相关设备的工程文件

     environment:    检测环境的工程文件

  每个文件中, 都含有:

        .js文件: 用于实现一些复杂的逻辑功能;

         .json文件: 用于配置小程序的窗口背景色、导航条样式等界面表现;

         .wxml文件:  用于配置页面的结构,样式;

         .wxss文件:   用于设置小程序的页面样式;

下面将相关代码分享如下: 

  注: 因本项目用了外接库,代码仅供参考, 具体资源需要前往上方的资源下载

全局配置文件:

app.js:

    主要是定义了全局变量 g_value,保证所有页面采用同一个变量,共同配置

// app.js
App({
    // 全局变量 该工程下任何文件夹内都可以使用这两个变量
    g_value: {
    IP: '192.168.1.44',
    PORT: 7788,
    udp: 0,
    },
    

  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
  },
  globalData: {
    userInfo: null
  }
})


  app.json:

    定义了 页面的主路径

{
  "pages": [
    "pages/list/list",
    "pages/environment/env",
    "pages/myself/self",
    "pages/control/control"
  ],
  "window": {

  },
  
 "tabBar": {
    "list": [
      {
        "pagePath": "pages/list/list",
        "text": "主页",
        "iconPath": "/images/主页.png",
        "selectedIconPath": "/images/主页ok.png"
      },
      {
        "pagePath": "pages/myself/self",
        "text":"关于",
        "iconPath": "/images/个人.png",
        "selectedIconPath": "/images/个人ok.png"
      }
    ]
 },
 "usingComponents": {
  "van-button": "miniprogram/miniprogram_npm/@vant/weapp/button/index",
  "van-notice-bar": "miniprogram/miniprogram_npm/@vant/weapp/notice-bar/index",
  "van-progress": "miniprogram/miniprogram_npm/@vant/weapp/progress/index",
  "van-circle": "miniprogram/miniprogram_npm/@vant/weapp/circle/index",
  "van-slider": "miniprogram/miniprogram_npm/@vant/weapp/slider/index",
  "van-field": "miniprogram/miniprogram_npm/@vant/weapp/field/index",
  "van-steps": "miniprogram/miniprogram_npm/@vant/weapp/steps/index"
},

  "style": "v2",
  "sitemapLocation": "sitemap.json",
  "lazyCodeLoading": "requiredComponents"

}

list工程文件(首页):

list.js

  配置 list工程的逻辑实现

   // pages/list/list.js
Page({
  /**
     * 查看相关环境 跳转
     */
    env: function(param){
        wx.navigateTo({
          url: '../environment/env',
        })
    },

    con: function(param){
      wx.navigateTo({
        url: '../control/control',
      })
  },
   
  /* IP地址输入框 
     detail 是一个事件对象, 包含了触发事件的详细信息
   */
  onChange_setCarIP(res) {
      let appinstance = getApp();
      appinstance.g_value.IP = res.detail;
      console.log(appinstance.g_value.IP);
  },

    /**
     * 页面的初始数据
     */
    data: {
      
    },
  
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})

list.json  

主要用于配置导航栏属性

{
    "navigationBarTitleText": "智慧农业",
    "backgroundTextStyle": "dark",
    "navigationBarBackgroundColor": "#77FF00",
    "navigationBarTextStyle": "black",
    "navigationStyle": "default"
}

list.wxml

  主页页面的样式信息

<van-notice-bar left-icon="volume-o" scrollable text="注意:先执行控制相关设备, 将IP地址录入成功并下达控制相关指令后, 再执行检测环境变量" color="red;"/>

<!-- 预览图 每隔两秒进行反转,最后一张图结束会从第一张图开始 -->
<swiper indicator-dots autoplay interval = "2000" circular="true">
<swiper-item>
  <image src="/images/shanke.jpg"></image>
</swiper-item>

<swiper-item>
  <image src="/images/shanke2.jpg"></image>
</swiper-item>

<swiper-item>
  <image src="/images/nongye2.jpg"></image>
</swiper-item>

<swiper-item>
  <image src="/images/nongye3.jpg"></image>
</swiper-item>

<swiper-item>
  <image src="/images/nongye1.jpg"></image>
</swiper-item>
</swiper>

<rich-text class="text" nodes="<h1 style='color: green;'>兴安生态农场</h1>"></rich-text>

<!-- view 视图 居中显示 -->
<view style="margin: auto; display: flex; justify-content: center;">
  <!-- 自定义的单元格标签: -->
    <van-cell-group>
    <!--van-field:输入框 placeholder:默认显示的内容    left-icon:在左边设置上下箭头图标 border:显示内边框  maxlength=:最大输入的长度  error:错误提示 -->
      <van-field placeholder="请输入对方的IP地址" left-icon="sort" border="true" clickable="true" maxlength="15" error="true" bind:change="onChange_setCarIP" />
    </van-cell-group>
  </view>

<!-- 按钮 -->
<button bindtap="con">控制相关设备</button>
<button bindtap="env">检测环境变量</button>



list.wxss  

主要用于配置页面样式信息的属性


swiper{
    width:100%;
    height:200px;
}
image{
    width: 100%;
}

.text{
    /* 字体大小 */
    font-size:  20px;
    /* 字体颜色 */
    color: red;
    /* 字体风格 - 粗细 */
    font-weight: bold;
   
    text-indent: 4em;

}
button{
    display: flex;
    align-items: center;
    justify-content: center;
    margin-top: 40rpx;
    padding: 0rpx;
    width: 200rpx;
    height: 90rpx;
    background-color:green;
    border-radius: 98rpx;
    color:whitesmoke;
}

.custom-text{
   background: chartreuse;
  }
control工程文件(控制相关设备):

control.js

  配置 control工程的逻辑实现

var appinstance = getApp();

Page({  
    // 变量
  data: {
      MutexOnImage: '/images/锁off.png',
      lightOnImage: '/images/灯泡off.png',
      FANOnImage: '/images/风扇off.png',
      IrrOnImage: '/images/喷淋off.png'
  },
   // 该函数 主要实现, 当运行时,根据每次三元运算的结果, 不断变换图片并采用UDP发送不同的数据
  onbutton_light_start: function() {
    const imageList = ['/images/灯泡off.png', '/images/灯泡on.png'];
    const index = (this.data.lightOnImage === imageList[0]) ? 1 : 0;
    this.setData({
        lightOnImage: imageList[index]
    });
    if(index === 1)
    {
    appinstance.g_value.udp.send({
        address: appinstance.g_value.IP,
        port: appinstance.g_value.PORT,
        message: '{"light":"on"}'
      })
      console.log('light on');
    }
    else
    {
        appinstance.g_value.udp.send({
            address: appinstance.g_value.IP,
            port: appinstance.g_value.PORT,
            message: '{"light":"off"}'
          })
          console.log('light off');
    }
  },
  
// 该函数 主要实现, 当运行时,根据每次三元运算的结果, 不断变换图片并采用UDP发送不同的数据
  onbutton_fan_start: function() {
    const imageList = ['/images/风扇off.png', '/images/风扇on.png'];
    const index = (this.data.FANOnImage === imageList[0]) ? 1 : 0;
    this.setData({
        FANOnImage: imageList[index]
    });

    if(index === 1)
    {
    appinstance.g_value.udp.send({
        address: appinstance.g_value.IP,
        port: appinstance.g_value.PORT,
        message: '{"fan":"on"}'
      })
      console.log('fan on');
    }
    else
    {
    appinstance.g_value.udp.send({
            address: appinstance.g_value.IP,
            port: appinstance.g_value.PORT,
            message: '{"fan":"off"}'
          })
          console.log('fan off');
    }
  },

  onbutton_irrigate_start: function() {
    const imageList = ['/images/喷淋off.png', '/images/喷淋on.png'];
    const index = (this.data.IrrOnImage === imageList[0]) ? 1 : 0;
    this.setData({
        IrrOnImage: imageList[index]
    });
    
    if(index === 1)
    {
    appinstance.g_value.udp.send({
        address: appinstance.g_value.IP,
        port: appinstance.g_value.PORT,
        message: '{"irrigate":"on"}'
      })
      console.log('irr on');
    }
    else
    {
        appinstance.g_value.udp.send({
            address: appinstance.g_value.IP,
            port: appinstance.g_value.PORT,
            message: '{"irrigate":"off"}'
          })
          console.log('irr off');
    }
  },
  
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    appinstance.g_value.udp = wx.createUDPSocket(); // 创建UDP Socket实例
    appinstance.g_value.udp.bind();   // udp绑定本机
    console.log('bind is ok');
  },

});

control.json:

   主要用于配置导航栏属性

{
        "navigationBarTitleText": "控制相关设备",
        "backgroundTextStyle": "dark",
        "navigationBarBackgroundColor": "#77FF00",
        "navigationBarTextStyle": "black",
        "navigationStyle": "default"
}

control.wxml:

  control页面的布局 (控制相关设备页面)

<!-- 视图 -->
<view class="control-root">
  <!-- 配置视图的布局 -->
  <view class="control-2" style="font-size: 20px;" bindtouchstart="onbutton_light_start">
    <image src="{{lightOnImage}}" mode="aspectFit" style="width: 110px; height: 110px; margin-right: 10px;"></image>
    <text style="margin: auto;">开/关灯</text>
  </view>

  <view class="control-3" style="font-size: 20px;" bindtouchstart="onbutton_fan_start">
    <image src="{{FANOnImage}}" mode="aspectFit" style="width: 110px; height: 110px; margin-right: 10px;"></image>
    <text style="margin: auto;">开/关风扇</text>
  </view>

  <view class="control-4" style="font-size: 20px;" bindtouchstart="onbutton_irrigate_start">
    <image src="{{IrrOnImage}}" mode="aspectFit" style="width: 100px; height: 100px; margin-right: 10px;"></image>
    <text style="margin: auto;">开/关水泵</text>
  </view>

</view>

     control.wxss

     控制页面布局的属性

/* 配置页面的属性 */
.control-root{
    display: flex;
    flex-direction: column;
    align-items: flex-end;
  }
  
  .control-2{
    display: flex;
    width: 400px;
    height: 100px;
    background: linear-gradient(180deg, rgb(241, 248, 178) 0%, rgb(208, 253, 103) 100%);
    border-radius: 5px;
    margin-left: auto;
    margin-top: 80px;
  }

  .control-3{
    display: flex;
    width: 400px;
    height: 100px;
    background: linear-gradient(180deg, rgb(183, 253, 193) 0%, rgb(150, 255, 118) 100%);
    border-radius: 5px;
    margin-left: auto;
    margin-top: 80px;
  }

  .control-4{
    display: flex;
    width: 400px;
    height: 100px;
    background: linear-gradient(180deg, rgb(188, 228, 255) 0%, rgb(113, 221, 253) 100%);
    border-radius: 5px;
    margin-left: auto;
    margin-top: 80px;
  }
environment工程文件

env,js

Page({  
  data: {
      IllOnImage: '/images/光照.png',
      HumOnImage: '/images/温湿度传感器.png',
      FlowOnImage: '/images/气.png',
      light: 0, //添加 light属性
      hum: 0,  //添加 hum属性
      flow: 0, //添加 flow属性
  },

  //  UDP接收数据后的处理函数
  onUdpMessage: function (res) {
      if(res != null)
      {
      // 将 ArrayBuffer类型的res.message取出来
      let unit8Arr = new Uint8Array(res.message);
      let encodedString = String.fromCharCode.apply(null, unit8Arr);
      let decodedString = decodeURIComponent(escape((encodedString))); //没有这一步中文会乱码
      console.log(decodedString);

      //解析 json 数据   
       let jsonData = JSON.parse(decodedString);
      //拿去json数据的 light  hun   flow
       let json_light = jsonData.envir.light;
        let json_hum = jsonData.envir.hum;
        let json_flow = jsonData.envir.flow;
       console.log(json_light,json_hum,json_flow);
        // 将json数据显示到页面上
        this.setData({
            light: json_light,
            hum: json_hum,
            flow: json_flow,
        });

      }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let appinstance = getApp();
    appinstance.g_value.udp.onMessage(this.onUdpMessage);
  },

});

env.json

{
    "navigationBarTitleText": "检测环境变量",
    "backgroundTextStyle": "dark",
    "navigationBarBackgroundColor": "#77FF00",
    "navigationBarTextStyle": "black",
    "navigationStyle": "default"
}

env.wxml

<!-- 视图 -->
<view class="control-root">

<!-- 光照强度 -->
<view class="control-2" style="font-size: 30px;">
  <image src="{{IllOnImage}}" mode="aspectFit" style="width: 110px; height: 110px; margin-right: 10px;"></image>
  <!-- 显示文本 -->
  <text style="margin: auto;" decode="{{true}}">光照强度: \n {{light}}</text>
</view>

<view class="control-3" style="font-size: 30px;">
  <image src="{{HumOnImage}}" mode="aspectFit" style="width: 110px; height: 110px; margin-right: 10px;"></image>
  <text style="margin: auto;">温湿度: \n {{hum}}</text>
</view>

<view class="control-4" style="font-size: 30px;">
  <image src="{{FlowOnImage}}" mode="aspectFit" style="width: 100px; height: 100px; margin-right: 10px;"></image>
  <text style="margin: auto;">气体浓度: \n {{flow}}\n</text>
</view>
</view>

env.wxss

.control-root{
    display: flex;
    flex-direction: column;
    align-items: flex-end;
  }
  
  .control-2{
    display: flex;
    width: 400px;
    height: 100px;
    border-radius: 5px;
    margin-left: auto;
    margin-top: 100px;
  }

  .control-3{
    display: flex;
    width: 400px;
    height: 100px;
    border-radius: 5px;
    margin-left: auto;
    margin-top: 100px;
  }

  .control-4{
    display: flex;
    width: 400px;
    height: 100px;
    border-radius: 5px;
    margin-left: auto;
    margin-top: 100px;
  }

主要代码如上, 该工程在测试时,我主要采用ubuntu,搭建了UDP服务器,与微信小程序通信。

实际中的智慧农业的硬件端wifi通信,要采用UDP通信方式与小程序通信注意使用数组清零以及sprintf,来与微信小程序正常通信。

智慧农业_微信小程序端,前端,微信小程序,毕业设计

详情请见 资源下载文章来源地址https://www.toymoban.com/news/detail-851386.html

到了这里,关于智慧农业_微信小程序端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于微信小程序的智慧农业小程序

    博主主页: 一点素材 博主简介: 专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。 主要内容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、小程序、安卓app、大数据等设计与开发。 感兴

    2024年02月22日
    浏览(28)
  • 如何开发微信小程序,后端,前端,小程序端,如何部署到腾讯云托管

    开发微信小程序是一项非常有趣的任务,它涉及到前端、后端和小程序端的开发。在本文中,我们将介绍如何开发微信小程序,并将其部署到腾讯云托管。 一、前端开发 前端开发是微信小程序开发的第一步。在这一步中,我们需要使用微信小程序开发工具来创建一个新的小

    2024年02月16日
    浏览(30)
  • 智慧校园:校务助手微信小程序端源码

    校园校务助手-智慧校园教师移动端   它包括哪些功能呢?我来介绍一下。 智慧校园教师端微信小程序是基于原生开发 教师端登录界面   ①.设备管理、通知管理、图片管理、班级考勤 ②.综合素质评价、视频管理、请假管理、成绩管理 教师端功能展示   ③.个人信息、进离

    2024年02月09日
    浏览(30)
  • 基于微信小程序的智慧农业农产品商城【毕设包过】

      博主介绍 :👉全网个人号和企业号 粉丝40W+ ,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈 ⭐️ 热门专栏 推荐订阅 ⭐️ 订阅收藏起来,防止下次找不到 🔎千套JAVA实战项目持续更新中~ 🔎上百套小程序实

    2024年02月21日
    浏览(38)
  • 毕业设计So Easy:SpringBoot+Vue图书阅读和管理系统(前端+后端+小程序端)

    目录 1、项目概述 2、开发环境 3、前后端配置部署 4、小程序端配置部署 5、项目效果演示 5.1、后端管理平台 5.2、前端阅读平台 5.3、小程序社区平台 很多计算机专业大学生经常和我交流:毕业设计没思路、不会做、论文不会写、太难了...... 针对这些问题,决定分享一些软、

    2024年02月11日
    浏览(32)
  • 基于STM32设计的智慧农业管理系统(ESP8266+腾讯云微信小程序)

    基于STM32设计的智慧农业控制系统(ESP8266+腾讯云微信小程序) 随着人们对食品安全和生态环境的日益重视,智慧农业逐渐成为一个备受关注的领域。智能化管理可以提高农业生产效率,减少资源浪费,改善生态环境。因此,基于物联网技术的智慧农业管理系统越来越受到农民和

    2024年02月08日
    浏览(33)
  • 【Java】基于云计算-智慧校园电子班牌系统源码带原生微信小程序端

            智慧校园系统是利用物联网和云计算,强调对教学、科研、校园生活和管理的数据采集、智能处理、为管理者和各个角色按需提供智能化的数据分析、教学、学习的智能化服务环境。它包含“智慧环境、智慧学习、智慧服务、智慧管理”等层面的内容。 智慧校园描绘

    2024年02月15日
    浏览(28)
  • 微信小程序智慧流调微信小程序设计与实现

    摘 要 自从2020年新冠疫情爆发以来,对全国人民的健康和全国各地区的经济发展都带来了很大的影响,并且新冠肺炎对各个领域带来的影响还未完全消除。近三年以来,全国各地区多次爆发新的疫情,导致许多人被隔离,也导致全国各阶段的学生都需要在家中上网课,对学生

    2024年02月11日
    浏览(32)
  • java毕业设计基于微信小程序的智慧校园

    本系统 (程序+源码) 带文档lw万字以上    文末可领取本课题的JAVA源码参考 随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分。微信小程序作为一种新型的应用形式,因其无需下载安装、使用方便的特点,越来越多地被应用于各个领域。在

    2024年03月19日
    浏览(46)
  • 【java】【ssm】【微信小程序】 初级移动医院预约系统成品代码动态网站开发网页WEB浏览器端B/S结构移动微信小程序端项目

    本系统是使用java语言结合mysql数据库开发的医院预约系统,后台管理是网页WEB浏览器端B/S结构,移动端是微信小程序。 其中分为前端和后台。 前端主要是患者预约使用,包括预约、医生详情查看、医生列表查询、个人中心等。 后台则是对系统的所有数据进行管理。 后台用户

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包