一、设计思路
随着物联网技术的发展,智慧农业它将成为现代农业 发展趋势。物联网,Android、计算机网络技术 术、ZigBee农业等技术的应用可以促进农业信息化发展,改进生产管理模式,提高生产效率,促进农业发展。
数字农业控制系统允许用户选择自动控制或手动控制,实现作物状态的实时观察,无需浪费大量的人力物力进行特殊检查和记录。不同作物的温度、湿度、光照和土壤湿度范围也可以手动设置。一旦超过或低于作物生长所需的条件范围,系统将进行报警。


二、软件主要技术分析
1.1移动终端
该项目的移动终端是智能手机或PDA移动终端可以通过它运行APP,并与服务器连接,以控制和检查作物的生长。APP功能如下:
①用户可以使用手机APP,登录自己的账号和密码。
②登录后,用户可以随时随地查看作物的环境信息和动态变化折线图。
③某些作物的环境信息范围可根据需要独立设置。
④自动控制或手动控制可根据需要选择控制模式。
⑤如果用户选择自动控制模式,当作物的环境信息超出设定范围时,硬件将根据服务器的数据自动进行 打开抽水机、灯光等操作。
⑥如果选择手动控制模式,用户可以根据不同的环境、开关照明、继电器等设置照明亮度。
⑦手动控制时,当作物的环境因素超出设定范围时,手机会报警,提示用户在收到报警信息后进行相应的报警。
1.2服务器
服务器是硬件和应用程序的中介,手机应用程序 APP通过TCP/IP协议与服务器连接后,用户通过APP 将作物生长环境信息上传到服务器并保存数据;硬件也是 通过上位机程序和服务器Socket连接,服务 服务器还通过传输硬件收集的各种环境信息 Socket将控制命令连接到硬件等。服务器作为一个 介来操作,一方通过端口 8080和TCP/IP协议和移动终端 端APP另一方通过端口通信 2077和Socket连接与 上位机通信程序。
服务器功能如下:
①根据发送的Tag判断用户想要的操作,并将所需的数据返回给用户。
②根据自定义,实时接收上位机程序发送的数据通信协议分析处理。
③服务器获取数据后,将其保存在服务器的特定数据库中。
④服务器将数据返回到上位机,并从数据库中查询到一定格式的数据。
1.3上位机
上位机是硬件和服务器之间的中介,硬件不是直接的 通过WiFi模块通过上位机程将数据发送给服务器 序作中间接口发送;当然,硬件也可以通过Wifi 模块向服务器发送数据,但通过上位功能更好地反映了这一点 实现目标的过程。上位机是一个Java Project,它的功能就 是读取开发板通过串口通过Socket连 将收到的数据发送给服务器,然后将服务器返回的控制 命令发送给硬件,以便硬件能够根据信息做出反应。任命上位机 服务是收集/发送串口数据和发送/收集服务器数据。
上位机通过串口与协调器连接Socket与服务器连接,通过串口接收数据,然后通过 Socket然后转发给服务器。
上位机的主要功能如下:
①硬件发送的环境信息通过串口接收。
②接收的环境信息通过Socket连接发送给服 务器。
③将服务器返回的控制数据转发给串口。
三、智能农业软件设计与实现
1.1设计流程
该系统使用手机APP控制方法。APP设计的核心功能包括设置阈值、查看数据、模式控制和报警处理。 APP如图1所示。

