目录
一、任务要求
二、开发环境
三、网关上线
四、数据上传与命令下发
五、JSON命令解析思路
六、总结
我们将要实现的效果是:Android开发平板与Lora板进行有线串口通信,解析Lora板传来的数据,并将数据实时上传至云平台。
1.Android Studio
2.TCP设备接入协议
新大陆云平台TCP接入协议下载
3.熟悉JSON数据的文本解析封装规则
JAVA中TCP/HTTP协议JSON数据的封装~三分钟看懂
4.掌握Android的TCP通信
首先下载"新大陆云平台TCP接入协议",查看接入流程:
通过接入流程我们可以看到本设备是通过TCP协议接入的,通过数据报文与平台进行交互。
我们需要提前进入新大陆云平台官网注册账号,并在开发设置中,申请Key(设备传输密钥)。
通过审题,我们需要与开发板完成通信,实时读取开发板传递过来的温湿度数据等,作为我们需要上传的传感器数据。
在新大陆云平台上新建项目,后期需要用到设备标识与传输秘钥等信息。
创建Android程序,导入SerialPort包,并配置好网络权限。
随后我们需要设置串口并初始化串口监听器:
SerialPortEx serialPortEx=new SerialPortEx("COM0",9600);
//配置好通信串口 并协商好波特率
String value="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
serialPortEx.Open();
serialPortEx.setOnDataReceiveListener(new OnDataReceiveListener() {
@Override
public void onDataReceive(byte[] bytes, int i) {
//数据接收函数
value=new String(bytes);
}
});
}
我们需要ping一下地址以获取最新的IP:
随后连接新大陆云平台(端口8600或8601),调用client函数连接。
我们可以看到返回信息,状态码为0代表连接成功,程序自动启动心跳函数,保持连接状态。
此时我们查看新大陆云平台,发现网关处于在线状态。
我们打开云平台的实时数据功能,让其显示实时数据。
在串口监听器中,对数据做部分处理,随后在接收到串口数据时,上报接收到的数据。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
serialPortEx.Open();
serialPortEx.setOnDataReceiveListener(new OnDataReceiveListener() {
@Override
public void onDataReceive(byte[] bytes, int i) {
//数据接收函数
receive=new byte[i];
System.arraycopy(bytes,0,receive,0,i);
value=new String(receive);//去除多余数据
System.out.println("串口接收数据:"+value);
report(value);//调用上报数据函数
}
});
client();//调用连接函数连接至云平台
}
我们通过串口调试助手连接Android工业开发平板,模拟与Lora板的通信。
如图所示,Android程序接收了我们发送的模拟温度数据,并上报云平台,得到了上报响应,status状态码为0,代表上报成功。
此时我们进入云平台,通过实时数据可以看到,温度为25.6℃。
程序的监听报文机制,同时也是在程序连接成功后开启的,并对接收到的报文做解析处理,使得云平台对于执行器的操作可以被捕获并执行。
下面我们在云平台将照明灯打开,并从调试信息上查看相关报文信息。
程序已经对相关的命令做出了反馈,并且输出照明灯开启的信息,下面我们将照明灯关闭。
程序依旧可以很快做出解析处理,至此新大陆云平台Android物联网网关通信任务就圆满完成。
Android中的Json解析方式不同于IDEA中,Android中为我们提供了JSONObject类,可以方便的为我们提供解析,我们首先查看设备接入协议中的相关格式。
下列代码是我的解析方法,供大家参考。
JSONObject jsonObject=new JSONObject(down);
apitag=jsonObject.getString("apitag");//获取apitag
if(apitag.equals("m_lamp"))
{
if(jsonObject.getInt("data")==1)
System.out.println("照明灯开启");
else if(jsonObject.getInt("data")==0)
System.out.println("照明灯关闭");
}
本篇文章在于讲解相关思路,本题的重难点在于485通信、协议拟定、云平台数据上报、指令下发,相关知识需要多多积累才能顺利完成。有需要源码的朋友可以私信我哦,如果有其他疑问请在评论区留言。