树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制

树莓派mqtt协议连接阿里云物联网平台(三)

前面树莓派的数据已经上传到云端,可是我的android手机该如何获取树莓派上传的这些数据呢,,困惑了我好几天的疑问,解开的那一刻,真的时拨开云雾见青天啊。
首先按照第一篇,登录阿里云后台,重新建立个产品以及设备,我们定义为andoroid,这个设备用来android手机端通过mqtt协议登录阿里云。
物理模型我们定义个开关吧,实现功能就是 手机端点击开关,然后树莓派链接的继电器动作,切断灯的电源。
建立好了如下图。
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第1张图片
不多说,直接上代码,Android Studio工程

    public void connectMqtt(String url,String clientId,String mMqttUserName, String mMqttPassword) throws Exception{

        //mMqttAndroidClient = new MqttAndroidClient(mContext,url,clientId);
        MemoryPersistence persistence = new MemoryPersistence();
        mMqttClient = new MqttClient(url,clientId,persistence);
        mMqttConnectOptions = new MqttConnectOptions();

        mMqttConnectOptions.setMqttVersion(4);
        mMqttConnectOptions.setAutomaticReconnect(true);
        mMqttConnectOptions.setCleanSession(true);

        mMqttConnectOptions.setUserName(mMqttUserName);
        mMqttConnectOptions.setPassword(mMqttPassword.toCharArray());
        mMqttConnectOptions.setConnectionTimeout(3);
        mMqttConnectOptions.setKeepAliveInterval(60);

        mMqttClient.setCallback(new MqttCallbackExtended() {
            @Override
            public void connectComplete(boolean reconnect, String serverURI) {
                Log.d("Max", "has  connectComplete ");
                mHander.sendEmptyMessageDelayed(0x01,10);
            }

            @Override
            public void connectionLost(Throwable cause) {
                Log.d("Max", "has  connectionLost ");
                mHander.sendEmptyMessageDelayed(0x02,10);
            }

            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {
                Log.d("Max", "has  messageArrived ");
                handlerArrivedMessage(topic,message);
            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {
                Log.d("Max", "has  deliveryComplete ");
            }
        });
        mMqttClient.connect(mMqttConnectOptions);
    }

主机用户名密码等 根据第二篇里说的那个东西生成即可。
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第2张图片
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第3张图片
代码里订阅的主题为
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第4张图片
为什么是这个主题呢?为什么树莓派的数据会通过这个主题发到android手机呢?
这里会用到阿里云一个比较牛逼的东西 规则引擎里的云产品流转
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第5张图片
点击创建规则,编写SQL规则,查询树莓派通过post上报的属性值。
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第6张图片
然后添加操作,是不是把树莓派上报的属性值,转到android设备订阅的Topic上了,这样android手机是不是就能同时收到树莓派上报的数据了呢?
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第7张图片
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第8张图片
如果要控制树莓派的设备,那么云产品流转里规则反一下就行了,就是把android设备上报的属性值,转发到树莓派可订阅的主题上就行。
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第9张图片
树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制_第10张图片
代码链接

你可能感兴趣的:(物联网,android,阿里云,mqtt,物联网)