目录

新大陆物联网-Android实现网关功能-连接云平台并上传传感器数据-获取执行器指令并执行-Android网关开发-通信-数据上传云平台-JAVA原理讲解-免费云平台使用-竞赛2022国赛真题

新大陆物联网-Android实现网关功能-连接云平台并上传传感器数据-获取执行器指令并执行-Android网关开发-通信-数据上传云平台-JAVA原理讲解-免费云平台使用-竞赛2022国赛真题

目录


一、任务要求

我们将要实现的效果是:Android开发平板与Lora板进行有线串口通信,解析Lora板传来的数据,并将数据实时上传至云平台。


二、开发环境

1.Android Studio

2.TCP设备接入协议

3.熟悉JSON数据的文本解析封装规则

4.掌握Android的TCP通信


三、网关上线

首先下载"新大陆云平台TCP接入协议",查看接入流程:

https://i-blog.csdnimg.cn/blog_migrate/ca378c8ba135a5278265d5e4d4b7d33e.png

通过接入流程我们可以看到本设备是通过TCP协议接入的,通过数据报文与平台进行交互。

我们需要提前进入新大陆云平台官网注册账号,并在开发设置中,申请Key(设备传输密钥)。

https://i-blog.csdnimg.cn/blog_migrate/c562f99e40788bb8432bc86e52aa69cc.png

通过审题,我们需要与开发板完成通信,实时读取开发板传递过来的温湿度数据等,作为我们需要上传的传感器数据。

在新大陆云平台上新建项目,后期需要用到设备标识与传输秘钥等信息。

https://i-blog.csdnimg.cn/blog_migrate/b041f636682a009a0a70c29f24af8d27.png 新建传感器与执行器,自定义标识名称等信息。

https://i-blog.csdnimg.cn/blog_migrate/6e1551fe4f58a817281bc818b9e964ec.png

创建Android程序,导入SerialPort包,并配置好网络权限。

<uses-permission android:name="android.permission.INTERNET"/>

随后我们需要设置串口并初始化串口监听器:

    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:

https://i-blog.csdnimg.cn/blog_migrate/5bd6ab037647a90a60cceb7866dbf30c.png

随后连接新大陆云平台(端口8600或8601),调用client函数连接。

https://i-blog.csdnimg.cn/blog_migrate/88878aeafd864d9b777de7461b4f1299.png

我们可以看到返回信息,状态码为0代表连接成功,程序自动启动心跳函数,保持连接状态。

https://i-blog.csdnimg.cn/blog_migrate/665298fe63d23f0836425f634bc788be.png

此时我们查看新大陆云平台,发现网关处于在线状态。

https://i-blog.csdnimg.cn/blog_migrate/d4f4679c996a8297a0b003bc158a4c97.png


四、数据上传与命令下发

我们打开云平台的实时数据功能,让其显示实时数据。

https://i-blog.csdnimg.cn/blog_migrate/4927bfab18f6ab4f684445d11b28a566.png

在串口监听器中,对数据做部分处理,随后在接收到串口数据时,上报接收到的数据。

@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板的通信。

https://i-blog.csdnimg.cn/blog_migrate/350860e077dcee4d5d9fcf32f1537b07.png

如图所示,Android程序接收了我们发送的模拟温度数据,并上报云平台,得到了上报响应,status状态码为0,代表上报成功。

此时我们进入云平台,通过实时数据可以看到,温度为25.6℃。

https://i-blog.csdnimg.cn/blog_migrate/86d711d0a2f7f74f3a921ac5f728c57e.png

程序的监听报文机制,同时也是在程序连接成功后开启的,并对接收到的报文做解析处理,使得云平台对于执行器的操作可以被捕获并执行。

下面我们在云平台将照明灯打开,并从调试信息上查看相关报文信息。

https://i-blog.csdnimg.cn/blog_migrate/8c2718385205cebc9a12e4bf67b53bd2.png

https://i-blog.csdnimg.cn/blog_migrate/10828683f8bf672f563bafd3adfded1c.png

程序已经对相关的命令做出了反馈,并且输出照明灯开启的信息,下面我们将照明灯关闭。

https://i-blog.csdnimg.cn/blog_migrate/a94710dc1d7f3a5d104364795e6ca3ef.png

程序依旧可以很快做出解析处理,至此新大陆云平台Android物联网网关通信任务就圆满完成。

五、JSON命令解析思路

Android中的Json解析方式不同于IDEA中,Android中为我们提供了JSONObject类,可以方便的为我们提供解析,我们首先查看设备接入协议中的相关格式。

https://i-blog.csdnimg.cn/blog_migrate/10188fb603ea1f15227f79f446d0084a.png

下列代码是我的解析方法,供大家参考。

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通信、协议拟定、云平台数据上报、指令下发,相关知识需要多多积累才能顺利完成。有需要 源码 的朋友可以 私信我 哦,如果有其他疑问请在评论区留言。