摘要
随着物联网技术的应用在我国越来越普遍。扫地机器人和智能电器无处不在。随着物联网技术的成熟,将导致社会的巨大变革。在当今这个工业经济时代,十分追求生产效率和生产力,智能产品将带来新的服务,并且以此来驱动整个生产过程,新的组织将解决创新问题,这将给整个社会经济带来更好的变化。
与此同时,手机已成为人们的必备品。一些市场研究公司发布了一套数据。数据显示,Android市场占86%,iOS占14%。如果Android手机和物联网设备能够互操作,将大大提高生产效率,提高人们工作和生活的便利性。
本课题是北京农业大学自动化智能车辆子项目,用于对自动化智能车辆采集的数据进行接收、处理和管理。
关键词 物联网,Android,自动化
Research and development of automated
Abstract
With the application of Internet of things technology is more and more common in China. Sweeping robots and smart appliances are everywhere. With the maturity of Internet of things technology, it will lead to great changes in society. In today’s industrial economy era, great pursuit of production efficiency and productivity, intelligent products will bring new services and drive the whole production process, and new organizations will solve the problem of innovation, which will bring better changes to the whole social economy.
At the same time, mobile phones have become a necessity for people. Some market research firms have published a set of figures. Android makes up 86% of the market and ios 14%, according to the data. If Android phones and iot devices can interoperate, it will greatly improve the production efficiency and improve the convenience of people’s work and life.
This project is a sub-project of Beijing agricultural university automatic intelligent vehicle, which is used to receive, process and manage the data collected by automatic intelligent vehicle.
Keywords: the Internet of Things,Android,Automation
目录
1概述 1
1.1选题背景和意义 1
1.2研究现状 1
1.3论文主要工作 1
2 开发环境说明 3
2.1 Android Studio介绍 3
2.2 JDK开发环境介绍 3
2.3 Android特征 3
2.4 lamp开发环境 4
3 需求分析 5
3.1系统开发目标 5
3.2系统需求分析 5
3.3可行性分析 6
4 设计与实现 8
4.1数据传输和指令控制的实现 8
4.1软件概要 9
4.2硬件概要 10
4.4服务器数据库设计 11
4.5服务器php脚本设计 13
4.6自动化小车安卓端登录界面设计 15
4.7自动化小车安卓端注册界面设计 16
4.8自动化小车安卓端数据管理界面设计 17
4.9动化小车安卓端操作记录管理界面设计 18
4.10动化小车安卓端控制界面设计 19
5 软件测试 20
6总结 23
6.1收获和总结 23
6.2展望未来 23
致谢 24
参考文献 25
3 需求分析
3.1系统开发目标
开发出一套完整的数据管理系统,包括安卓客户端,和服务器端。能实现:用户使用安卓客户端方便的操作存在服务器的数据,有一套完整的用户认证登陆的系统,能对数据可视化显示,分析,能对硬件自动化小车进行控制。其中,服务器端要求能良好的接收小车利用网络所传来的数据,能和自动化小车与安卓APP这2者沟通,接受二者的双重操作。
3.2系统需求分析

软件项目通过问题定义、可行性研究进入开发时期,最重要的工作就是需求分析。需求分析对整个软件开发的过程起决定性的作用。需求分析做得不完善,会给后续的开发工作带来大量的困难,造成用户对软件不满,项目工期也因此延长,沟通协调困难,严重的甚至会造成项目开发的失败,用户与软件开发者终止合同。可以说需求分析是做好软件项目的关键所在[[[6]沈鑫,陈华山.关于软件需求分析的理解[J].现代信息科技,2018,2(11):13-14+17.]]。
① 用户需求分析
本软件的是针对从事农业的人员,他们需要用本软件来观察数据,处理数据,这是其核心,所以应该要求软件设计的理念:
操作简便,不能有着复杂界面和操作步骤,应该让人进入软件很快找到需要的功能区,功能应该齐全,但也不能繁琐,使人操作时感到不快。
运行稳定,不能运行时着出现闪退,崩溃等现象,也不能有数据传输的错误,丢失,多余等现象。
让人对数据一目了然,并且流畅的对数据进行操作,这是核心,也因为本软件设计就是用来处理数据的。

