app端(可远程显示温湿度、控制继电器开关)
四、AndroidManFest的application标签下添加服务
五、在onCreate()方法中调用init_MQtt()方法连接OneNet
/**
* MQTT连接服务器
*/
private void init_MQtt(){
//初始化sdk
MqttClient.initialize(this,"183.230.40.39",6002,"设备ID","产品ID","Master APIkey");
//设置接受响应回调
MqttClient.getInstance().setCallBack(callBack);
//设置连接属性
MqttConnectOptions connectOptions = new MqttConnectOptions();
connectOptions.setCleanSession(true);
connectOptions.setKeepAlive(121);
connectOptions.setWill(false);
connectOptions.setWillQoS(QoS.AT_MOST_ONCE);
connectOptions.setWillRetain(false);
//建立TCP连接
MqttClient.getInstance().connect(connectOptions);
}
/**
* MQTT回调函数
*/
private MqttCallBack callBack =new MqttCallBack() {
@Override
public void messageArrived(MqttMessage mqttMessage) {
switch (mqttMessage.getMqttHeader().getType()){
case CONNACK:
MqttConnAck mqttConnAck = (MqttConnAck)
break;
case PUBLISH:
break;
case SUBSCRIBE:
MqttSubscribe mqttSubscribe=(MqttSubscribe)mqttMessage;
break;
case SUBACK:
MqttSubAck mqttSubAck = (MqttSubAck) mqttMessage;
break;
case PINGRESP:
break;
case PUBACK:
MqttPubAck mqttPubAck=(MqttPubAck) mqttMessage;
break;
case PUBCOMP:
break;
}
}
@Override
public void connectionLost(Exception e) {
}
@Override
public void disconnect() {
}
};
六、此时手机设备已经连接上OneNet,可以在平台上看到
七、订阅Topic
MqttSubscribe mqttSubscribe = new MqttSubscribe("你要发布的Topic名字", QoS.AT_LEAST_ONCE);
MqttClient.getInstance().subscribe(mqttSubscribe);
八、发布Topic
//data中写入你想要发送的数据
byte[] data = {'1'};
MqttPublish mqttPublish=new MqttPublish("你要发布的Topic名称",data,QoS.AT_LEAST_ONCE);
MqttClient.getInstance().sendMsg(mqttPublish);
九、接收已订阅Topic的信息,在回调函数的相应项下修改
case PUBLISH:
MqttPublish mqttPublish = (MqttPublish) mqttMessage;
byte[] data = mqttPublish.getData();
String topic= mqttPublish.getTopicName();
String s=new String(data);
textview.setText(topic+" "+new String(data));
break;
十、本项目是用两个按键来发布一个Topic,一个的内容为1,另一个为0,ESP8266订阅了这个Topic,接收到1/0表示开/关灯。
手机订阅一个ESP8266发布的温湿度Topic和一个判断灯开关是否成功的Topic(LED_STATUS),实现温湿度在手机端显示和开关灯。
十一、你可以使用MQtt实现多人聊天。
十二、Android源码地址
十三、小白菜一个,大神勿喷,感谢onenet大哥提供的jar包。