Java实现串口数据读写
来源:互联网 发布:centos开机进入grub 编辑:程序博客网 时间:2024/04/19 23:25
最近的一个项目中需要将扫码枪读取到的数据取出,但是因为扫码枪是用串口传输数据的,比较少见,所以记录一下,当给自己做一个小结,有需要的同学也能参考一下。
public class receiveData implements SerialPortEventListener{ protected static CommPortIdentifier portid = null; //通讯端口标识符 protected static SerialPort comPort = null; //串行端口 protected int BAUD = 9600; //波特率 protected int DATABITS = SerialPort.DATABITS_8;; //数据位 protected int STOPBITS = SerialPort.STOPBITS_1; //停止位 protected int PARITY = SerialPort.PARITY_NONE; //奇偶检验 private static OutputStream oStream; //输出流 private static InputStream iStream; //输入流 private static String data=""; StringBuilder buf = new StringBuilder(128); /* public static void main(String[] args) { receiveData my = new receiveData(); my.setSerialPortNumber(); }*/ /** * 读取所有串口名字 */ private void listPortChoices() { CommPortIdentifier portId; Enumeration en = CommPortIdentifier.getPortIdentifiers(); while (en.hasMoreElements()) { portId = (CommPortIdentifier) en.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { System.out.println(portId.getName()); } } } /** * 设置串口号 * @param Port * @return */ public void setSerialPortNumber() { String osName = null; String osname = System.getProperty("os.name", "").toLowerCase(); if (osname.startsWith("windows")) { // windows osName = "COM1"; } else if (osname.startsWith("linux")) { // linux osName = "/dev/ttyS1"; } System.out.println(osName); try { portid = CommPortIdentifier.getPortIdentifier(osName); if(portid.isCurrentlyOwned()){ System.out.println("端口在使用"); }else{ comPort = (SerialPort) portid.open(this.getClass().getName(), 1000); } } catch (PortInUseException e) { System.out.println("端口被占用"); e.printStackTrace(); } catch (NoSuchPortException e) { System.out.println("端口不存在"); e.printStackTrace(); } try { iStream = comPort.getInputStream(); //从COM1获取数据 oStream = comPort.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } try { comPort.addEventListener(this); //给当前串口增加一个监听器 comPort.notifyOnDataAvailable(true); //当有数据是通知 } catch (TooManyListenersException e) { e.printStackTrace(); } try { //设置串口参数依次为(波特率,数据位,停止位,奇偶检验) comPort.setSerialPortParams(this.BAUD, this.DATABITS, this.STOPBITS, this.PARITY); } catch (UnsupportedCommOperationException e) { System.out.println("端口操作命令不支持"); e.printStackTrace(); } try { } catch (IOException e) { e.printStackTrace(); } } @Override public void serialEvent(SerialPortEvent event) { 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(iStream.available() > 0) { char dd = (char)iStream.read(); data = data+String.valueOf(dd); System.out.println(data); }if(iStream.available()<=0){ } } catch (Exception e) { } break; } }}
这里我用的是rxtx的一些功能,需要注意的是需要在电脑上配置一下环境才能正确输出串口数据,不然这段代码会报错。
配置环境也很简单,只需要将 rxtxSerial.dell 和 rxtxParallel.dell 这两个扩展文件拷贝到 C 盘下的 System32文件夹下就可以了
有需要下载rxtx包和配置文件的可以点击rxtx包及扩展文件 下载,这里有32位和64位。
0 0
- Java实现串口数据读写
- 串口读写数据错误
- java实现读写Excel数据
- 串口读写类实现
- Python 串口读写实现
- java读写串口
- java 串口 读写
- JAVA串口读写小结
- java 串口读写程序
- 用Java语言向串口读写数据的方法
- mfc读写串口的数据
- JAVA读写串口Bean范例
- JAVA读写串口Bean范例
- Java Applet读写客户端串口
- net2.0下实现串口接收GPS数据读写(-)
- S3C2440 GPS串口配置以及数据读写
- 学习Netty以便通过串口读写数据
- Win7环境下Java串口数据读写(RXTX)(转载)
- BZOJ 2179: FFT快速傅立叶
- ubuntu dhcp服务器固定用户主机IP地址
- mui对话框
- 环境搭建arm-linux-gcc 没有那个文件或目录的问题
- WEB的mavan项目构建生成可执行jar包
- Java实现串口数据读写
- oracle数据库的备份还原标准化实施部署指南
- PHP Socket(套接字连接)扩展简介和使用方法
- C#中的事件和委托
- 前端框架Aurelia
- 集中式日志系统 ELK 协议栈详解
- SOAP请求、响应报文格式
- JSON中optString()和getString()区别
- 直接插入排序和希尔排序