赞
踩
前面树莓派的数据已经上传到云端,可是我的android手机该如何获取树莓派上传的这些数据呢,,困惑了我好几天的疑问,解开的那一刻,真的时拨开云雾见青天啊。
首先按照第一篇,登录阿里云后台,重新建立个产品以及设备,我们定义为andoroid,这个设备用来android手机端通过mqtt协议登录阿里云。
物理模型我们定义个开关吧,实现功能就是 手机端点击开关,然后树莓派链接的继电器动作,切断灯的电源。
建立好了如下图。
不多说,直接上代码,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);
}
主机用户名密码等 根据第二篇里说的那个东西生成即可。
代码里订阅的主题为
为什么是这个主题呢?为什么树莓派的数据会通过这个主题发到android手机呢?
这里会用到阿里云一个比较牛逼的东西 规则引擎里的云产品流转
点击创建规则,编写SQL规则,查询树莓派通过post上报的属性值。
然后添加操作,是不是把树莓派上报的属性值,转到android设备订阅的Topic上了,这样android手机是不是就能同时收到树莓派上报的数据了呢?
如果要控制树莓派的设备,那么云产品流转里规则反一下就行了,就是把android设备上报的属性值,转发到树莓派可订阅的主题上就行。
代码链接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。