文章目录
前言
随着工业自动化的不断发展,设备入云这门技术也越来越重要,很多人都开启了学习设备入云。然后前面几篇设备入云这一块也讲了好多了,本文呢就介绍设备入云之后自己做一个独立自主的设备客户端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源码请到我的学习资源里边找一找。
版权归原作者 一直在尽头 所有, 如有侵权,请联系我们删除。