基于物联网的智能农业(连接串口,接收发送数据,连接数据库存储)

不解释了直接贴代码。

(连接的仿真软件,也可以直接连接现实的串口,改一下发送和接收的数据形式就好了)

直接套用会有问题,1、环境配置问题 2、包的问题 3、数据库连接的是我自己数据库

调试了很久,然后在课设和实训中都用到了,主要是要耐心的读程序明白每个模块的功能。个人写的时候也是调了很久的bug,也配置了很多参数。从下java加包,修改代码,采集数据,发送控制命令,连接数据库等。

一些实验中的图片:

 

参考博文

1、主程序

package serialPort;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import gnu.io.SerialPort;
import serialException.ExceptionWriter;

/**
 * 主程序
 * @author zhong
 *
 */
public class Client extends Frame{
  
    private static final long serialVersionUID = 1L;

    public static final int WIDTH = 800;
   
    public static final int HEIGHT = 620;//程序界面高度
    
    public static final int LOC_X = 200;//程序界面出现位置(横坐标)
    
    public static final int LOC_Y = 70;//程序界面出现位置(纵坐标)

    Color color = Color.WHITE; 
    Image offScreen = null;    //用于双缓冲
    
    //设置window的icon(这里我自定义了一下Windows窗口的icon图标,因为实在觉得哪个小咖啡图标不好看 = =)
    Toolkit toolKit = getToolkit();
    //Image icon = toolKit.getImage(Client.class.getResource("computer.png"));
    Image background = toolKit.getImage("timg.jpg");
    //持有其他类
    DataView dataview = new DataView(this);    //主界面类(显示监控数据主面板)

    /**
     * 主方法
     * @param args 
     *    //
     */
    public static void main(String[] args) {
        new Client().launchFrame();    
    }
    
    /**
     * 显示主界面
     */
    public void launchFrame() {
        this.setBounds(LOC_X, LOC_Y, WIDTH, HEIGHT);    //设定程序在桌面出现的位置
        this.setTitle("农业节能灌溉项目");    //设置程序标题
       // this.setIconImage(icon);
        this.setBackground(Color.white);    //设置背景色
        
        this.addWindowListener(new WindowAdapter() {
            //添加对窗口状态的监听
        	
            public void windowClosing(WindowEvent arg0) {
                //当窗口关闭时
                System.exit(0);    //退出程序
            }
            
        });

        this.addKeyListener(new KeyMonitor());    //添加键盘监听器
        this.setResizable(false);    //窗口大小不可更改
        this.setVisible(true);    //显示窗口
            
        new Thread(new RepaintThread()).start();    //开启重画线程
    }
    
    /**
     * 画出程序界面各组件元素
     */
    public void paint(Graphics g) {
    	
        Color c = g.getColor();
         
        g.drawImage(background, 0, 0, getWidth(), getHeight(), this);
        
        
        g.setFont(new Font("", Font.BOLD, 40));
        g.setColor(Color.black);
        g.drawString("欢迎来到农业节水灌溉监控系统", 40, 280);
        
        g.setFont(new Font("", Font.ITALIC, 26));
        g.setColor(Color.BLACK);
        g.drawString("Version:3.0          Author By:DeathY", 280, 340);
        
        g.setFont(new Font("", Font.BOLD, 30));
        g.setColor(color);
        g.drawString("————点击Enter键进入实时数据区————", 100, 480);
        
      
        //使文字 "————点击Enter键进入主界面————" 黑白闪烁
        if (color == Color.WHITE)    color = Color.black;
        else if (color == color.BLACK)    color = Color.white;
        
        
    }
    
    /**
     * 双缓冲方式重画界面各元素组件
     */
    public void update(Graphics g) {
        if (offScreen == null)    offScreen = this.createImage(WIDTH, HEIGHT);
        Graphics gOffScreen = offScreen.getGraphics();
        Color c = gOffScreen.getColor();
        gOffScreen.setColor(Color.white);
        gOffScreen.fillRect(0, 0, WIDTH, HEIGHT);    //重画背景画布
        this.paint(gOffScreen);    //重画界面元素
        gOffScreen.setColor(c);
        g.drawImage(offScreen, 0, 0, null);    //将新画好的画布“贴”在原画布上
    }
    
    /*
     * 内部类形式实现对键盘事件的监听
     */
    private class KeyMonitor extends KeyAdapter {

        public void keyReleased(KeyEvent e) {
            int keyCode = e.getKeyCode();
            if (keyCode == KeyEvent.VK_ENTER) {    //当监听到用户敲击键盘enter键后执行下面的操作
                setVisible(false);    //隐去欢迎界面
                dataview.setVisible(true);    //显示监测界面
                dataview.dataFrame();    //初始化监测界面
            }
        }
        
    }
    
    
    /*
     * 重画线程(每隔250毫秒重画一次)
     */
    private class RepaintThread implements Runnable {
        public void run() {
            while(true) {
            	//SerialTool.sendToPort(serialPort,"");//关闭排水管
                repaint();
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    //重画线程出错抛出异常时创建一个Dialog并显示异常详细信息
                    String err = ExceptionWriter.getErrorInfoFromException(e);
                    JOptionPane.showMessageDialog(null, err, "错误", JOptionPane.INFORMATION_MESSAGE);
                    System.exit(0);
                }
            }
        }
        
    }
    
}

2、数据显示以及处理

package serialPort;

import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Label;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;
import java.util.TooManyListenersException;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import USEFULL.Tran;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import serialException.*;

/**
 * 监测数据显示类
 */
public class DataView extends Frame {
	private static final long serialVersionUID = 1L;
	Client client = null;
	private List<String> commList = null; // 保存可用端口号
	private SerialPort serialPort = null; // 保存串口对象
	private controlJDQ JDQ;//
	private Smoke smo;
	private static Tran tran;
	private Font font = new Font("", Font.BOLD, 25);
	long startTime = System.currentTimeMillis(); 
	long endTime = System.currentTimeMillis(); 
	//private long last1=System。currentTimeMillis()
	
	private Label tem = new Label("暂无数据", Label.CENTER); // 温度
	private Label hum = new Label("暂无数据", Label.CENTER); // 湿度
	private Label pa = new Label("暂无数据", Label.CENTER); // 压强
	private Label moke = new Label("一切正常", Label.CENTER); // 雨量

	private Label Photo = new Label("暂无数据", Label.CENTER); // 风速
	private Label LED = new Label("暂无数据", Label.CENTER); // LED,显示

	// JLabel location = new JLabel("地名:");
	public TextField temup = new TextField("26℃");
	public TextField temdown = new TextField("21℃");
	public TextField humup = new TextField("60%");
	public TextField humdown = new TextField("40%");

	private Choice commChoice = new Choice(); // 串口选择(下拉框)
	private Choice bpsChoice = new Choice(); // 波特率选择

	private Button openSerialButton = new Button("打开串口");

	Image offScreen = null; // 重画时的画布

	// 设置window的icon
	Toolkit toolKit = getToolkit();
	// Image icon = toolKit.getImage(DataView.class.getResource("timg.jpg"));
	Image background = toolKit.getImage("1.jpg");

	/**
	 * 类的构造方法
	 * 
	 * @param client
	 */
	public DataView(Client client) {
		this.client = client;
		commList = SerialTool.findPort(); // 程序初始化时就扫描一次有效串口
	}

	/**
	 * 主菜单窗口显
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值