② 功能需求分析
由于本课题分为自动化小车安卓端和服务器端,本软件自动化小车安卓端应该研发以下功能:
1)注册账户功能,这是基本功能,用来确认一个用户的身份
2)登录功能,这是认证身份所用,只有注册完成的用户才可进入软件
3)查看数据,用户可以查看小车的数据,通过表格的形式浏览
4)删除数据,用户通过长按数据框对其进行删除
5)视频传输,用户可以通过wifi查看自动化小车的摄像头的视频
6)行走命令,用户可以通过wifi的传输命令控制其前后左右行走
7)拍照命令,用户可以通过wifi的传输命令控制其拍照,所拍的照片
可以上传到服务器
8)传感器开关,用户可以通过wifi的控制自动化小车的穿开启开关,
9)上传操作记录,软件应当对用户的操作进行记录,并且上传到php的
服务器
10)查看操作记录,通过安卓自动化小车的软件端,用户可以通过界
面查看自己的操作纪录。
11)删除操作记录,通过安卓自动化小车的软件端,用户可以通过界
面上长按表格来对自己的自动化小车数据删除。

服务器端有如下功能:
1)验证登录,这是用来验证自动化小车安卓端传来的数据,根据用户名密码的正确与否返回相应结果。
2)注册用户,这是用来向数据库添加用户注册的账号密码
3)查询数据,这是用来查询服务器数据,返回给安卓端
4)删除数据,这是用来接收自动化小车安卓端请求后删除一部分数据
5)查询操作记录,用来收到自动化小车安卓端请求,取数据库查询操作记录表。
6)添加操作记录,这是用来接收自动化小车安卓端请求后向服务器数据库添加一条记录
7)删除操作记录,这是用来接收自动化小车安卓端请求后向服务器数据库删除一条记录
3.3可行性分析

可行性分析中,最为核心的就是对其项目从项目实施 目标、技术方案、过程控制、人力资源、市场 营销、成本利润和风险等各方面进行全方位的论证与评价[[[7]蒲冬梅.软件项目可行性分析评审的要点[J].电子技术与软件工程,2017(24):54-55.]]。

1)技术的可行性
本项目自动化小车安卓端采用java语言,其资料教程十分丰富,服务器端采用php语言,其非常适合快速开发小型服务器。
2)财务可行性
本课题以编写代码为主,硬件不在范围内,由自动化小车项目组提供经费,软件方面无大支出,因此资金上可行。
3)社会可行性
本软件用于农业上的数据收集,其对农业科学发展有建设性作用,且我们作为农科院校,正好可以对其投入应用中。且本软件不涉及政治,宗教,法律,道德等问题。所以对社会的价值主要体现在对科学技术的促进。
4)风险因素以及对策
风险因素主要体现在软件服务器的稳定性,安全性,手机系统的稳定性,安全性。由于是在安卓系统上运行,而安卓是谷歌旗下的操作系统,具有良好的经济支撑,短时间内不会有任何风险;服务器端采用lamp服务器,服务器硬件是腾讯云,其有一定不可靠性,这体现在服务器负荷和国内网络覆盖问题上,由于服务器最大负荷有限,不能承受大量用户同时访问,而且使服务器与自动化小车安卓端链接依靠无线网络,其自动化小车安卓端必须在有网络覆盖的地区。前者的对策是在有需要时换更好的服务器,后者是控制用户群体,使其在中国境内网络信号覆盖区域内使用。
本文转载自:http://www.biyezuopin.vip/onews.asp?id=16528

