欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

笔记本ubuntu系统Java开发串口程序

程序员文章站 2022-05-21 19:59:54
...
笔记本ubuntu系统Java开发串口程序
一、 开发环境配置
由于笔记本没有串口,并且在ubuntu下没有虚拟串口软件(我没有找到~~~),所以需要用虚拟机安装ubuntu系统,我用的是VM ware 7.0,系统是ubuntu 11.04,当然宿主系统是XP SP3。
以下开发环境配置步骤:
1、 在XP下安装VSPD XP 5.1,增加一对串口COM1和COM2
2、 在XP下运行串口调试助手UartAssist,测试串口是否能够正常使用
3、 在XP下安装虚拟机VM ware 7.0,在虚拟机下安装ubuntu11.04,安装完成后关闭系统,点击“编辑虚拟机设置”,在接下来的步骤中点击“添加”,选择“串口”,选择“物理端口”,选择“COM1”,添加完成,确定
4、 如果第2步中串口调试助手正在连接COM1,断开COM1的连接,(如果不断开,虚拟机无法使用COM1),在XP下用UartAssist连接上COM2,波特率9600,8,1
5、 启动虚拟机,进入ubuntu系统(当然,首先要安装VM tools和eclipse),在Ubuntu软件中心中搜索串口测试软件CuteCom,并安装,在“应用程序”-“其他”中选择“CuteCom”,运行,Open串口“ttyS0”(这就是XP系统中的COM1,只不过两个系统中的名字不一样),设置波特率9600,8,1,打开串口
6、 在CuteCom中输入aaaaa,回车发送
7、 回到XP中,如果UartAssist正在监听COM2,那么会在UartAssist中接收到aaaaa
二、 编写程序测试
我使用的是rxtx包,需要在eclipse中进行相关配置
1、 创建一个工程,在工程中创建一个lib的文件夹,把RXTXcomm.jar和librxtxSerial.so、librxtxParallel.so复制到lib文件夹中
2、 右键点击工程,选择 properties –> build path ->Library , 将这三个文件add Jars  ,点击RXTXcomm.jar左边的下三角,选择Native library location ,把它的目录设置为项目中lib的目录(这一步如果不能设置好,会出现错误:java.lang.UnsatisfiedLinkError: /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/i386/client/librxtxSerial.so: /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/i386/client/librxtxSerial.so: cannot open shared object file: Permission denied thrown while loading)
3、 创建一个类,这里我给出一个例子(对别人的适当修改)
package com.test; 

import gnu.io.CommPort; 
import gnu.io.CommPortIdentifier; 
import gnu.io.NoSuchPortException; 
import gnu.io.PortInUseException; 
import gnu.io.SerialPort; 
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import gnu.io.UnsupportedCommOperationException; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.Enumeration; 
import java.util.TooManyListenersException; 



public class SimpleRead2 implements SerialPortEventListener { //SerialPortEventListener 监听器,我的理解是独立开辟一个线程监听串口数据 
static CommPortIdentifier portId; //串口通信管理类 

static Enumeration portList;   //已经连接上的端口的枚举 

InputStream inputStream; //从串口来的输入流 

OutputStream outputStream;//向串口输出的流 

SerialPort serialPort;     //串口的引用 


public SimpleRead2() { 
try { 
portId = CommPortIdentifier.getPortIdentifier("/dev/ttyS0"); 
} catch (NoSuchPortException e1) { 
//没有这个串口 
e1.printStackTrace(); 
} 
   try { 
   serialPort = (SerialPort) portId.open("myapp", 2000);//打开串口名字为myapp,延迟为2毫秒 
   } catch (PortInUseException e) { 
   //串口正在使用 
   } 
   try { 
    inputStream = serialPort.getInputStream(); 
    outputStream = serialPort.getOutputStream(); 
   } catch (IOException e) { 
   } 
   
   try { 
   serialPort.addEventListener(this);      //给当前串口天加一个监听器 
   } catch (TooManyListenersException e) { 
   } 
   
   serialPort.notifyOnDataAvailable(true); //当有数据时通知 
   
   try { 
   serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8,   //设置串口读写参数 
       SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); 
   } catch (UnsupportedCommOperationException e) { 
   } 
} 
public void serialEvent(SerialPortEvent event) {//SerialPortEventListener 的方法,监听的时候会不断执行 
   switch (event.getEventType()) { 
   case SerialPortEvent.BI: 
   case SerialPortEvent.OE: 
   case SerialPortEvent.FE: 
   case SerialPortEvent.PE: 
   case SerialPortEvent.CD: 
   case SerialPortEvent.CTS: 
   case SerialPortEvent.DSR: 
   case SerialPortEvent.RI: 
   case SerialPortEvent.OUTPUT_BUFFER_EMPTY: 
    break; 
   case SerialPortEvent.DATA_AVAILABLE://当有可用数据时读取数据,并且给串口返回数据 
    byte[] readBuffer = new byte[1000]; 

    try { 
    while (inputStream.available() > 0) { 
    int numBytes = inputStream.read(readBuffer); 
    } 
    System.out.println(new String(readBuffer)); 
    char[] a= {0x16,0x16,0x20,0x10,0x69,0x0,0x03,0x20,0x01,0x22}; 
    byte[] b = new String(a).getBytes(); 
outputStream.write(b); 
    } catch (IOException e) { } 
    break; 
   } 
} 

public static void main(String[] args) { 
SimpleRead2 reader = new SimpleRead2(); //实例一个 
} 
} 


运行此程序,在XP中UartAssist输入任意数据并发送就能在程序中看到结果了
4、 如果想在Ubuntu中用程序测试串口的输入输出,则需要在虚拟机中添加两个串口COM1和COM2,并且必须保证打开虚拟机之前,在XP系统中没有其他的程序(比如UartAssist)在使用这两个虚拟串口,否则会出错
5、 在Ubuntu中的eclipse中编写两个程序用来测试程序,需要在上个例子程序中分别打开ttyS0和ttyS1(分别对应XP中的COM1和COM2),两个程序调试串口的例子我会放在附件中

2011.6.15
相关标签: java