0


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

文章目录


前言

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


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

一、通讯基础

结合上一篇【FlexManager和阿里云MQTT通讯实例详解】,我们现在给设备做一个独立自主的APP,其通讯框架如下图所示,先一览为快:
在这里插入图片描述

二、FlexManager和阿里云的部署

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

1、FlexManager部署

在这里插入图片描述
在这里插入图片描述

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

设备端部署,创建完成后设备虚拟为rtyu,如图所示,已显示在线。
在这里插入图片描述
查看设备虚拟详情,如下图所示:在这里插入图片描述
调试一波设备信息收发情况,如图所示:
在这里插入图片描述
在这里插入图片描述


三、写设备客户端APP

Step 1 配置云客户端虚拟

在阿里云物联网平台配置设备APP虚拟客户端APP334,如图所示:
在这里插入图片描述

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

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

2.1 MQTT通讯参数代码

在这里插入图片描述

2.2 实现MQTT通讯具体代码

publicvoidconnectToIot(){try{MqttConnectOptions mqttConnectOptions =newMqttConnectOptions();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){thrownewRuntimeException(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,newIMqttActionListener(){@OverridepublicvoidonSuccess(IMqttToken asyncActionToken){System.out.printf("connect to iot hub success.\n");DisconnectedBufferOptions disconnectedBufferOptions =newDisconnectedBufferOptions();
                    disconnectedBufferOptions.setBufferEnabled(true);
                    disconnectedBufferOptions.setBufferSize(100);
                    disconnectedBufferOptions.setPersistBuffer(false);
                    disconnectedBufferOptions.setDeleteOldestMessages(false);
                    mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);subscribeToTopic();}@OverridepublicvoidonFailure(IMqttToken asyncActionToken,Throwable exception){System.out.printf("connect to iothub failed, exception : %s\n", exception.toString());}});}catch(MqttException ex){
            ex.printStackTrace();}}publicvoidsubscribeToTopic(){try{
            mqttAndroidClient.subscribe(subscriptionTopic,0,null,newIMqttActionListener(){@OverridepublicvoidonSuccess(IMqttToken asyncActionToken){System.out.println("subscribe topic success.");}@OverridepublicvoidonFailure(IMqttToken asyncActionToken,Throwable exception){System.out.println("subscribe topic failed.");}});// THIS DOES NOT WORK!
            mqttAndroidClient.subscribe(subscriptionTopic,0,newIMqttMessageListener(){@OverridepublicvoidmessageArrived(String topic,MqttMessage message)throwsException{// message Arrived!System.out.println("Message: "+ topic +" : "+newString(message.getPayload()));}});}catch(MqttException ex){System.err.println("Exception whilst subscribing");
            ex.printStackTrace();}}

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

publicvoidmessageArrived(String topic,MqttMessage message)throwsException{//System.out.println( message.toString());//Toast.makeText(Jieshou.this, message.toString(),Toast.LENGTH_SHORT).show();String mesg =newString(message.getPayload());JsonParser jp =newJsonParser();//将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客户端详情:
在这里插入图片描述

3.2 andriod平板调试效果

在这里插入图片描述

3.3 andriod手机调试效果

在这里插入图片描述

总结

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


本文转载自: https://blog.csdn.net/weixin_41729677/article/details/126651453
版权归原作者 一直在尽头 所有, 如有侵权,请联系我们删除。

“猿创征文|给设备做一个物联网APP-实例详解”的评论:

还没有评论