package cn.com.lttc.loginui;import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.view.Display;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;import net.tsz.afinal.FinalActivity;
import net.tsz.afinal.FinalHttp;
import net.tsz.afinal.annotation.view.ViewInject;
import net.tsz.afinal.http.AjaxCallBack;
import net.tsz.afinal.http.AjaxParams;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class controlActivity extends FinalActivity implements WheelView.WheelClickListener ,View.OnTouchListener,GestureDetector.OnGestureListener{int FLING_MIN_VELOCITY=100;//触摸时候的移动速度@ViewInject(id=R.id.myLayout_id)LinearLayout mylayout;private GestureDetector mGestureDetector;@ViewInject(id=R.id.et_cid)EditText et_cid;@ViewInject(id=R.id.bt_shoot, click="bn_onClick") Button bn_shoot;@ViewInject(id=R.id.bt_drive, click="bn_onClick") Button bn_drive;@ViewInject(id=R.id.bt_photo, click="bn_onClick") Button bn_photo;@ViewInject(id=R.id.bt_sensor, click="bn_onClick") Button bn_sensor;private WheelView wheel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_control);wheel = (WheelView) findViewById(R.id.ctrls);wheel.setWheelClickListener(this);mylayout.setOnTouchListener(this);mylayout.setLongClickable(true);mGestureDetector = new GestureDetector(this, this);}@Overridepublic void onWheelClick(int type) {switch (type) {case WheelView.CLICK_BOTTOM_DOWN://下面按钮按下的时候issue("behind");break;case WheelView.CLICK_LEFT_DOWN://左边按钮按下的时候issue("left");break;case WheelView.CLICK_RIGHT_DOWN://右边按钮按下的时候issue("right");break;case WheelView.CLICK_TOP_DOWN://上面按钮按下的时候issue("front");break;case WheelView.CLICK_BOTTOM_UP://下面按钮按下抬起的时候break;case WheelView.CLICK_LEFT_UP://左边按钮按下抬起的时候break;case WheelView.CLICK_RIGHT_UP://右边按钮按下抬起的时候break;case WheelView.CLICK_TOP_UP://上面按钮按下抬起的时候break;}}public void bn_onClick(View view) {if(et_cid.length()==0){return ;}if( view.getId()==R.id.bt_shoot){if(bn_shoot.getText().toString().equals("开启视频")){bn_shoot.setText("关闭视频");issue("open_shoot");}else if(bn_shoot.getText().toString().equals("关闭视频")){bn_shoot.setText("开启视频");issue("close_shoot");}}else if(view.getId()==R.id.bt_drive){if(bn_drive.getText().toString().equals("自动驾驶")){bn_drive.setText("关闭自动驾驶");issue("open_drive");}else if(bn_drive.getText().toString().equals("关闭自动驾驶")){bn_drive.setText("自动驾驶");issue("close_drive");}}else if(view.getId()==R.id.bt_photo){issue("photo");}else if(view.getId()==R.id.bt_sensor){if(bn_sensor.getText().toString().equals("开启传感器")){bn_sensor.setText("关闭传感器");issue("open_sensor");}else if(bn_sensor.getText().toString().equals("关闭传感器")){bn_sensor.setText("开启传感器");issue("close_sensor");}}}//按下就触发@Overridepublic boolean onDown(MotionEvent e){//flushData();return false;}//短按触摸屏@Overridepublic void onShowPress(MotionEvent e) {}//点击屏幕后抬起时触发该事件@Overridepublic boolean onSingleTapUp(MotionEvent e) {return false;}//在屏幕上拖动控件@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {return false;}//长按触摸屏@Overridepublic void onLongPress(MotionEvent e) { }//滑屏,用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个        //ACTION_UP触发;参数分别表示:按下事件、抬起事件、x方向移动速度、y方向移动速度。   @Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {final int FLING_MIN_DISTANCE = 100;if (Math.abs((int) (e1.getX() - e2.getX())) > FLING_MIN_DISTANCE && velocityX > FLING_MIN_VELOCITY) {//右滑跳到控制界面startActivity(new Intent(controlActivity.this, rememberActivity.class));finish();}else if(Math.abs((int) (e1.getX() - e2.getX())) > FLING_MIN_DISTANCE && velocityX < -FLING_MIN_VELOCITY){//左滑跳到记录界面startActivity(new Intent(controlActivity.this, DisplayActivity.class));finish();}return false;}//实现OnTouchListener接口中的方法@Overridepublic boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);}private String readFile(String path) {MainActivity.verifyStoragePermissions(this);File file = new File(path);//如果path是传递过来的参数,可以做一个非目录的判断if (file.isDirectory()) {// Log.d("TestFile", "The File doesn't not exist.1");}else {try {InputStream instream = new FileInputStream(file);if (instream != null) {InputStreamReader inputreader = new InputStreamReader(instream);BufferedReader buffreader = new BufferedReader(inputreader);String line=buffreader.readLine();instream.close();return line;}} catch (java.io.FileNotFoundException e) {//Log.d("TestFile", "The File doesn't not exist.2");} catch (IOException e) {//Log.d("TestFile", e.getMessage());}}return "";}public  void writeFile(String path,String str){/** 首先安卓下写文件要到sd卡位置是/mnt/sdcard/* 还要注册权限,在AndroidManifest.xml中*/MainActivity.verifyStoragePermissions(this);try {File file=new File(path);FileOutputStream outStream = new FileOutputStream(file);outStream.write(str.getBytes());outStream.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}void issue(String order){if(order.length()==0)return ;String cid=et_cid.getText().toString();FinalHttp fh=new FinalHttp();String url = MainActivity.selfip+"car/addMyremember.php";AjaxParams params = new AjaxParams();params.put("op_time", "now()");params.put("car_id",cid);params.put("user_name", readFile("/mnt/sdcard/stateName.txt"));params.put("operate_name", order);params.put("__key", "op_time,car_id,user_name,operate_name");fh.post(url, params,new AjaxCallBack<String>(){@Overridepublic void onStart() {super.onStart();}@Overridepublic void onLoading(long count, long current) {super.onLoading(count, current);}@Overridepublic void onSuccess(String t) {// TODO Auto-generated method stubsuper.onSuccess(t);}@Overridepublic void onFailure(Throwable t, int errorNo, String strMsg) {// TODO Auto-generated method stubsuper.onFailure(t, errorNo, strMsg);tu("网络异常");}});}public void tu(String s){Toast.makeText(this, s, Toast.LENGTH_SHORT).show();Looper.loop();}
}
















