在《每谈及物联网都难以离开的MQTT协议!》中,我们使用了模拟的方式让MQTT接入阿里云云服务器。但是我们实际中使用时却不能模拟,每一步都得自己调,毫无疑问会非常的麻烦。那么我们必须把这些指令和操作写在程序中,让其自动、智能地运行。
以下是我们将MQTT协议和连接阿里云平台的操作通过Android studio写入app中,并简单设计UI。实现手机app远程控制单片机LED灯亮灭的功能。
app源码:https://github.com/Liangyz2019/IoT-LED-APP-
首先,我们得引入mqtt.jar包
选取org.eclipse.paho.client.mqttv3/1.2.2/org.eclipse.paho.client.mqttv3-1.2.2.jar下载
jar包拷贝到新工程的app/libs目录并导入
AndroidManifest添加网络权限
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
MainActivity添加包
package com.example.test;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
import com.example.test.AliyunIoTSignUtil;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
在public class MainActivity extends AppCompatActivity {}中
初始定义一些基本信息
private static final String TAG =MainActivity.class.getSimpleName();
private TextView msgTextView;
private String productKey="a16OKk6dTya";
private String deviceName="KAMI";
private String deviceSecret="8790bd0545dd874d77fcac85729fc4bf";
private final String payloadJson1="{\"ParkingState\":1}";
private final String payloadJson2="{\"ParkingState\":0}";
private MqttClient mqttClient=null;
final int POST_DEVICE_PROPERTIES_SUCCESS = 1002;
final int POST_DEVICE_PROPERTIES_ERROR = 1003;
private String responseBody = "";
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case POST_DEVICE_PROPERTIES_SUCCESS:
showToast("发送数据成功");
break;
case POST_DEVICE_PROPERTIES_ERROR:
showToast("post数据失败");
break;
}
}
};
开始APP生命周期
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msgTextView