java串口通讯

使用java进行串口通信确实不是串口通讯操作的主流方法,另外写好的的java程序无法随意的迁移。不过对熟悉java的同学确实挺有帮助,下面是我使用java语言进行串口通讯的过程。

  1 usb转串口安装。

  2 jar包的安装。

  3 java代码的实现。

  usb转串口的安装。

  一般把串口线插上电脑就会提示安装驱动,在网上下一个串口驱动就会成功了。可我的电脑却怎么也成功不了,在网上找了各种方法就是不行(我的系统是win7)。更有不靠谱的说法是重装系统。总之试变了网上的驱动,还用什么驱动精灵之类的都把还是没有成功。打开设备管理器,usb-serial controller总是有黄色的叹号。

  我的解决方法。

  运行-》输入hdwwiz-》下一步选择安装我手动列表中选择硬件(高级)-》下一步选择端口(com和lpt)-》下一步选择public-》然后选择第一个public ............->再点击下一步进行安装。

  最后终于成功了。

  安装jar包

  安装jar包和我们平常的引入jar包不太一样。附件是用到的jar包。

  首先把RXTXcomm.jar放入所用jre的lib目录下,把rxtxSerial.dll放到jre的bin目录下就可以了。

  代码实现

  主要是两步第一步查到所使用的com口。第二步对串口进行监听。

  具体的代码如下:

  import java.io.*;

  import java.util.*;

  import test.FeelTheBase;

  import test.SimpleReadA;

  import gnu.io.*;

  public class SimpleRead implements SerialPortEventListener { // SerialPortEventListener

  // 监听器,我的理解是独立开辟一个线程监听串口数据

  public CommPortIdentifier portId; // 串口通信管理类

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

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

  public InputStreamReader streamReader;

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

  public OutputStreamWriter streamwriter;

  public SerialPort serialPort; // 串口的引用

  public void init() {

  try {

  serialPort = (SerialPort) portId.open(s, 2000);// 打开串口名字为myapp,延迟为2毫秒

  inputStream = serialPort.getInputStream();

  outputStream = serialPort.getOutputStream();

  serialPort.addEventListener(this); // 给当前串口天加一个监听器

  } catch (FileNotFoundException e1) {

  // TODO Auto-generated catch block

  e1.printStackTrace();

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  catch (TooManyListenersException e) {

  }

  serialPort.notifyOnDataAvailable(true); // 当有数据时通知

  try {

  serialPort.setSerialPortParams(57600, SerialPort.DATABITS_8, // 设置串口读写参数

  SerialPort.STOPBITS_1, SerialPort.PARITY_ODD);

  } 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:// 当有可用数据时读取数据,并且给串口返回数据

  try {

  while (inputStream.available() > 0) {

  byte[] by = new byte[inputStream.available()];

  inputStream.read(by);

  System.out.println(by);//获得的数据

  }

  } catch (IOException e) {

  }

  break;

  }

  }

  public static void main(String[] args) {

  SimpleRead com3 = new SimpleRead();

  try {

  portList = CommPortIdentifier.getPortIdentifiers(); // 得到当前连接上的端口

  while (portList.hasMoreElements()) {

  CommPortIdentifier p = (CommPortIdentifier) portList

  .nextElement();

  if (p.getPortType() == CommPortIdentifier.PORT_SERIAL) {// 判断如果端口类型是串口

  if (p.getName().equals("COM25")) { // 判断如果COM3端口已经启动就连接

  com3.setCom(p);

  com3.setOther(com5);

  System.out.println(p.getName());

  }

  }

  }

  com3.init(); // 实例一个;

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }

猜你喜欢

转载自blog.csdn.net/zhuzj12345/article/details/80222492