自动化小车数据客户端的研究与开发相关推荐

  1. osg加载osgb数据_铁路工程三维协同大数据云平台研究与开发

    铁路工程三维协同大数据云平台是基于3DGIS空间信息平台.BIM云平台.GIM云平台.在线监测云平台及增强现实云平台的多平台融合技术 现代铁路工程建设更加注重BIM.物联网等新技术,构建全生命周期一体 ...

  2. 配电网WebGIS研究与开发[5]

    配电网WebGIS研究与开发[5] 作者:一点一滴的Beer http://beer.cnblogs.com/  第4章 发布配电网WebGIS 4.1 准备好发布的数据  1.网页的编译文件 用VS ...

  3. 水环境模型与大数据技术融合研究

    点击上方蓝字关注我们 水环境模型与大数据技术融合研究 马金锋1, 饶凯锋1, 李若男1,2, 张京1, 郑华1,2 1 中国科学院生态环境研究中心城市与区域生态国家重点实验室,北京 100085 2  ...

  4. 基于区块链技术的数据资产管理机制研究

    点击上方蓝字关注我们 基于区块链技术的数据资产管理机制研究 赵明1, 董大治2 1 海军装备部,北京 100841 2 中国人民解放军91001部队,北京 100841 摘要:使用区块链技术可以保证数 ...

  5. 数据资产标准研究进展与建议

    点击上方蓝字关注我们 数据资产标准研究进展与建议 戴炳荣, 闭珊珊, 杨琳, 纪婷婷, 陈美 上海计算机软件技术开发中心,上海 201112 论文引用格式: 戴炳荣, 闭珊珊, 杨琳, 纪婷婷, 陈美 ...

  6. 哈工大大数据实验_【新闻动态】南京大学PASA大数据实验室在KDD Cup 2020 AutoGraph自动化图数据建模国际挑战赛中荣获第二名...

    近期,在素有"数据世界杯"之称的KDD Cup 2020数据挖掘国际大赛AutoML自动化机器学习赛道(AutoGraph自动化图数据建模)中,南京大学PASA大数据实验室代表队P ...

  7. 基于区块链的大数据交易模式研究与探索

    点击上方蓝字关注我们 基于区块链的大数据交易模式研究与探索 李源1, 高宁1, 孙晶1,2, 赵会群1 1 北方工业大学信息学院,北京 100144 2 北方工业大学大规模流数据集成与分析技术北京市重 ...

  8. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  9. Python刷投票自动化【刷微信投票】脚本开发,源代码分析

    Python刷投票自动化[刷微信投票]脚本开发,源代码分析 前言 现在部分比赛为了推广赞助商或者比赛本身,需要参赛队伍进行网上拉票,甚至票数还会占一定比例的成绩.因此,刷票也就应运而生了.此次我们团队 ...

