JAVA串口通信的方法

By
写代码

以前经常用C语言操作串口,实现一些发送接收之类的小功能,最近项目中也用到了串口通信,不过语言变成了Java,这个搞起来略蛋疼。

Java说起来就是各种库各种引用,所以得到某些需求先google搜一把~~比如之前搞半天的读取网页内容,自己边琢磨边写,又是charset,又是proxy,又是什么browsertype的,晕头转向,最后拿Jsoup一会儿就搞定了……不过使用之前要充分考虑可扩展性和API的丰富程度,不然后面程序体积变大集成起来很蛋疼。好了废话不说,讲讲串口的问题……

总述

Java常用的(我用到的)串口工具有俩:javacomm和RXTX,前者只支持win32,后者32和64位和其他版本都有。使用方法类似,所以就放到一起说:

下载到压缩包会看到readme之类的提示,然后把对应的dll文件和jar文件分别拷贝到/bin和/lib目录下,然后在出问题的时候继续查看readme。接着跑一下附带的例程。

具体使用过程就是:配置端口波特率、校验位等信息;打开串口;写数据;读输出;关闭。这一系列步骤在写程序的时候一定不要弄颠倒了。

串口配置

需要配置的有4项:
波特率(baudrate)— 一般9600、115200即可
(数据位)dataBits— 一般8 bits

    DATABITS_5: 5 bits
    DATABITS_6: 6 bits
    DATABITS_7: 7 bits
    DATABITS_8: 8 bits

(停止位)stopBits — 一般1 stop bit

    STOPBITS_1: 1 stop bit
    STOPBITS_2: 2 stop bits
    STOPBITS_1_5: 1.5 stop bits

(校验位)parity — 不需校验位的话,选择SerialPort.PARITY_NONE

    PARITY_NONE: no parity
    PARITY_ODD: odd parity
    PARITY_EVEN: even parity
    PARITY_MARK: mark parity
    PARITY_SPACE: space parity

流量控制模式(FlowControlMode) — 一般FLOWCONTROL_NONE

    FLOWCONTROL_NONE: no flow control
    FLOWCONTROL_RTSCTS_IN: RTS/CTS (hardware) flow control for input
    FLOWCONTROL_RTSCTS_OUT: RTS/CTS (hardware) flow control for output
    FLOWCONTROL_XONXOFF_IN: XON/XOFF (software) flow control for input
    FLOWCONTROL_XONXOFF_OUT:XON/XOFF (software) flow control for output

事件监听

addEventListener(SerialPortEventListener lsnr)

用于监听串口事件(SerialEvents),可监听的事件有:

BI(Break interrupt)
CD(Carrier detect)
CTS(Clear to send)
DATA_AVAILABLE(Data available at the serial port)
DSR(Data set ready)
eventType(Deprecated. Replaced by getEventType method)
FE(Framing error)
OE(Overrun error)
OUTPUT_BUFFER_EMPTY(Output buffer is empty)
PE(Parity error)
RI(Ring indicator)

读数据

通过SerialPortEventListener来,读取到DATA_AVAILABLE,保存并处理串口内容。

写数据

使用getOutputStream来向串口发送数据,是发送数据的唯一方法。使用时,向OutPutStream中写入byte串即可,之后用SerialPortEventListener获取回馈结果。

RXTX例程(来自 这里 ):

后记嗯……好像也啥都没写的样子(我会告诉你这篇其实是测试帖代码效果的吗)……总之去看javacomm附带有例程 / RXTX的例程就可以了……

Comments: 8

  1. 这个沙发,我表示我一点都看不懂,嘿嘿。

    2014年10月19日
  2. 第二发说点啥了,哦,就是java了,今天玩了一下你介绍的飞机游戏,发现这东西怎么做出来了,真是头大。。还是不想了。

    2014年10月19日
  3. 不过编程就是从一点点一点点做到最后,让人看起来似乎很复杂,但其实每个功能都有它的一段用处,仔细去做,其实也不难,但它的确让不知道的人摸不着头脑。

    2014年10月19日
  4. 写java特别容易写吐。。

    2014年10月25日
  5. 哇,哥你C也会啊,高大上啊! :eek:

    2014年10月28日
  6. 学也不会呢 :?:

    2014年10月30日
  7. 好奇怪。。

    2014年11月01日
  8. 我实在搞不明白,为什么
    <div id="rating" itemprop="aggregateRating" itemscope=""

    被影藏了谷歌搜出来的还有评分?

    发文章的时候定义好的?

    2014年11月01日

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

:razz: