zoukankan      html  css  js  c++  java
  • 小白学习IOT之模拟设备RRPC命令下发

    RPC通讯可以从设备向服务器端上报消息,也可以通过服务器下发命令给设备,这种通讯又叫RRPC,这次我们来介绍和实践一下RRPC的命令通讯;
    通过服务端下发命令模拟设备指示灯的开关,来测试RRPC通信。
    1.由于使用阿里云的PHP的SDK,首先下载PHP的sdk:
    git clone https://github.com/aliyun/aliyun-openapi-php-sdk.git


    2.编写用户界面的PHP文件,一个用来提供用户选择开灯还是关灯;

    <html><meta charset='UTF-8'><title>小白学习IOT</title><p><center><head>RRPC命令下发</head><body bgcolor='gray'><hr>
    <?php
    echo "</p><br><p>指示灯控制:<br>";
    $str = $_SERVER["QUERY_STRING"]; 
    echo "<form action="led.php">
    选择类型:<br/>
    <input type='radio' name='led' value='ON' ><img src='./ledon.jpg'/>
    <input type='radio' name='led' value='OFF' checked><img src='./ledoff.jpg'/><br>
    <input type='submit' value='运行'/>
    </form>";
    echo "</p></center>";
    ?>
    </body></head></center></p></html>


    3.再编写一个控制开灯和关灯的PHP文件,这里用到了PHP的SDK中的core和iot两个目录,文件代码如下,具体的意思为接收界面来的指示灯控制信息,然后配置好AK,SK,产品KEY,设备名称,把控制信息通过BASE64编码后发送给设备,最后收到设备的反馈信息,并显示在网页上。:

    <html><meta charset='UTF-8'><title>小白学习IOT</title><p><center><head>RRPC命令下发</head><body bgcolor='gray'><hr>
    <?php


    echo "</p><br><p>指示灯控制:<br>";
    $str = $_SERVER["QUERY_STRING"]; 


    if($str =="led=ON"){
        echo "<img src='./ledon.jpg'/><br>";
        $led = "ON";
    }
    if($str =="led=OFF"){
        echo "<img src='./ledoff.jpg'/><br>";
        $led = "OFF";
    }   
    include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
    include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/AcsRequest.php';
    include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/AcsResponse.php';
    include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/RpcAcsRequest.php';
    include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/IAcsClient.php';
    include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/DefaultAcsClient.php';
    include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/Autoloader/Autoloader.php';


    include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-iot /Request/V20160104/RevertRpcRequest.php';
    $iClientProfile = DefaultProfile::getProfile("cn-shenzhen",
    "你自己的AK", "你自己的SK");
    $client = new DefaultAcsClient($iClientProfile);
    $request = new IotRequestV20160530RevertRpcRequest();
    $request->setProductKey(产品KEY);
    $request->setDeviceName("设备名称");//设备名称
    $request->setTimeOut(5000); //超时时间,单位毫秒.如果超过这个时间设备没反应则返回"TIMEOUT"
    $request->setRpcContent(base64_encode($led));
    //推送给设备的数据.数据要求二进制数据做一次BASE64编码.(示例里面是"helloworld"编码后的值)
    $response = $client->getAcsResponse($request);
    //print_r(" ");
    //print_r($response->RpcCode);
    if(isset($response->RpcCode)){
    if($response->RpcCode=='SUCCESS'){
        echo '操作成功.';
    }else{
        echo '操作失败:'.$response->RpcCode;
    }
    }
    echo "</p></center>";
    ?>
    </body></head></center></p></html>




    4.最后,还需要在模拟设备端运行示例程序才可以正常运行:
    这是查看设备端,可以看到已经接收到ON的信息了;


    附件为相关编码文件:
     lesson2-web.rar (7 K) 下载次数:0 



    timelapse 地址:
    http://www.xunyun17.xyz/aliiot/lesson2/IOT-RRPC.mp4

    [ 此帖被魔咒626在2017-06-14 21:33重新编辑 ]
  • 相关阅读:
    LeetCode155. 最小栈
    LeetCode154. 寻找旋转排序数组中的最小值 II
    LeetCode153. 寻找旋转排序数组中的最小值
    LeetCode152. 乘积最大子数组
    Python 异常值数据
    Python 生成周期性波动的数据 可指定数值范围
    VUE 组件 事件传递
    MyBatis-Plus And和Or的使用
    SQL Server 复制一条数据
    PLC扩展模拟量输入模块是什么
  • 原文地址:https://www.cnblogs.com/jzy996492849/p/7017457.html
Copyright © 2011-2022 走看看