文章目录

  • 一、新大陆物联网介绍及硬件端stm32准备。
  • 二、android连接云平台。
    • 2.1 导入SDK
    • 2.2 编写登录云平台
      • 首先写布局activity_login.xml文件。
      • 然后编写loginActivity.java
      • 测试
    • 2.3 实现手机控制硬件功能
      • activity_main.xml布局编写
      • MainActivity.java编写
      • 测试
        • 离线测试
        • 在线测试

一、新大陆物联网介绍及硬件端stm32准备。

参考 新大陆开发文档 。
反正很牛,免费使用,还提供相关的SDK。
android SDK:新大陆安卓SDK
云平台的使用:

  1. 注册账号新添加项目。
    填好必选的输入款框。

  2. 按需求创建传感器,执行器。



  3. stm32硬件连接测试。
    stm32通过esp_8266WiFi模块连接云平台。stm32连接云平台。




    测试完毕。下一步准备写android端,下发控制命令给stm32硬件端。

二、android连接云平台。

2.1 导入SDK

复制SDK到相应的工程目录

import module

找到刚刚放入本工程的SDK,导入。



在app的gradle的dependencies中添加依赖implementation project(':nlecloud-sdk')(Android studio添加依赖就是引用类库,个人理解相当于#include “xxx.h”),

尝试 import 我们的导入的SDK,NetWorkBusiness用来连接网络。import不提示错误表示导入成功。

清单文件AndroidManifest.xml中开启网络权限。<uses-permission android:name="android.permission.INTERNET" />

接下来配置网络安全。
创建一个xml文件。(才疏学浅 不懂得建全新的xml)


删除刚刚创建的xml文件中的内容,写入以下语句。

<?xml version ="1.0" encoding ="utf-8"?>
<network-security-config><base-config cleartextTrafficPermitted="true" />
</network-security-config>


清单文件中添加网络安全配置。

android:networkSecurityConfig="@xml/network_security_config"

2.2 编写登录云平台

创建LoginActivity及activity_login.xml文件。(新建工程后refactor -rename就行)

首先写布局activity_login.xml文件。


activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".LoginActivity"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="200dp"android:layout_marginLeft="20dp"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="48dp"android:gravity="center"android:orientation="horizontal"><TextViewandroid:id="@+id/text_name"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="用户名"android:textSize="20dp"android:textColor="#088"/><EditTextandroid:layout_width="0dp"android:layout_weight="3"android:layout_height="wrap_content"android:id="@+id/et_username"android:maxLength="11"android:hint="请输入用户名"android:text="18813360234"android:textSize="20dp"/><Viewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"></View></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="48dp"><TextViewandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="密码"android:textSize="20dp"android:maxLength="100"/><EditTextandroid:layout_width="0dp"android:layout_weight="3"android:layout_height="wrap_content"android:id="@+id/et_password"android:hint="请输入密码"android:text="123456"android:inputType="textPassword"/><Viewandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"></View></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"><Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="48dp"android:text="登录"/></LinearLayout></LinearLayout>

然后编写loginActivity.java

activity中,获取相应的输入账号密码,利用netWorkBusiness 连接云平台。连接成功结束本activity,开启下一个activity(这里要新建MainActivity)

package com.example.mywifitest;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import cn.com.newland.nle_sdk.requestEntity.SignIn;
import cn.com.newland.nle_sdk.responseEntity.User;
import cn.com.newland.nle_sdk.responseEntity.base.BaseResponseEntity;
import cn.com.newland.nle_sdk.util.NetWorkBusiness;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;public class LoginActivity extends AppCompatActivity {private EditText username;private EditText password;private Button login;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);username = findViewById(R.id.et_username);password = findViewById(R.id.et_password);login = findViewById(R.id.btn_login);login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {signIn();}});}private void signIn() {String platformAddress = "http://api.nlecloud.com:80/";final String login_UserName = username.getText().toString();final String login_Password = password.getText().toString();if(login_UserName.equals("")||login_Password.equals("")){Toast.makeText(this, "请输入账号和密码!", Toast.LENGTH_SHORT).show();return;}NetWorkBusiness netWorkBusiness = new NetWorkBusiness("", platformAddress);netWorkBusiness.signIn(new SignIn(login_UserName, login_Password), new Callback<BaseResponseEntity<User>>() {@Overridepublic void onResponse(Call<BaseResponseEntity<User>> call, Response<BaseResponseEntity<User>> response) {BaseResponseEntity<User> userBaseResponseEntity = response.body();//得到请求响应体if(userBaseResponseEntity != null){if(userBaseResponseEntity.getStatus() == 0){String accessToken = userBaseResponseEntity.getResultObj().getAccessToken();//获取响应的accessTokenIntent intent = new Intent(LoginActivity.this,MainActivity.class);Bundle bundle = new Bundle();bundle.putString("accessToken",accessToken);intent.putExtras(bundle);//传递accessTokenToast.makeText(LoginActivity.this, "登录成功。", Toast.LENGTH_SHORT).show();startActivity(intent);//开启下一个活动finish();//介绍本次活动}}Toast.makeText(LoginActivity.this, "登录失败,请检测账号和密码!", Toast.LENGTH_SHORT).show();}@Overridepublic void onFailure(Call<BaseResponseEntity<User>> call, Throwable t) {}});}
}


测试

开启android自带的虚拟机,测试。

故意打错账号测试。

提示账号,密码错误。

正常账号测试。登录成功。

2.3 实现手机控制硬件功能

我们传输数据给执行器pickUpCloothes,先实现stm32开发版上的led灯的控制。
stm32接收处理代码:使用stm32连接云平台。

activity_main.xml布局编写

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><Viewandroid:layout_width="match_parent"android:layout_height="50dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:text="设备ID:"android:textSize="20sp"android:gravity="center"android:textColor="#000"/><EditTextandroid:id="@+id/et_deviceId"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:hint="5位数字"android:text="86394"/><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="0.5"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:text="apiTag:"android:textSize="20sp"android:gravity="center"android:textColor="#000"/><EditTextandroid:id="@+id/et_apiTag"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:hint="传感器标识名"android:text="pickUpCloothes"/><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="0.5"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:text="传感数值:"android:textSize="20sp"android:gravity="center"android:textColor="#000"/><EditTextandroid:id="@+id/et_sensorValue"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:hint="传感器数值"/><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="0.5"/></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="50dp"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:text="设备状态:"android:textSize="20sp"android:gravity="center"android:textColor="#000"/><TextViewandroid:id="@+id/tv_onlineStatus"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="5"android:text="请先查询"android:textSize="20sp"android:gravity="center"android:textColor="#984"/></LinearLayout><Buttonandroid:id="@+id/btn_isOnline"android:layout_width="match_parent"android:layout_height="50dp"android:layout_marginRight="20dp"android:layout_marginLeft="20dp"android:text="查询设备在线与否"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:text="执行器开关"android:textSize="20sp"android:gravity="center"android:textColor="#000"/><Buttonandroid:id="@+id/btn_on"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:text="开"/><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="0.5"/><Buttonandroid:id="@+id/btn_off"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:text="关"/><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="0.5"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:text="传感器数值上传"android:textSize="20sp"android:gravity="center"android:textColor="#000"/><Buttonandroid:id="@+id/btn_updateSensorValue"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="5"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:text="上传最新传感器值"/></LinearLayout></LinearLayout>

MainActivity.java编写

package com.example.mywifitest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import com.google.gson.Gson;import org.json.JSONException;
import org.json.JSONObject;import cn.com.newland.nle_sdk.responseEntity.SensorInfo;
import cn.com.newland.nle_sdk.responseEntity.base.BaseResponseEntity;
import cn.com.newland.nle_sdk.util.NCallBack;
import cn.com.newland.nle_sdk.util.NetWorkBusiness;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private static String Tag = "MainActivity";private EditText et_deviceId;private EditText et_apiTag;private Button btn_on;private Button btn_off;private Button btn_updateSensorValue;private NetWorkBusiness netWorkBusiness;//定义sdk 服务private static NetWorkBusiness mNetWorkBusiness;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();isOnline();}private void isOnline() {}private void init() {et_deviceId = findViewById(R.id.et_deviceId);et_apiTag = findViewById(R.id.et_apiTag);btn_on = findViewById(R.id.btn_on);btn_off = findViewById(R.id.btn_off);btn_updateSensorValue = findViewById(R.id.btn_updateSensorValue);final Bundle bundle = getIntent().getExtras();final String accessToken = bundle.getString("accessToken");Toast.makeText(this, accessToken, Toast.LENGTH_SHORT).show();//显示accessToken,有个直观的感受,可以删除Log.d(Tag,"accessToken:"+accessToken);//在debug中显示accessTokennetWorkBusiness = new NetWorkBusiness(accessToken, "http://api.nlecloud.com:80/");btn_on.setOnClickListener(this);btn_off.setOnClickListener(this);}@Overridepublic void onClick(View v) {String deviceId=et_deviceId.getText().toString();String apiTag=et_apiTag.getText().toString();switch (v.getId()){case R.id.btn_on:if(deviceId.equals("")||apiTag.equals("")){Toast.makeText(this, "请输入设备id,及apiTag!", Toast.LENGTH_SHORT).show();return;}control_api(deviceId,apiTag,1);break;case R.id.btn_off:if(deviceId.equals("")||apiTag.equals("")){Toast.makeText(this, "请输入设备id,及apiTag!", Toast.LENGTH_SHORT).show();return;}control_api(deviceId,apiTag,0);break;case R.id.btn_updateSensorValue:break;}}private void control_api(String deviceId, String apiTag, final int value) {final Gson gson = new Gson();if(!deviceId.isEmpty()&&!apiTag.isEmpty())netWorkBusiness.control(deviceId, apiTag, value, new NCallBack<BaseResponseEntity>(getApplicationContext()) {@Overrideprotected void onResponse(BaseResponseEntity response) {Log.d(Tag,"control_api响应体:" + ", gson.toJson(response):" + gson.toJson(response));if(response != null){if(response.getStatus()==0){if(value == 1){Toast.makeText(MainActivity.this, "开启成功!", Toast.LENGTH_SHORT).show();}else if(value == 0){Toast.makeText(MainActivity.this, "关闭成功!", Toast.LENGTH_SHORT).show();}}else if(response.getStatus()==1) {Toast.makeText(MainActivity.this, "可能设备还未上线!", Toast.LENGTH_SHORT).show();}}}});}}

测试

离线测试

API调试工具模拟测试(api命令参考文档):

实际测试:

在线测试


开启

查看历史命令(这里没截图,按了两次开启)



观察到执行器已经关闭

可以看到历史的命令。

android学习笔记-连接新大陆物联网云平台控制stm32相关推荐

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

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

  2. 小白从零开始:小程序阿里云平台控制stm32(小程序篇)

    小白从零开始:小程序阿里云平台控制stm32(小程序篇) 文章目录 前言 一.准备:小程序注册+开发者工具 二.小程序开发者工具配置 三.小程序 js代码更改位置 四.小程序 wxml代码更改位置 五 ...

  3. 小白从零开始:小程序阿里云平台控制stm32温湿度光照强度(软件篇)

    小白从零开始:小程序阿里云平台控制stm32温湿度光照强度(软件篇) 文章目录 前言 一.Keil5+FLYMCU(软件烧录) 二.DHT11温湿度模块驱动代码 三.BH1750光照强度驱动代码 四. ...

  4. 【IOT】NB-IOT模块连接Onenet物联网云平台2020年实测

    一.准备 USBtoTTL模块 NB-IOT模块 串口调试助手 二.连接 Step1:模块连接 将USBtoTTL与NB-IOT模块连接VCC.GND对应连接TX接RX.RX接TX. Step2:连接 ...

  5. 物联网云平台都有哪些分类

    物联网云平台是物联网产业链中至关重要的环节,按照逻辑可以分为设备管理平台DMP.连接管理平台CMP.应用使能平台AEP.业务分析平台BAP四大平台类型. 1.设备管理平台DMP. 物联网云平台中的设备 ...

  6. 有害气体监测物联网云平台方案

    有害气体监测物联网云平台方案 一.行业现状 有害气体是指对人和生态环境有害的气体和蒸气.随着工业发展的快速进行,越来越多的有害气体被排放到了空气中,很多有害气体都会对人类的生活产生影响.而人们也意识到 ...

  7. 【云平台】与【物联网云平台】

    云平台 我们通常所说的云服务或云平台广义上是一个概念,但其实内部是两个部分. 1.支撑云服务运行的硬件和软件系统环境(云架构平台,简称云平台): 2.实现业务逻辑,支持客户应用,对外提供服务的应用服务 ...

  8. Android学习笔记第五篇--网络连接与云服务(一)

    Android学习笔记第五篇–网络连接与云服务 第一章.无线连接设备 ​ 除了能够在云端通讯,Android的无线API也允许在同一局域网内的设备通讯,**甚至没有连接网络,而是物理具体相近,也可以相 ...

  9. 连接阿里云物联网云平台

    这里写目录标题 创建阿里云产品 具体实施 下载开发板文件 程序 后续 创建阿里云产品 登录阿里云物联网云平台,观看教程 创建设备 选择创建产品 填好相应信息后,选择确定 创建设备 创建设备成功后,在弹 ...

  10. 学习日记——物联网云平台(乐鑫云平台)

    物联网云平台了解 1.物联网云平台:接收设备上报的数据.向设备下发数据.对数据进行转发/分析/计算/显示.管理设备等. 2.常见的物联网云平台一般有: ①:私有物联网云平台:假设某瓜农,为瓜棚装上了物 ...

最新文章

  1. SQL Server 与 ORACLE 的区别
  2. 写在2018-我的技术之路汇总前言
  3. matlab数据游标属性设置,将节点属性添加到图论图数据提示
  4. a查询计算机主机路由表信息,计算机网络主机A向其他主机B进行通信的流程
  5. 如何将图片序列化_PS如何将图片制作成gif动态图 ps制作gif动态图教程
  6. html自动适应屏幕分辨率,css如何自适应屏幕大小?
  7. python 求组合数最快方法_快速计算投资组合波动率的方法
  8. 多个字段排序_SQL | 汇总分析、排序、运行顺序
  9. android手机常用浏览器,Android手机 三大浏览器对比评测
  10. IC 拔取器 rework station
  11. 世界杯已开赛,哪些看球设备让你觉得身临其境?
  12. 视频监控摄像头直播主要应用领域分析
  13. Excel中如果对合并单元格求和
  14. js与php与mysql_PHP、MySQL和JavaScript入门经典(第6版)
  15. 人脸识别损失函数梳理与分析/相关方法整理
  16. Quality control of sequencing data
  17. uni-app实战之社区交友APP(9)我的页面开发
  18. JavaScript之延迟加载
  19. 网络安全管理员_三级_操作技能考核解题过程(1)
  20. “一”的客观形态与主观感受之间的关联性研究

热门文章

  1. 污水流量计常见的三种电磁损耗的简单介绍
  2. Twaver-HTML5基础学习(11)形状节点(ShapeNode)
  3. 局域网文件服务器单独文件夹加密,局域网 如何给共享文件夹加密
  4. visio流程图怎么合并线_6步轻松做Visio跨职能流程图
  5. 这样投简历,HR一定会看
  6. 无人机倾斜摄影三维建模技术在智慧城市中的应用
  7. Adobe Photoshop 2021 22.4.3 中英文+Neural Filters 含神经滤镜 下载
  8. python连接Oracle数据库报错Cannot locate a 64-bit Oracle Client library问题
  9. java 单点登录(SSO)
  10. lisp自动生成界址点表_LISP语言在宗地界址点成果表的应用