开发者社区> 问答> 正文

小白学习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 Iot\Request\V20160530\RevertRpcRequest();
$request->setProductKey(产品KEY);
$request->setDeviceName("设备名称");//设备名称
$request->setTimeOut(5000); //超时时间,单位毫秒.如果超过这个时间设备没反应则返回"TIMEOUT"
$request->setRpcContent(base64_encode($led));
//推送给设备的数据.数据要求二进制数据做一次BASE64编码.(示例里面是"helloworld"编码后的值)
$response = $client->getAcsResponse($request);
//print_r("\r\n");
//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的信息了;


附件为相关编码文件:




timelapse 地址:
http://xunyun17.xyz/iottimelapse/lesson2.mp4

展开
收起
洵云 2017-06-14 19:31:47 5510 0
1 条回答
写回答
取消 提交回答
  • Re小白学习IOT 第二课 模拟设备RRPC命令下发
    说得真好!
    2018-01-23 10:23:27
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
ST + AliOS > Smart IoT ! 立即下载
IOT赋能旅行场景的实践与展望 立即下载
阿里云IoT物联网市场暨合作伙伴计划发布 立即下载