APP下载

采用树莓派的“Java程序设计”课程实训设计
——以物联网专业为例

2022-08-23杨韵芳

黎明职业大学学报 2022年1期
关键词:Java程序设计服务器端树莓

杨韵芳

(黎明职业大学 信息与电子工程学院,福建 泉州 362000)

针对Java程序设计本身而言,Java是一门面向对象的程序设计课程,课程本身涉及面广,知识点偏难[1]。在该课程的教学实施过程中,学生需要具有良好的逻辑思维能力和动手操作能力,并进行大量的实践上机操作才能真正掌握知识点。“Java程序设计实训”作为“Java程序设计”课程的一个延伸,旨在提高学生对面向对象程序设计思想的理解及Java语言的实际应用能力。为了更好体现物联网专业的专业特点,本实训系统围绕“模拟智能农场”来展开,实训系统主要为未学习数据库知识的大一学生设计,学生通过HTTP协议访问Web服务器端提供的数据接口,以JSON数据格式与服务器端进行数据交互,在此基础上完成系统开发,无须考虑数据存储的问题。通过这个实训也使刚刚接触物联网的学生对物联网有个直观的认识。

1 程序设计类课程实训的现状分析

现有程序设计类课程实训主要以设计型实例为主,综合型实例较少,实训内容往往忽略与专业内其它课程之间的衔接和联系,未能体现专业课程建设群的融合,不利于学生利用所学知识解决实际问题综合能力的培养。主要存在以下几个问题:

(1)高低年级学生之间彼此的学习过程割裂,缺乏实验经验传承,学生缺乏实际的项目锻炼,且学习过程只依赖有限的实验课内时间,使得实验实训效果大打折扣,影响学生的学习兴趣和信心[2]。

(2)程序设计类的实训选题过于单调,内容不新颖,多数是基于数据库存取操作的程序设计,学生容易从网络下载源码进行修改,应付了事。

(3)缺少合适的实训教学资源,任课教师对知识点以及知识点之间的关联性没有更详细的讲解,现有的实训教学资源难以与教学进度、教学知识点完全融合,导致学生在实训中难以更好地运用这些知识点。

2 “Java程序设计”课程实训的设计

2.1 实训课程概述

实训对象为物联网专业大一新生,学生采用Java语言开发出自己的第一个管理系统 “模拟智能农场”。实训要求学生开发的系统可以实现申请一个自己的农场,并在农场中创建多个大棚种植不同的庄稼,通过各种传感器获取大棚的温湿度、光照等数据,进一步控制大棚照明系统。要求学生利用Java语言开发完成客户端系统,实现农场的申请,农场信息修改,添加大棚,修改大棚信息,删除大棚,获取大棚温湿度及光敏值,控制大棚照明设备及摄像头等功能。最终,通过这个实训使刚刚接触物联网的学生对物联网有个直观的认识,对系统开发有大致的了解。

2.2 实训的总体设计

该实训设计由服务器、学生端两大部分组成,系统架构如图1所示。服务器端由嵌入式系统树莓派充当,树莓派接入各类传感器发布并启动“智能农场”实例,服务器端为学生端提供了访问接口,接收来自学生开发的客户端发送过来的指令,完成对数据库的增、删、改、查操作,并返回相应的采集信息到客户端,该部分功能由教师完成,它是该实训的基础。客户端的“智能农场管理系统”的开发是该实训的任务,由学生独立完成,学生采用WinBuilder来实现个性化GUI系统界面的设计,并通过GUI界面获取用户指令及数据,同时完成数据的封装,最后通过http请求将JSON数据发送给服务器指定接口,进而实现系统相应功能。

图1 智能农场管理系统架构图

2.3 实训硬件设备

2.3.1 树莓派

树莓派(Raspberry Pi)是一款以SD卡为存储媒体并基于ARM设计的微型电脑主板,可连接多个输入与输出设备,具备良好的硬件扩展性;同时树莓派操作系统Raspbian自带Java编程环境,易于完成软件的扩展。该实训系统采用树莓派充当服务器,连接温湿度传感器、摄像头等硬件设备,采用SSM框架,结合Mysql数据库实现服务器端软件部分的开发。

