课程设计需要开发一个物联网系统
记录一下开发的过程以及遇到的部分问题
本篇可能涉及到知识
Android开发 Web开发 阿里云服务器的数据储存与访问。
初步计划
day1. 初步框架+环境搭建
day2. 云服务器的数据库设计以及javaweb
day3. android端访问云服务器的数据
day4. android端数据可视化 语音播报封闭测试
day5. 顺利的话 android搭载语音播报+收尾
加油!
Day1
各种环境的搭建
初步思路
硬件部分利用wifi模块将采集到的数据上传到服务器
关于如何将采集到的的数据放入数据库有两个思路
第一种是直接存取,具体需要百度
第二种是利用一个web程序将数据实时显示,并储存在数据库
放入数据库后
利用另一个web程序将数据放置到JSP页面中
android访问数据只需将JSP的数据利用JSON爬取下来
再做进一步的处理。
Day2
慢慢来
首先是本地的web界面的问题:
Cannot load JDBC driver class 'com.mysql.jdbc.Driver' 报错
可以把mysql-connector-java-5.0.3-bin.jar
这类的驱动文件放到Tomcat/lib/下面。然后就不会报错了
参考博客:
然后是数据可视化方面:
用的百度的ECharts
具体的知识参考:;
jackson所有版本的下载:
http://www.mvnrepository.com/search?q=jackson
假如要下载Jackson Databind,就点击进去,选择你想要的版本后,在信息栏中找到“Files”后面的“View All”并点击,即可下载Jackson Databind的jar包资源了。
MySQL方面:
data 与 datetime的区别
Date:代表xxxx年xx月xx日 只表示前面的日期
DateTime:代表xxxx年xx月xx日xx时xx分xx秒 精确到时分秒
参考博客:
指令大全:
插入DateTime数据:insert into xxx (bbb) values ('2009-9-9 23:22:11') 其中bbb为datetime型的.
云服务器的MySQL远程访问
1.8以上的使用 grant all privileges on *.* to root@'%' identified by "password 命令会报错
舍友给出的解决办法是将root权限设置为全部人可使用
然后为root设置密码
亲测有效
还有云服务器的端口要开放
Day 3
服务器资源的远程访问
首先云服务要开启Tomcat
Linux端Tomcat安装教程:
在安装包目录下解压缩 # tar -zxvf /software/apache-tomcat-9.0.6.tar.gz
在bin目录下运行 # ./startup.sh
出现 Tomcat started. 即可
详细安装教程:
云平台要开放8080端口
如果需要servlet在服务器上正常运行
需要将整个工程打包
然后将war文件放入云服务器tomcat目录下 webapps文件夹
重启tomcat 系统会自动解压war文件 然后就可以正常访问了
TCP/JSON访问服务器端口
服务器接收硬件采集到的的数据
只记录软件端
在服务器运行一个java或python程序 对端口实时监听
JAVA用到 ServerSocket 类
ServerSocket server = null;
try {
server = new ServerSocket(port);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("start");
Socket socket = null;
try {
socket = server.accept();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("connected");
Reader reader = null;
try {
reader = new InputStreamReader(socket.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("read");
char chars[] = new char[64];
int len = 0;
int k = 0;
ArrayList<SensorData> dataList = new ArrayList<>();
while (true) {
String s = new String();
try {
len = reader.read(chars);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 0; i < len; i++) {
s += chars[i];
}
System.out.println(s);
注意:在硬件访问的时候 必须要有监听程序在运行 不然无法产生连接
如果数据格式为JSON
还需对JSON进行解析
JSONObject result = new JSONObject(s);
SimpleDateFormat datetime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = datetime.format(new Date());
double temperature = result.getDouble("temperature");
double humidity = result.getDouble("humidity");
Day 4
主要解决访问的数据存入数据库问题
因为硬件请求的数据格式不确定
花费了大量时间对数据格式进行解析。
Linux强制杀死端口指令
sudo fuser -k -n tcp xx