天天看點

Android Things阿裡雲物聯網平台的使用(普通版)

Android Things阿裡雲物聯網平台的使用(普通版)

研究了物聯網,那麼接下來你需要做的就是如何去遠端控制,實作開發闆的遠端通訊互動,那麼BAT最近也都陸續更新了自己的物聯網平台系統,借助BAT的資源,我們能很快的建立起一個物聯網開發環境,接下來我們手把手看看阿裡雲物聯網平台的使用吧

1.登入到阿裡雲,在左上角的産品菜單中找到“産品”

2.從“産品”菜單中找到“物聯網套件”

3.點選“管理控制台”,進入物聯網控制台進行相關配置

4.首先建立一個産品

5.填寫相關資訊,在這裡我們選擇基礎版,因為進階版雖然增加了很多功能,但是雲端開發SDK截止目前為止尚未更新,無法使用雲端SDK遠端控制開發闆

6.建立完成後,選擇裝置,點選“檢視”,進入選擇“前往管理”添加裝置資訊

7.點選“添加裝置”

8.填寫裝置名稱

9.記錄備份相關秘鑰資訊,點選一鍵複制,儲存到記事本,友善開發使用

10.回到産品資訊頁,進入“消息通訊”,點選“定義Topic類”添加

11.填寫相關資訊

12.接下來我們開發things程式,首先在項目的build.gradle檔案中添加阿裡雲倉庫位址

[java] view plain copy

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

13.在app子產品的build.gradle檔案中添加相關元件

[html]
  1. 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.         public void onFailed(String s, AError aError) {
  17.         public boolean needUISafety() {
  18.             return true;
  19.     };
  20.     AliyunIoT(){
  21.     }
  22.     private static AliyunIoT mIntance;
  23.     public static AliyunIoT getIntance() {
  24.         if (mIntance == null) {
  25.             mIntance = new AliyunIoT();
  26.         return mIntance;
  27.     public void init(Context context, IConnectionStateListener listener) {
  28.         mConnectionStateListener = listener;
  29.         ALog.setLevel(ALog.LEVEL_DEBUG);
  30.         MqttConfigure.mqttHost = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883";
  31.         MqttInitParams initParams = new MqttInitParams(productKey, deviceName, deviceSecret);
  32.         PersistentNet.getInstance().init(context, initParams);
  33.         PersistentEventDispatcher.getInstance().registerOnTunnelStateListener(mConnectionStateListener, true);// 注冊監聽
  34.     public void register() {
  35.         PersistentEventDispatcher.getInstance().registerOnPushListener(mIOnPushListener, true);
  36.         PersistentNet.getInstance().subscribe(ACTION_SYS_SERVICE_CMD, mSysServiceListener);
  37.     public void setIOnPushListener(IOnPushListener listener) {
  38.         this.mIOnPushListener = listener;
  39.     public void close() {
  40.         PersistentEventDispatcher.getInstance().unregisterOnTunnelStateListener(mConnectionStateListener);//取消監聽
  41.         PersistentEventDispatcher.getInstance().unregisterOnPushListener(mIOnPushListener);
  42.         PersistentNet.getInstance().unSubscribe(ACTION_SYS_SERVICE_CMD, mSysServiceListener);

在MainActivity中初始化

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

實作IOnPushListener接口回調方法,接收處理阿裡雲物聯網平台的消息

  1.  * 下推消息回調接口
  2.  *
  3.  * @param topic
  4.  * @param data  下推的消息内容
  5. @Override
  6. public void onCommand(String topic, String data) {
  7.     Log.e(TAG, "接收:  topic=" + topic + "  data=" + data);
  8.     JSONObject json = JSON.parseObject(data);
  9.  * 根據method過濾消息
  10.  * @param topic : 本次下推消息的指令名稱
  11.  * @return : 若傳回true,則onCommand被調用,傳回false,則onCommand不會被調用
  12. public boolean shouldHandle(String topic) {
  13.     Log.e(TAG, "接收 shouldHandle :  topic=" + topic);
  14.     return true;

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.  * Created by cc_want on 2018/4/11.
  3. public class AliyunIOT {
  4.     public static final String accessKey = "<填寫>";
  5.     public static final String accessSecret = "<填寫>";
  6.     public static final String ACTION_DRIVE = "/<填寫>/<填寫deviceName>/cmd";
  7.     private DefaultAcsClient mClient;
  8.     private static AliyunIOT mIntance;
  9.     public static AliyunIOT getIntance(){
  10.         if(mIntance == null){
  11.             mIntance = new AliyunIOT();
  12.     public void init(){
  13.         try {
  14.             DefaultProfile.addEndpoint("cn-shanghai", "cn-shanghai", "Iot", "iot.cn-shanghai.aliyuncs.com");
  15.         } catch (ClientException e) {
  16.             e.printStackTrace();
  17.         IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", accessKey, accessSecret);
  18.         mClient = new DefaultAcsClient(profile); //初始化SDK用戶端
  19.     public void open(int lightNo){
  20.         //{"LightStatus":1}
  21.         JSONObject json = new JSONObject();
  22.             json.put("LightStatus",1);
  23.         } catch (JSONException e) {
  24.         new Drive(json.toString()).execute();
  25.     class Drive extends AsyncTask<String,Integer,String>{
  26.         String mMsg;
  27.         Drive(String msg){
  28.             mMsg = msg;
  29.         protected String doInBackground(String... params) {
  30.             PubRequest request = new PubRequest();
  31.             request.setProductKey(productKey);
  32.             //此處必須用Base64加密
  33.             request.setMessageContent(Base64.encodeToString(mMsg.getBytes(),Base64.DEFAULT));
  34.             request.setTopicFullName(ACTION_DRIVE);
  35.             request.setQos(0); //目前支援QoS0和QoS1
  36.             //如果不加,則報錯,官方文檔沒寫
  37.             //Specified signature is not matched with our calculation
  38.             request.setMethod(MethodType.POST);
  39.             try {
  40.                 PubResponse response = mClient.getAcsResponse(request);
  41.                 Log.d(TAG,"success:"+response.getSuccess());
  42.                 Log.d(TAG,"error:"+response.getErrorMessage());
  43.             } catch (ClientException e) {
  44.                 e.printStackTrace();
  45.             }
  46.             return null;

 原文位址

http://www.bieryun.com/3626.html