2.3.2 相关的传感器及连接

(1)DHT11温湿度模块。含有已校准数字信号输出的温湿度复合传感器。

(2)KY-018光敏电阻。灵敏度高,响应速度快,光谱特性及r值一致性好。

(3)C922 PRO摄像头。动态背景去除,具有强大的音频和视频质量。

(4)LED交通信号灯模块。

系统硬件层采用树莓派与以上硬件的连接实现数据与指令的通信,软件层实现实时获取并返回温湿度数据、光敏数据、摄像头数据等,并实现交通信号灯的切换控制,模拟控制大棚的光照。各传感器与树莓派的连接如图2所示。

图2 各传感器与树莓派引脚接线图

2.3.3 工作站及开发环境

工作站由一台接入网络的个人计算机充当,要求安装JDK1.8的Java开发环境,WinBuilder插件实现图形用户界面的开发,Chrome浏览器及Postman插件完成服务器接口的测试。学生端要求学生采用“类MVC”来进行开发,主要分为Model层、View层、Controller层。Model层主要定义与数据库进行数据交换的数据模型,View层主要定义GUI系统界面,Controller层主要负责封装用户数据,并完成与接口的交互。

2.4 实训服务端的设置

2.4.1 数据库设计

本实训系统所使用的数据库采用MySQL数据库系统进行开发。MySQL数据库是以“C/S”架构实现的,支持多线程、多用户,使用简单,管理方便,使用的持久化框架是MyBatis[3]。实训系统数据主要由两部分组成,一部分数据为学生创建的农场及大棚的信息,另一部分为各个大棚的传感器采集的数据。

表1 农场信息表

表2 大棚信息表

表3 传感器数据采集表

2.4.2 服务接口设计

服务器端采用SSM框架实现。服务器端的Controller层定义了实现各种功能的接口,客户端按照接口要求将请求参数发送给Controller层,Controller层调用相应接口对获取参数进行处理后传递给Service层,Service层通过Mapper.xml对数据库进行操作并实现相应的功能,并以JSON格式将请求数据返回客户端。

表4 接口规则

Controller层部分代码:

@RequestMapping(value="/rest/environment/shed_id",method= RequestMethod.POST)

@ResponseBody

public List〈Environment〉EnvironmentByShed_id(@RequestBodyEnvironmentenv) {

System.out.println("查询某农舍号的环境信息");

List〈Environment〉 list = EnvironmentService.EnvironmentByShed_id(env);

System.out.println("农场号查询农场信息:"+list);

if (list.size() <= 0) {

Environmenten = newEnvironment();

en.setShed_id("没有查询到" + env.getShed_id() + "的任何环境信息" );

list.add(en);

}

return list;

}

Service层部分代码:

importagri.dao.EnvironmentDao;

importagri.pojo.Environment;

importagri.service.EnvironmentService;

public class EnvironmentServiceImpl implements EnvironmentService {

@Autowired

EnvironmentDaoEnvironmentDao;

@Override

public List〈Environment〉EnvironmentByShed_id(Environmentenv) {

returnEnvironmentDao.EnvironmentByShed_id(env);

}

}

DAO层部分代码:

public class Environment {

int id;

String shed_id;

double temperature;

double humidity;

double illumination;

Date collecttime;

……

@Override

public String toString() {

return "Environment [id=" + id + ", shed_id=" + shed_id + ", temperature=" + temperature + ", humidity=" + humidity+ ", illumination=" + illumination + ", collecttime=" + collecttime + "]";

}}

服务端为了从树莓派GPIO口获取参数及发送通信指令,工程需要引入pi4j依赖库,该库是专门用来控制树莓派GPIO口以及通信的Java库。这里提供与GPIO口通信并控制LED光模块的方法,模拟大棚的光照控制,其他模块的通信可参考以下代码。

MAVE代码:

〈dependency〉

〈groupId〉com.pi4j〈/groupId〉

〈artifactId〉pi4j-core〈/artifactId〉

〈version〉1.1-SNAPSHOT〈/version〉

〈/dependency〉

通信代码如下:

import com.pi4j.io.gpio.GpioController;

