新大陆云平台篇

  • 简介
    • 代码分析
      • 全部代码

简介

主要功能:温湿度传感器,灯,风扇与网关ZIGBBE自组网,然后网关将数据上传至云平台,上位机程序(android)通过云平台实时获取数据
1:获取温湿度数据
2:控制风扇,灯
3:如果实时获取的温度大于了一定数值自动开启风扇,如果小于一定数组自动开启灯
4:输入的温度大于了一定数值自动开启风扇,如果小于一定数值自动开启灯

代码分析

首先连接云平台,进行登陆。获取访问令牌

 ConnectCloud.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {netWorkBusiness.signIn( new SignIn( UserName, PassWord ), new NCallBack<BaseResponseEntity<User>>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity<User> response) {}@Overridepublic void onResponse(Call<BaseResponseEntity<User>> call, Response<BaseResponseEntity<User>> response) {BaseResponseEntity<User> body = response.body();if (body != null){if (body.getStatus() == 0){AccessToken = body.getResultObj().getAccessToken();if (AccessToken == null){Toast.makeText( MainActivity.this,"访问令牌为空",Toast.LENGTH_SHORT ).show();return;}netWorkBusiness = new NetWorkBusiness( AccessToken, Url);}}}} );}} );

开启子线程,实时获取温度数据,
并通过runOnUiThread从子线程跳转到主线程,更新UI,下面采用的是lamda写法。

 thread = new Thread( ()->{while (true){/**while start*/try{Thread.sleep( 2000 );}catch (InterruptedException e){e.printStackTrace();}/**获取温度数据开始*/netWorkBusiness.getSensors( DeviceID, TmpTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {}@Overridepublic void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {BaseResponseEntity<List<SensorInfo>> body = response.body();if (body != null){if (body.getStatus() == 0){TmpValue = Double.parseDouble( body.getResultObj().get( 0 ).getValue() );}}}} );/**获取温度数据结束*//**改变温度的值*/runOnUiThread( ()->{Tmp.setText( TmpValue+" ℃" );} );/**改变温度的值*/

打开风扇和灯通过新大陆JAR包中的control方法

 /*** 发送命令/控制设备** @param deviceId 设备ID(必填)* @param apiTag   传感标识名(必须但值可为空)* @param data     开关类:开=1,关=0,暂停=2*                 家居类:调光灯亮度=0~254,RGB灯色度=2~239,窗帘、卷闸门、幕布打开百分比=3%~100%,红外指令=1(on)2(off)*                 其它:integer/float/Json/String类型值*/
 OpenFan.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {Fan.startAnimation( Rotate );netWorkBusiness.control( DeviceID, FanTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity response) {Toast.makeText( MainActivity.this,"打开风扇",Toast.LENGTH_SHORT ).show();}} );}} );

