物联网系统开发实训—软件部分
课程设计需要开发一个物联网系统
记录一下开发的过程以及遇到的部分问题
本篇可能涉及到知识
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!