• 小白学习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重新编辑 ]
  • 相关阅读:
    二维数组
    ASCII_02_扩展
    ASCII_01
    【转】如何监控某个驱动器或目录及其下面的所有子目录的创建文件的动作
    webpack+vue2.0项目 (一) vue-cli脚手架
    分享两个常用的rem布局方式
    移动端border:1px问题解决方案
    sticky footer 布局
    用js数组实现最原始的图片轮播实现
    分享按钮(QQ,微信,微博等)移入动画效果
  • 原文地址:https://www.cnblogs.com/jzy996492849/p/7017457.html
Copyright © 2020-2023  润新知