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

目录

一、任务要求

二、开发环境

三、网关上线

四、数据上传与命令下发

五、JSON命令解析思路

六、总结 


一、任务要求

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


二、开发环境

        1.Android Studio

        2.TCP设备接入协议

                        新大陆云平台TCP接入协议下载

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

                       JAVA中TCP/HTTP协议JSON数据的封装~三分钟看懂
        4.掌握Android的TCP通信


三、网关上线

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

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

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

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

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

        新建传感器与执行器,自定义标识名称等信息。

        创建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:

        随后连接新大陆云平台(端口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物联网网关通信任务就圆满完成。

五、JSON命令解析思路

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

        

猜你喜欢

转载自blog.csdn.net/qq_39724355/article/details/127135187