猿创征文|给设备做一个物联网APP-实例详解

发布时间:2024-09-16 09:01

文章目录

  • 前言
  • 一、通讯基础
  • 二、FlexManager和阿里云的部署
    • 1、FlexManager部署
    • 2、阿里云物联网平台部署
  • 三、写设备客户端APP
    • Step 1 配置云客户端虚拟
    • Step 2 使用andriod studio 开发一个设备APP
      • 2.1 MQTT通讯参数代码
      • 2.2 实现MQTT通讯具体代码
      • 2.3 MQTT通讯获取的Json数据解析代码
    • Step 3 最终效果
      • 3.1 阿里云物联网平台效果
      • 3.2 andriod平板调试效果
      • 3.3 andriod手机调试效果
  • 总结


前言

随着工业自动化的不断发展,设备入云这门技术也越来越重要,很多人都开启了学习设备入云。然后前面几篇设备入云这一块也讲了好多了,本文呢就介绍设备入云之后自己做一个独立自主的设备客户端APP的实际项目操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、通讯基础

结合上一篇【FlexManager和阿里云MQTT通讯实例详解】,我们现在给设备做一个独立自主的APP,其通讯框架如下图所示,先一览为快:
猿创征文|给设备做一个物联网APP-实例详解_第1张图片

二、FlexManager和阿里云的部署

因为阿里云设备端虚拟前面一篇已经讲了,此处略去一万字,看图:

1、FlexManager部署

猿创征文|给设备做一个物联网APP-实例详解_第2张图片
猿创征文|给设备做一个物联网APP-实例详解_第3张图片

2、阿里云物联网平台部署

设备端部署,创建完成后设备虚拟为rtyu,如图所示,已显示在线。
在这里插入图片描述
查看设备虚拟详情,如下图所示:猿创征文|给设备做一个物联网APP-实例详解_第4张图片
调试一波设备信息收发情况,如图所示:
猿创征文|给设备做一个物联网APP-实例详解_第5张图片
猿创征文|给设备做一个物联网APP-实例详解_第6张图片


三、写设备客户端APP

Step 1 配置云客户端虚拟

在阿里云物联网平台配置设备APP虚拟客户端APP334,如图所示:
猿创征文|给设备做一个物联网APP-实例详解_第7张图片

Step 2 使用andriod studio 开发一个设备APP

在andriod studio 创建项目开发设备APP,段落重要代码如图所示:

2.1 MQTT通讯参数代码

猿创征文|给设备做一个物联网APP-实例详解_第8张图片

2.2 实现MQTT通讯具体代码

public void connectToIot() {
        try {
            MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();

            String mqttUsername = deviceName + "&" + productKey;
            System.out.println("gen username : " + mqttUsername);
            mqttConnectOptions.setUserName(mqttUsername);

            System.out.println("show content : " + content);
            System.out.println("show secret : " + deviceSecret);

            String mqttPassword = "";
            try {
                mqttPassword = encryptHMAC("hmacsha1", content, deviceSecret);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            System.out.println("calc password : " + mqttPassword);
            mqttConnectOptions.setPassword(mqttPassword.toCharArray());

            mqttConnectOptions.setAutomaticReconnect(true);
            mqttConnectOptions.setCleanSession(false);
            mqttConnectOptions.setMqttVersion(4);
            mqttConnectOptions.setKeepAliveInterval(90);

            mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    System.out.printf("connect to iot hub success.\n");
                    DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
                    disconnectedBufferOptions.setBufferEnabled(true);
                    disconnectedBufferOptions.setBufferSize(100);
                    disconnectedBufferOptions.setPersistBuffer(false);
                    disconnectedBufferOptions.setDeleteOldestMessages(false);
                    mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);
                    subscribeToTopic();
                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    System.out.printf("connect to iothub failed, exception : %s\n", exception.toString());
                }
            });


        } catch (MqttException ex) {
            ex.printStackTrace();
        }
    }

    public void subscribeToTopic() {
        try {
            mqttAndroidClient.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    System.out.println("subscribe topic success.");
                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    System.out.println("subscribe topic failed.");
                }
            });

            // THIS DOES NOT WORK!
            mqttAndroidClient.subscribe(subscriptionTopic, 0, new IMqttMessageListener() {
                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    // message Arrived!
                    System.out.println("Message: " + topic + " : " + new String(message.getPayload()));

                }
            });

        } catch (MqttException ex) {
            System.err.println("Exception whilst subscribing");
            ex.printStackTrace();
        }
    }