图1
1.2 APP开发
1.2.1界面布局设计
APP登录注册页面采用本地记忆密码功能。当用户选择记住密码时,他们可以在移动设备上再次登录,而无需继续输入用户名和密码,这具有很强的实用性。在页面上,使用相同的数据库交互技术,当用户名和密码存在并正确时,用户可以进行下一步,否则不能。
用户进入系统的主要功能列表,页面使用 list技术,排列所有主要功能,让用户更方便直观地使用它APP。页面上的每个记录对应于另一个不同的页面。
1.2.服务器设计流程
(1)建立服务器和数据库
数据的保存和使用取决于数据库.设计数 据库使用MySQL建立了一种技术user内部建立了用户 四张表,一个是用户名和密码表,一个是用户设置的环境数据,一个是照明控制,一个是硬件实时传输的当前数据。
服务器运用JAVA EE软件建立的Dynamic Web Project编写代码。一方面,通过服务器模块Tag与用户识别APP另一方面,通过端进行信息交互Socket与硬件进行信息交互。
手机APP通信时,服务器通过Thg当服务器识别到某户需求时,识别用户需求lag在识别时,数据库将根据需要进行操作。因此,服务器必须考虑用户的要求,并根据需要执行某些操作。因此,服务器必须与数据库连接,否则即使用户发送 lag对服务器进行标识,服务器也收到了要求,仍然无法操作数据库,用户的要求无法实现。
在与硬件通信时,首先要建立服务器Socket连接并设置端口号,使硬件能够通过端口号识别服务器。服务器与硬件建立连接后,开始T工作。服务器读取开发板发送的信息数据后,根据事先定义开始分析和处理数据通信协议分析数据,拆分,然后将拆分后的数据保存在以前的数据库中;用户可以在查看数据时获得最新记录。服务器完成这些工作后,将返回一些数据给硬件执行器。同样,服务器也将发送的数据处理成硬件可识别的信息,并返回到硬件执行器。
(2)服务器和MySQL连接并建立相应的数据
部分代码如下:
try (
〃获取数据库连接
conn = DBUtils. getConnectionO ;
////具体参数赋值
ptst. setString( 1, mer. getMer_userName());
ptst. setString(2, mer. getMer_Password());
ptst. setString(3, mer. getMer_Tell());
〃执行查询操作,返回查询结果(结果对象)
ResultSet rs = ptst. executeQuery();
〃判断结果集是否有数据,如果有,则返回true
return rs. nextO ;
catch (SQLException e) {
e. printStackTrace();
} finally {〃关闭连接
DBUtils. free(conn, null, null) ;}
(3)与APP交互
服务器与APP通信,通过Servlet实现。主要是APP
向服务器发送读取数据请求,而不是主动向服务器发送数据
给APP。这样可以降低服务器的压力,使系统更加实用。
(4)与上位机交互
硬件系统发送的数据流为字节,识别不方便。
如果你想把它变成易读数据,你需要使用它字符串截取技术解决
通过数组分别分析和保存。
开发者定制了硬件系统发送的数据流。
在需求阶段,需要确定每个人代表什么。
通信服务器和上位机时,分析数据要方便得多。
public void run() {
byte[] buf = new byte[128];
while (true) {
try (
if(client. isClosedO) {
return;
)
else{
if ( ! client. isInputShutdown()) {
〃读取开发板发出的字节流
int len = dis. read(bu£);
String dataFromHard = new String(buf);
System, out. println( " = = = " dataFromHard);
〃打印
i£(len > 0) {
String receiveData—new String(buf, 0, len). trimO ;
String]] splitData — SplitDataFromReceive. splitReceive(receive-
Data,8);
Boolean result = hardDaoImpl. addData2DB( splitData);
boolean flag= client. isOutputShutdown();
if < ! flag) {
hardDaoImpl. findAllcaiData(dos);
try {
Thread. sleep(lOO);
} catch (InterruptedException e) {
e. printStackTrace (); catch (lOException e)
e. printStackTraceO ;
)
finally {
try {
if (dis ! =null)
dis. close();
if (dos ! =null)
dos. close();
}
catch (lOException e) {
e. printStackTrace();
}})}
2.2.3上位机设计
(1)建立基本框架
通过上位机实现服务器与硬件的连接。
位机,本质是一段JAVA程序代码的主要功能是读取硬件
传输的数据发送给服务器,同时发送给硬服务器
将零件的控制命令传递给硬件系统进行相应的操作。
(2)自定义数据格式
public String Bytes2HexString(byte[] b) {
〃将byte数组转换为16进制数组
String ret ="";
for(int i=0;iVb. length;i ) (
String hex= Integer. toHexString(b[i]&Oxff);
if (hex. lengthO = — 1) (
hex = 'O' hex;
)
ret = hex. toUpperCase();
}
return ret;
)
(3)通过串口与硬件系统交互
通过串口实现硬件与上位机的连接,用户判断以下代码
断串口 COM4是否可用,如果可用,始终阅读硬件系统
是否有传输数据。
while (portList. hasMoreElementsO ) {
portld= (CommPortldentifier) portList. nextElement();
if(portld. getPortType( ) — — CommPortldentifier.
AL)(
if(portld. getNameO. equals("COM4")) {
try{
serialPort= (SerialPort) portld. open("Main" , 2000);
}
catch ( PortlnUseException e) {}
try{
inputStream = serialPort. getlnputStreamC);
(4)通过Socket与服务器交互
通过上位机和服务器Socket协议通信,上位机和服务器相互建立IP接口相同Socket, 一直对该 查询接口,检查是否有数据传输。
今天的文章就分享到这里,如果你也网赚副业项目感兴趣,可以添加 维信:beng6655 备注:副业!
如若转载,请注明出处:https://www.haoxue2.com/16849.html