当前位置:   article > 正文

Android Things阿里云物联网平台的使用(普通版)_thingslinks

thingslinks

研究了物联网,那么接下来你需要做的就是如何去远程控制,实现开发板的远程通讯交互,那么BAT最近也都陆续更新了自己的物联网平台系统,借助BAT的资源,我们能很快的建立起一个物联网开发环境,接下来我们手把手看看阿里云物联网平台的使用吧

1.登录到阿里云,在左上角的产品菜单中找到“产品”


2.从“产品”菜单中找到“物联网套件”


3.点击“管理控制台”,进入物联网控制台进行相关配置


4.首先创建一个产品


5.填写相关信息,在这里我们选择基础版,因为高级版虽然增加了很多功能,但是云端开发SDK截止目前为止尚未更新,无法使用云端SDK远程控制开发板


6.创建完成后,选择设备,点击“查看”,进入选择“前往管理”添加设备信息


7.点击“添加设备”


8.填写设备名称


9.记录备份相关秘钥信息,点击一键复制,保存到记事本,方便开发使用


10.回到产品信息页,进入“消息通讯”,点击“定义Topic类”添加


11.填写相关信息


12.接下来我们开发things程序,首先在项目的build.gradle文件中添加阿里云仓库地址

  1. maven {
  2. url "http://maven.aliyun.com/nexus/content/repositories/releases/"
  3. }

13.在app模块的build.gradle文件中添加相关组件

compile 'com.aliyun.alink.linksdk:public-channel-core:0.2.1'

14.集成

  1. /**
  2. * Created by cc_want on 2018/4/26.
  3. */
  4. public class AliyunIoT {
  5. private String TAG ="AlibabaIOT";
  6. public static final String productKey = "<填写>"; //这个是设备模版productkey
  7. public static final String deviceName = "<填写>";//这个是设备名称
  8. public static final String deviceSecret = "<填写>";//这个是设备秘钥
  9. public static final String ACTION_SYS_SERVICE_CMD = String.format(Locale.CHINESE,"/%s/%s/%s",productKey,deviceName,"cmd");
  10. private IConnectionStateListener mConnectionStateListener;
  11. private IOnPushListener mIOnPushListener;
  12. private IOnSubscribeListener mSysServiceListener = new IOnSubscribeListener() {
  13. @Override
  14. public void onSuccess(String s) {
  15. }
  16. @Override
  17. public void onFailed(String s, AError aError) {
  18. }
  19. @Override
  20. public boolean needUISafety() {
  21. return true;
  22. }
  23. };
  24. AliyunIoT(){
  25. }
  26. private static AliyunIoT mIntance;
  27. public static AliyunIoT getIntance() {
  28. if (mIntance == null) {
  29. mIntance = new AliyunIoT();
  30. }
  31. return mIntance;
  32. }
  33. public void init(Context context, IConnectionStateListener listener) {
  34. mConnectionStateListener = listener;
  35. ALog.setLevel(ALog.LEVEL_DEBUG);
  36. MqttConfigure.mqttHost = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883";
  37. MqttInitParams initParams = new MqttInitParams(productKey, deviceName, deviceSecret);
  38. PersistentNet.getInstance().init(context, initParams);
  39. PersistentEventDispatcher.getInstance().registerOnTunnelStateListener(mConnectionStateListener, true);// 注册监听
  40. }
  41. public void register() {
  42. PersistentEventDispatcher.getInstance().registerOnPushListener(mIOnPushListener, true);
  43. PersistentNet.getInstance().subscribe(ACTION_SYS_SERVICE_CMD, mSysServiceListener);
  44. }
  45. public void setIOnPushListener(IOnPushListener listener) {
  46. this.mIOnPushListener = listener;
  47. }
  48. public void close() {
  49. PersistentEventDispatcher.getInstance().unregisterOnTunnelStateListener(mConnectionStateListener);//取消监听
  50. PersistentEventDispatcher.getInstance().unregisterOnPushListener(mIOnPushListener);
  51. PersistentNet.getInstance().unSubscribe(ACTION_SYS_SERVICE_CMD, mSysServiceListener);
  52. }
  53. }

在MainActivity中初始化

  1. AliyunIoT.getIntance().init(this, this);
  2. AliyunIoT.getIntance().setIOnPushListener(this);