当硬件风扇选择时,对应的上位机程序风扇动画

    private void InitAnimation(){Rotate = AnimationUtils.loadAnimation( MainActivity.this,R.anim.rotate );Rotate.setDuration(1000);//animation.setRepeatCount(-1); //无限旋转Rotate.setRepeatMode(1);Rotate.setFillAfter(true);CycleInterpolator interpolator = new CycleInterpolator(1);Rotate.setInterpolator(interpolator);}

全部代码

 protected void onCreate(Bundle savedInstanceState) {super.onCreate( savedInstanceState );setContentView( R.layout.activity_main );InitView();GetData();InitAnimation();InputTmpOk.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {String GetEditTextTmpValue = InputTmp.getText().toString();int IntTmpValue = Integer.parseInt( GetEditTextTmpValue );if (IntTmpValue < 0){Toast.makeText( MainActivity.this,"温度不能小于0",Toast.LENGTH_SHORT ).show();return;}if (IntTmpValue > 40){Toast.makeText( MainActivity.this,"温度不能大于40",Toast.LENGTH_SHORT ).show();return;}ControlFan(IntTmpValue);}} );ButtonOpenLamp.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {CloseLamp.setVisibility( View.INVISIBLE );OpenLamp.setVisibility( View.VISIBLE );netWorkBusiness.control( DeviceID, LightTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity response) {Toast.makeText( MainActivity.this,"开灯",Toast.LENGTH_SHORT ).show();}} );}} );ButtonCloseLamp.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {CloseLamp.setVisibility( View.VISIBLE );OpenLamp.setVisibility( View.INVISIBLE );netWorkBusiness.control( DeviceID, LightTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity response) {Toast.makeText( MainActivity.this,"关灯",Toast.LENGTH_SHORT ).show();}} );}} );OpenFan.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {Fan.startAnimation( Rotate );netWorkBusiness.control( DeviceID, FanTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity response) {Toast.makeText( MainActivity.this,"打开风扇",Toast.LENGTH_SHORT ).show();}} );}} );CloseFan.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {Fan.clearAnimation();netWorkBusiness.control( DeviceID, FanTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity response) {Toast.makeText( MainActivity.this,"关闭风扇",Toast.LENGTH_SHORT ).show();}} );}} );
}private void InitView(){Tmp = findViewById( R.id.Tmp );Hum = findViewById( R.id.Hum );InputTmp = findViewById( R.id.InputTmp );InputTmpOk = findViewById( R.id.InputOk );ConnectCloud = findViewById( R.id.ConnectCloud );CloseLamp = findViewById( R.id.LampClose );OpenLamp = findViewById( R.id.LampOpen );ButtonOpenLamp = findViewById( R.id.ButtonOpenLamp );ButtonCloseLamp = findViewById( R.id.ButtonCloseLamp );Fan = findViewById( R.id.Fan );OpenFan = findViewById( R.id.OpenFan );CloseFan= findViewById( R.id.CloseFan );}private void InitAnimation(){Rotate = AnimationUtils.loadAnimation( MainActivity.this,R.anim.rotate );Rotate.setDuration(1000);//animation.setRepeatCount(-1); //无限旋转Rotate.setRepeatMode(1);Rotate.setFillAfter(true);CycleInterpolator interpolator = new CycleInterpolator(1);Rotate.setInterpolator(interpolator);}private void GetData(){/**登陆开始*/ConnectCloud.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {netWorkBusiness.signIn( new SignIn( UserName, PassWord ), new NCallBack<BaseResponseEntity<User>>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity<User> response) {}@Overridepublic void onResponse(Call<BaseResponseEntity<User>> call, Response<BaseResponseEntity<User>> response) {BaseResponseEntity<User> body = response.body();if (body != null){if (body.getStatus() == 0){AccessToken = body.getResultObj().getAccessToken();if (AccessToken == null){Toast.makeText( MainActivity.this,"访问令牌为空",Toast.LENGTH_SHORT ).show();return;}netWorkBusiness = new NetWorkBusiness( AccessToken, Url);}}}} );}} );/**登陆结束*/thread = new Thread( ()->{while (true){/**while start*/try{Thread.sleep( 2000 );}catch (InterruptedException e){e.printStackTrace();}/**获取温度数据开始*/netWorkBusiness.getSensors( DeviceID, TmpTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {}@Overridepublic void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {BaseResponseEntity<List<SensorInfo>> body = response.body();if (body != null){if (body.getStatus() == 0){TmpValue = Double.parseDouble( body.getResultObj().get( 0 ).getValue() );}}}} );/**获取温度数据结束*//**改变温度的值*/runOnUiThread( ()->{Tmp.setText( TmpValue+" ℃" );} );/**改变温度的值*//**获取湿度数据开始*/netWorkBusiness.getSensors( DeviceID, HumTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {}@Overridepublic void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {BaseResponseEntity<List<SensorInfo>> entity = response.body();if (entity != null){if (entity.getStatus() == 0){HumValue = Double.parseDouble( entity.getResultObj().get( 0 ).getValue() );}}}} );/**获取湿度数据结束*//**改变湿度的值*/runOnUiThread( ()->{Hum.setText( HumValue+" RH" );} );/**改变湿度的值*//**while end*/}} );thread.start();}/**如果大于规定温度,开启风扇*/private void ControlFan(int GetTmpValue){if (GetTmpValue > MaxTmpValue){netWorkBusiness.control( DeviceID, LightTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity response) {}@Overridepublic void onResponse(Call<BaseResponseEntity> call, Response<BaseResponseEntity> response) {Toast.makeText( MainActivity.this,"风扇已经开启",Toast.LENGTH_SHORT ).show();}} );}else if (GetTmpValue< MInTmpValue){netWorkBusiness.control( DeviceID, LightTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity response) {}@Overridepublic void onResponse(Call<BaseResponseEntity> call, Response<BaseResponseEntity> response) {Toast.makeText( MainActivity.this,"风扇已经关闭",Toast.LENGTH_SHORT ).show();}} );}}

Android——新大陆云平台篇相关推荐

  1. Android——新大陆云平台配置(2)

    云平台登陆代码详解 开启应用 登陆云平台 开启应用 效果如图所示: 首先位Switch控件建造一些自定义view,在drawable文件夹下建立六个文件,分别位:open_track,open_thu ...

  2. 安卓控制新大陆云平台(一)

    前言 由于要参加比赛,因此必须学会用安卓来控制新大陆云平台,后期还会用C#控制,最后更新STM32部分代码 新大陆云平台官网:http://www.nlecloud.com/ 本章主要先介绍如何写一个 ...

  3. Android网络请求-新大陆物联网云平台请求通信工程-使用Post登录新大陆云平台获取Token-物联网竞赛-物联网数据通信

    目录 一.概述 二.代码与实现 三.总结归纳 一.概述 本文将通过Android Studio原生安卓环境,通过Post网络请求与新大陆物联网云平台官网进行通信,实现获取用户Token. Need:A ...

  4. 新大陆云平台app制作(史上最简单)

    笔记目录 一.App Inventor介绍 二.访问原理 三.逻辑设计 1.页面设计 2.登录 3.数据解析 4.传感器数据获取 因为比赛原因,需要做一款app来读取新大陆物联网平台的数据,官方给的资 ...

  5. 新大陆云平台使用笔记

    云平台API使用 1.登陆 1.1 登陆调用api 1.2返回JSON值2.查询单个项目 2.1 api 2.2查询单个项目返回JSON值 3.模糊查询项目 3.1 模糊查询项目api 3.2 模糊查 ...

  6. 骐俊CAT1模组 - MQTT接入腾讯云平台篇

    本次实验使用骐俊ML110S系列模组及开发底板,通过MQTT协议采用密钥的方式接入腾讯云平台,实现消息的发布及订阅,可分为接入注册及动态注册两种方式.   设备注册(接入注册) A.进入腾讯云平台注册 ...

  7. 基于Android与云平台的多功能社交软件(毕业设计)

    一直想把毕业设计开源出来,到了今天也是时候了.由于题目是老师指导而成的,鉴于表达对老师的敬意,也以老师给的题名作为本篇的题目.感谢项老师的指导,我的设计非常顺利,也拿到很满意的成绩. 本社交软件基于A ...

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

    目录 一.任务要求 二.开发环境 三.网关上线 四.数据上传与命令下发 五.JSON命令解析思路 六.总结 一.任务要求 我们将要实现的效果是:Android开发平板与Lora板进行有线串口通信,解析 ...

  9. ESP8266-3-连接物联网云平台上传数据

    1.连接物联网云平台需要先去http://www.nlecloud.com注册一个账号,然后进入开发者中心,新增项目即可.协议选择TCP 要记住设备标识,传输秘钥,这些都是esp8266要使用的. 2 ...

最新文章

  1. OpenCV与c语言图像融合
  2. 计算机二级python用什么书-计算机二级Python考试有什么学习资料?
  3. Map-Reduce的过程解析
  4. 计算机学院校园文化标语,校园文化建设标语50条
  5. Fire!——两个BFS
  6. 飞鸽传书 扩散全身的
  7. 保姆级计算机视觉学习路线
  8. 数据库每日一题(易错)
  9. 物联网技术,主要应用于哪十大行业
  10. oracle习题-emp表查询练习
  11. jmeter监控服务器CPU、网络、内存等信息
  12. 开发小程序的最大优势
  13. cs1.6服务器修改游戏类型,cs1.6联机及游戏模式详细解读
  14. 如何在一个事件中使用(调用)另一个事件
  15. Q萌可爱,奇瑞QQ冰淇淋给年轻人爱的大礼物
  16. JS显示和隐藏div
  17. IOS开发:如何修改 SwiftUI 模板项目的启动页面
  18. 关于电压跟随器的那些事
  19. 《CCNP安全Secure 642-637认证考试指南》——2.3节入侵者动机
  20. 《日落苍狼》读后感及摘录

热门文章

  1. Rpm、Yum(程序包管理)
  2. html绘制三维,在HTML + JS画布中绘制三维图形
  3. iPad当Linux电脑显示器,效率App:让iPad变成你电脑的第二显示屏,相当实用!
  4. 游戏部署安全策略方案
  5. 【富文本】亿图思维导图MindMaster Pro限时赠送正版
  6. 小知识(3) 解决谷歌翻译问题(浏览器/IDEA)
  7. matlab不能定位,matlab定位问题!
  8. 文件系统操作与编程应用
  9. 2012年3月2日专业学习
  10. linux命令(五)--打/解包、压缩/解压缩、安装软件