物联网系统开发实训—软件部分

课程设计需要开发一个物联网系统

记录一下开发的过程以及遇到的部分问题

本篇可能涉及到知识

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/下面。然后就不会报错了

参考博客:https://blog.csdn.net/qq_21208843/article/details/91653615

然后是数据可视化方面:

用的百度的ECharts

具体的知识参考:https://www.cnblogs.com/huqinhan/p/5776451.html

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秒     精确到时分秒

参考博客:https://blog.csdn.net/weixin_42412821/article/details/87184505

指令大全:https://www.cnblogs.com/bluealine/p/7832219.html

插入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. 即可

详细安装教程:

https://blog.csdn.net/qq_18495939/article/details/79650383

云平台要开放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

posted @ 2019-12-23 19:58  zzRh_5479  阅读(281)  评论(0编辑  收藏  举报