DIY物联网 5 - 手机控制风扇

简介: 在[《DIY 物联网 4 - 遥控控制风扇》](http://www.liuguangli.win/archives/601)中实现了用空调遥控来控制一台普通的风扇,沿着上一章的基础,这一章我们来一个更酷的: 用手机控制风扇。

《DIY 物联网 4 - 遥控控制风扇》中实现了用空调遥控来控制一台普通的风扇,沿着上一章的基础,这一章我们来一个更酷的:用手机控制风扇。

开发板和手机通讯的方式

上一章我们实现遥控控制风扇,实际上是根据遥控红外信号指令控制连接风扇的继电器开关,现在我们要实现手机控制风扇,把遥控红外指令换成
手机发出的指令就能控制风扇了。我们能想到的几种方式:

  • 蓝牙通讯:

利用手机的蓝牙功能,连接开发板,发送蓝牙信号,但是有个缺点是不好扩展,不能实现远程控制。

  • 网络通讯:
    利用开发板的网络访问能力,实现和手机的网络对接。网络通讯可以是简单的 HTTP 协议,也可以使用 TCP 协议,网络连接模型有两种方式:

直连模式:

控制端(手机)直接和开发板进行网络通讯,这只方式只能在局域网中使用,因为公网访问需要为开发板申请公网 ip 不太现实。

服务器中转模式:

控制端和开发板都能连上云服务,通过服务器实现交互。这种方式不仅能实现通讯控制、还能采集各端的数据、对数据进行分析,这就是 万物连接+大数据的基本模型,当然个人实现成本太大。服务 IoT 的云平台已经有了,阿里云就有这部分的服务。

直连模式实现

作为学习我们先用最简单的连接方式:直连模式。在 Ruff 启动并启动 WIFI 热点之后进入 console.ruff.io ,配置
开发板的网络访问能力,然后就可以对 Ruff 进行网络编程了,Ruff 提供了丰富的 API 满足网络通讯的需求,详细可以了解官方 API 文档:https://ruff.io/zh-cn/api/http.html。现在我们在 Ruff 实现一个 httpServer 的程序:
httpControl.js

 

        'use strict'; 
        function createServer(callback) {
             var PORT = 3000;
             var http = require('http');
             var url=require('url');
             var queryString  = require("querystring");
             var datas={};
             var server = http.createServer(function (request, response) {
                 var query=url.parse(request.url).query;
                 datas = queryString.parse(query);
                 callback.exeCmd(datas.cmd);
                 response.write(callback.getRelayStatus()? 'true':'false');
                 response.end();
           });
        server.listen(PORT);
        console.log("Server runing at port: " + PORT + ".");
      }
      module.exports.listenCMD = createServer;
 

这里我们把对 http 的实现简单封装成一个模块,共其他模块使用。逻辑很简单:在 3000 端口监听网络请求,并解析请求参数,把请求参数传入回调函数供调用方使用, 最后把继电器的开关状态响应到客户端。接着上一章的基础,我们来修改 index.js:

 
       var netControl = require('./netcontrol');
       var relayOpen = false;
       function controlRelay(open){
       
             if (open) {
                  $('#relay').turnOn(function () { 
                        // 打开继电器成功的回调函数
                         console.log('turn on');
                });
          } else {
             $('#relay').turnOff(function () { 
                   // 关闭继电器成功的回调函数
                  console.log('turn off');
              });
         }
          relayOpen = open;
       }
       $.ready(function (error) {
         if (error) {
             console.log(error);
             return;
         }
    
        netControl.listenCMD({
                 exeCmd:function (cmd) {
                     if (cmd === 'openRelay') {
     
                         controlRelay(true)
                    
                     } else {
                         controlRelay(false)
                    
                     }
                 },
                 getRelayStatus: function () {
                     return relayOpen;
                 }
        });
     
     
     });
 
 
     $.end(function () {
         $('#relay').turnOff(function () { 
                  console.log('turn off');
          });
 
     });
 

客户端实现

客户端实现很简单,就一个简单的静态 html ,提供两个按钮:开和关,按钮被点击的时候向开发板发起 http 请求,你要知道开发板的内内网 ip,访问 192.168.78.1 ,可以看到你的开发板的网络配置包括 ip。


  <!DOCTYPE html>
  <html lang="en">
   <head>
   <meta charset="UTF-8">
   <title>Title</title>
   <style>
       button {
          width: 100%;
          height: 100px;
           color: aliceblue;
           font-size: 50px;
           padding: 16px;
       }
   </style>
   </head>
   <body>
   <div id="status"></div>
   <button style="background: darkgreen" onclick="onButtonClick('openRelay')">打开风扇</button>
   <button style="background: orangered" onclick="onButtonClick('offRelay')">关闭风扇</button>
   </body>
   <script>

   function post(url, content, callback) {
       var xmlhttp;
       if (window.XMLHttpRequest)
       {// code for IE7+, Firefox, Chrome, Opera, Safari
           xmlhttp = new XMLHttpRequest();
       }
       else
       {// code for IE6, IE5
           xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
       }
       xmlhttp.onreadystatechange = function()
       {
           if (xmlhttp.readyState==4 && xmlhttp.status==200)
           {
               callback(null,xmlhttp.responseText);
           } else {

           };
       };
       xmlhttp.open("POST",url,true);
       xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
       xmlhttp.send(content);

   }
   function onButtonClick(cmd){
       // 192.168.1.109 替换成你自己的 ip
       post('http://192.168.1.109:3000?cmd=' + cmd,'',function (err,res) {
           alert(res);
           document.getElementById('status').innerHTML = res;

       })
   }
   </script>
   </html>
   
   
相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
6月前
|
前端开发 搜索推荐 JavaScript
如何通过DIY.JS快速构建出一个DIY手机壳、T恤的应用?
DIY.JS 是一款基于原生 Canvas 的业务级图形库,专注于商品定制的图形交互功能,帮助开发者轻松实现个性化设计。适用于 T 恤、手机壳等多种商品场景。它自带丰富功能,无需从零构建,快速集成到项目中。通过创建舞台、添加模型、定义 DIY 区域和添加素材四个步骤即可完成基础用法。支持在线演示体验,文档详细,易上手。
226 57
|
运维 监控 安全
物联网卡:物联网卡为什么不能使用在手机上
物联网卡(IoT SIM卡)通常是为物联网设备设计的,这些设备包括但不限于智能家居设备、可穿戴设备、工业监控设备等。它们与用于智能手机的SIM卡有所不同,主要是因为设计目标、功能限制、资费结构以及网络接入策略上的差异。以下是物联网卡不能直接在手机上使用的主要原因:
|
传感器 物联网 Android开发
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
488 1
|
物联网
物联网Arduino定时开关与手机控制智能灯
此项目主要是包含NTP获取时间和手机连接控制组成 1. 本项目效果: 晚上到点强制关灯睡觉,早上开灯提醒起床,如果晚上不想睡可以通过手机建立连接进行控制开灯或者关灯,还增加了一些KTV爆闪等有趣效果模式(有些费灯)
566 20
物联网Arduino定时开关与手机控制智能灯
|
传感器 开发框架 人工智能
Python + ESP32 DIY炫酷的物联网远程机械臂
Python + ESP32 DIY炫酷的物联网远程机械臂
536 0
|
物联网
手机秒变IoT设备?——巧妙利用阿里云物联网平台
手机秒变IoT设备?什么?嵌入五行代码可以实现用户定位,用户在线数量统计,还能和云端消息交互?免费的MQ?谁用谁知道~
14106 1
|
安全 物联网 数据挖掘
5G的醉翁之意不在手机,在乎物联网也
近日,新基建持续引发热议,尤其是有消息称,数万亿投资已经在路上,市场掀起一股新基建热潮,而这其中,5G建设排在首位。据工信部数据,截止2019年底,国内已建设13万个5G基站,乘新基建东风,5G基站建设态势良好,三大运营商均表示2020年5G投入增加了数倍,预计年底5G基站数超55万个。
|
IDE 物联网 开发工具
(原创) alljoyn物联网实验之手机局域网控制设备
AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用。高通已经将该项目捐赠给了一个名为“AllSeen联盟”的组织,该组织由Linux基金会监督,这是迄今为止推动家庭和工业物联网应用与创新的最广泛的跨行业联盟(更多资料了解www.allseen.org)。
1366 0
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
8887 2

相关产品

  • 物联网平台