最新文章

  1. 详解C#委托,事件与回调函数
  2. 谷歌退出后百度首发财报 李彦宏称获益不少(转)
  3. matlab 不单调 插值,三组无关数据进行MATLAB画三维图不采用插值的方法该怎么办...
  4. AWS vs K8s 是新的 Windows vs Linux
  5. 微软收购Citus Data | 再次肯定对开源的承诺,并加速了Azure PostgreSQL的性能和扩展...
  6. oracle导出dmp空表导不出来,如何解决Oracle11g使用dmp命令无法导出空表问题
  7. mysql root_mysql root 没有任何权限
  8. java 删除列 csv,Java- CSV / Delete column in csv file
  9. HADOOP基本操作命令,及其组件端口
  10. usb网卡android驱动+win7,USB无线网卡万能驱动下载
  11. 信号与系统实验五 信号的傅里叶分析与频谱
  12. vbm 分析_vbm分析 | Forum of resting-state fMRI
  13. 2015中国大学排行榜100强新鲜出炉(校友会版)-[转]
  14. 洛谷 P1330 封锁阳光大学(BFS染色)
  15. 网店营销忌讳效应:要知道别人不喜欢什么
  16. 在JavaScript中使用Octet Streams
  17. 激战2怎么选最新的服务器,选哪个服好?《激战2》高玩分析各服务器进驻人数...
  18. C/C++基础题029.DDD
  19. Navicat常用快捷键汇总
  20. DPDK Rx flexible descriptor 在Intel E810 网卡中的使用

热门文章

  1. 如何同步几个笔记本,OneNote、印象笔记、网易云笔记
  2. opencv-python学习笔记(十):实现人脸特征转换
  3. 手机中怎么切换CAD图纸的布局空间
  4. 提供一个用于计算两个point之间的距离方法_Houdini Terrian amp; UE4 (七)如何愉快的当一个农民...
  5. PublicCMS开源CMS系统的部署与安全测试
  6. python翻页_如何用python tkiner实现图片翻页功能
  7. local class incompatible: stream classdesc serialVersionUID = 1502241954359378124, local class seria
  8. 计算机技术属于全日制工程硕士吗,计算机技术领域全日制工程硕士专业学位研究生培养方案试行为.PDF...
  9. Git clone 报错:403 完美解决方案
  10. 复制SD卡上的文件以及一些其他操作