2.3 MQTT通讯获取的Json数据解析代码

 public void messageArrived(String topic, MqttMessage message) throws Exception {
                //System.out.println( message.toString());
                //Toast.makeText(Jieshou.this, message.toString(),Toast.LENGTH_SHORT).show();
                String mesg = new String(message.getPayload());
                JsonParser jp = new JsonParser();
                //将json字符串转化成json对象
                JsonObject jo = jp.parse(mesg).getAsJsonObject();
                //获取message对应的值
                //获取address对应的值
                String 手动状态 = jo.get("checkFailedData").getAsJsonObject().get("手动状态").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                //float cssl=Float.parseFloat(手动状态);
                DI1 = 手动状态;
                D1.setText(DI1);
                String 自动状态 = jo.get("checkFailedData").getAsJsonObject().get("自动状态").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                DI2 = 自动状态;
                D2.setText(DI2);
                String EDI水箱液位 = jo.get("checkFailedData").getAsJsonObject().get("EDI水箱液位").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI1 = EDI水箱液位 + "cm";
                A1.setText(AI1);
                String 原水电导 = jo.get("checkFailedData").getAsJsonObject().get("原水电导").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI2 = 原水电导 + "us/cm";
                A2.setText(AI2);
                String 一级产水电导 = jo.get("checkFailedData").getAsJsonObject().get("一级产水电导").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI3 = 一级产水电导 + "us/cm";
                A3.setText(AI3);
                String EDI产水电阻 = jo.get("checkFailedData").getAsJsonObject().get("EDI产水电阻").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI4 = EDI产水电阻 + "MΩ.cm";
                A4.setText(AI4);
                String 输送电阻 = jo.get("checkFailedData").getAsJsonObject().get("输送回水电阻").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI5 = 输送电阻 + "MΩ.cm";
                A5.setText(AI5);
                String 超滤进水压力 = jo.get("checkFailedData").getAsJsonObject().get("超滤进水压力").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI6 = 超滤进水压力 + "Mpa";
                A6.setText(AI6);
                String 一级膜前压力1 = jo.get("checkFailedData").getAsJsonObject().get("一级膜前压力1").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI7 = 一级膜前压力1 + "Mpa";
                A7.setText(AI7);
                String 一级膜前压力2 = jo.get("checkFailedData").getAsJsonObject().get("一级膜前压力2").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI8 = 一级膜前压力2 + "Mpa";
                A8.setText(AI8);
                String EDI进水压力 = jo.get("checkFailedData").getAsJsonObject().get("EDI进水压力").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI9 = EDI进水压力 + "Mpa";
                A9.setText(AI9);
                String 输送压力 = jo.get("checkFailedData").getAsJsonObject().get("输送压力").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI10 = 输送压力 + "Mpa";
                A10.setText(AI10);
                String 超滤产水流量 = jo.get("checkFailedData").getAsJsonObject().get("超滤产水流量").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI11 = 超滤产水流量 + "L/h";
                A11.setText(AI11);
                String 一级产水流量 = jo.get("checkFailedData").getAsJsonObject().get("一级产水流量").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI12 = 一级产水流量 + "L/h";
                A12.setText(AI12);
                String 一级浓水流量 = jo.get("checkFailedData").getAsJsonObject().get("一级浓水流量").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI13 = 一级浓水流量 + "L/h";
                A13.setText(AI13);
                String EDI产水流量 = jo.get("checkFailedData").getAsJsonObject().get("EDI产水流量").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI14 = EDI产水流量 + "L/h";
                A14.setText(AI14);
                String 超滤进水温度 = jo.get("checkFailedData").getAsJsonObject().get("超滤进水温度").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI15 = 超滤进水温度 + "℃";
                A15.setText(AI15);
                String EDI产水温度 = jo.get("checkFailedData").getAsJsonObject().get("EDI产水温度").getAsJsonObject().get("value").getAsJsonObject().get("value").getAsString();
                AI16 = EDI产水温度 + "℃";
                A16.setText(AI16);

Step 3 最终效果

3.1 阿里云物联网平台效果

设备端、客户端虚拟同时完成,如图所示:在这里插入图片描述
设备端详情猿创征文|给设备做一个物联网APP-实例详解_第9张图片
APP客户端详情:
猿创征文|给设备做一个物联网APP-实例详解_第10张图片

3.2 andriod平板调试效果

猿创征文|给设备做一个物联网APP-实例详解_第11张图片

3.3 andriod手机调试效果

猿创征文|给设备做一个物联网APP-实例详解_第12张图片

总结

以上就是今天要讲的内容,本文仅仅简单介绍了给设备做一个独立自主的APP,而完全版的物联网APP源码请到我的学习资源里边找一找。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号