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