import com.pi4j.io.gpio.GpioFactory;

import com.pi4j.io.gpio.PinPullResistance;

import com.pi4j.io.gpio.GpioPinDigitalOutput;

import com.pi4j.io.gpio.GpioPinDigitalInput;

import com.pi4j.io.gpio.PinState;

import com.pi4j.io.gpio.RaspiPin;

public class GpioControl {

public static void main(String[] args) throws InterruptedException {

// GPIO控制器的创建

finalGpioControllergpio = GpioFactory.getInstance();

// 获取并设置树莓派上的36号针脚(GPIO.27)的电平状态

finalGpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_27, "LED", PinState.HIGH);

while(true){

//设置针脚状态为高电平,即开启光照

pin.high();

System.out.println("开灯");

Thread.sleep(500);

//设置针脚状态为低电平,即光闭光照

pin.low();

System.out.println("关灯");

Thread.sleep(500);

}

}

}

2.5 客户端功能模块要求

2.5.1 身份验证

学生端通过学号向服务器端申请注册用户,服务器端将为每一个学生端分配唯一的UUID,并将此UUID存于数据库的user表;学生端收到UUID后,以文本的形式保存于本地。当用户登录系统时,必须读取本机的UUID连同用户登录信息发送至服务器,只有当UUID、用户名、密码均与数据库匹配时,方可登录系统。

2.5.2 数据交换

学生端与服务器端采用HTTP通信,数据采用可读性强、解析简易的JSON格式进行交互。补充介绍JSON,学生端将请求参数封装成model层定义好的Java对象,调用Gson的toJson()的方法,将Java对象转为JSON格式数据,发送给服务器相应接口。而服务器端仍然将学生端请求的数据以JSON的格式返回给学生端,学生端则调用Gson的fromJson()的方法,将JSON格式数据转为Java对象,最终将数据传给相关的窗体并按设计要求呈现出来。

3 课程实训效果与分析

实训系统由多套树莓派服务器连接传感器构成,具有部署简单、可扩展性高等特点,在服务器上发布并启动好“智能农场”实例后,实训系统搭建成功。当服务器启动后,硬件设备及软件资源均为学生开放,服务器随时等待学生端的连接请求。本实训系统经过两轮测试,硬件系统部署简单快捷,服务端实例支持200位学生同时在线使用,交互顺畅。由于树莓派及各类传感器价格低廉,兼容性高,因此本实训系统具有很好的可扩展性;同时由于系统只进行简单数据的交互,没有提供大量数据的下载,因此大大降低了网络及数据库的压力,也为系统支持高并发性奠定了很好的基础。

在短短一周的实训中,学生基本可以独立完成“智能农场管理系统”的开发,并对系统代码进行多项优化,提高了代码的重用性,从而提高了管理系统的性能。在实训平台的支持下,学生能快速提高物联网行业相关实践能力,感受到物联网的魅力,对物联网应用开发产生浓厚的兴趣[4]。为了让自己的系统更加完美,部分学生还上网自学,个别引用了jfreechart-1.0.12.jar及jcommon-1.0.15.jar,更多样化地展示了传感器采集的实时数据;有的还引用了javacsv.jar,实现将系统数据导出并保存为csv文件。

4 结束语

本文介绍了“Java程序设计”课程实训设计目的与意义,并基于树莓派和Java语言设计了一个“模拟智能农场”温湿度远程实时测量服务端[5],采用的是HTTP协议的通信数据交互方式,接收与返回学生设计的客户端传递参数,实现实时返回温湿度参数,并接收客户端发送光照的指令。该实训课程经过了多个班级的实训,整体实训效果好,学生软件开发技术获得了较为系统的提高。

猜你喜欢

Java程序设计服务器端树莓
基于Qt的安全即时通讯软件服务器端设计
黄金水果红树莓
树莓红了 游人醉了
基于Qt的网络聊天软件服务器端设计
《Java程序设计》课程网站的设计与实现
Java程序设计基础课实践教学中的分层教学模式研究
基于实训项目的Java程序设计实验教学模式改革与实践
基于工程思维的Java程序设计课程教学研究
e络盟率先推出第三代树莓派
年度睡姿大盘点(下)