实现IOnPushListener接口回调方法,接收处理阿里云物联网平台的消息

  1. /**
  2. * 下推消息回调接口
  3. *
  4. * @param topic
  5. * @param data 下推的消息内容
  6. */
  7. @Override
  8. public void onCommand(String topic, String data) {
  9. Log.e(TAG, "接收: topic=" + topic + " data=" + data);
  10. JSONObject json = JSON.parseObject(data);
  11. }
  12. /**
  13. * 根据method过滤消息
  14. *
  15. * @param topic : 本次下推消息的命令名称
  16. * @return : 若返回true,则onCommand被调用,返回false,则onCommand不会被调用
  17. */
  18. @Override
  19. public boolean shouldHandle(String topic) {
  20. Log.e(TAG, "接收 shouldHandle : topic=" + topic);
  21. return true;
  22. }

15.服务端集成

在开发板物联网平台使用中,我们常需要远程控制,所以我们需要有一个可以远程控制的程序,这里阿里云物联网平台提供了java SDK方便我们调用,但需要注意的是,目前java SDK不支持高级版,这也就是建议使用基础版的原因,在本教程中,服务端开发了一个Android app,装在手机上,方便我们测试

注意:这里使用的是普通版,高级版请查看另外一篇文章

Android Things阿里云物联网平台的使用(高级版)

  1. compile 'com.aliyun:aliyun-java-sdk-iot:4.0.0'
  2. compile 'com.aliyun:aliyun-java-sdk-core:3.2.10'

服务端代码如下:

  1. /**
  2. * 阿里云物联网平台服务端
  3. * Created by cc_want on 2018/4/11.
  4. */
  5. public class AliyunIOT {
  6. private String TAG ="AlibabaIOT";
  7. public static final String accessKey = "<填写>";
  8. public static final String accessSecret = "<填写>";
  9. public static final String productKey = "<填写>"; //这个是设备模版productkey
  10. public static final String ACTION_DRIVE = "/<填写>/<填写deviceName>/cmd";
  11. private DefaultAcsClient mClient;
  12. private static AliyunIOT mIntance;
  13. public static AliyunIOT getIntance(){
  14. if(mIntance == null){
  15. mIntance = new AliyunIOT();
  16. }
  17. return mIntance;
  18. }
  19. public void init(){
  20. try {
  21. DefaultProfile.addEndpoint("cn-shanghai", "cn-shanghai", "Iot", "iot.cn-shanghai.aliyuncs.com");
  22. } catch (ClientException e) {
  23. e.printStackTrace();
  24. }
  25. IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", accessKey, accessSecret);
  26. mClient = new DefaultAcsClient(profile); //初始化SDK客户端
  27. }
  28. public void open(int lightNo){
  29. //{"LightStatus":1}
  30. JSONObject json = new JSONObject();
  31. try {
  32. json.put("LightStatus",1);
  33. } catch (JSONException e) {
  34. e.printStackTrace();
  35. }
  36. new Drive(json.toString()).execute();
  37. }
  38. class Drive extends AsyncTask<String,Integer,String>{
  39. String mMsg;
  40. Drive(String msg){
  41. mMsg = msg;
  42. }
  43. @Override
  44. protected String doInBackground(String... params) {
  45. PubRequest request = new PubRequest();
  46. request.setProductKey(productKey);
  47. //此处必须用Base64加密
  48. request.setMessageContent(Base64.encodeToString(mMsg.getBytes(),Base64.DEFAULT));
  49. request.setTopicFullName(ACTION_DRIVE);
  50. request.setQos(0); //目前支持QoS0和QoS1
  51. //如果不加,则报错,官方文档没写
  52. //Specified signature is not matched with our calculation
  53. request.setMethod(MethodType.POST);
  54. try {
  55. PubResponse response = mClient.getAcsResponse(request);
  56. Log.d(TAG,"success:"+response.getSuccess());
  57. Log.d(TAG,"error:"+response.getErrorMessage());
  58. } catch (ClientException e) {
  59. e.printStackTrace();
  60. }
  61. return null;
  62. }
  63. }
  64. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/536022
推荐阅读
相关标签
  

闽ICP备14008679号