阿里云
发表主题 回复主题
  • 1556阅读
  • 1回复

小白学习IOT 第二课 模拟设备RRPC命令下发

级别: 论坛版主
发帖
1958
云币
4123
— 本帖被 不靠谱贝贝 从 物联网架构交流 移动到本区(2017-06-19) —
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的信息了;


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



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

[ 此帖被魔咒626在2018-06-10 10:46重新编辑 ]
级别: 架构狮
发帖
1240
云币
2013
只看该作者 沙发  发表于: 01-23
Re小白学习IOT 第二课 模拟设备RRPC命令下发
说得真好!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: 65 - 33 = ?
上一个 下一个