嵌入式系统或传感器网络的很多应用和测试都需要通过PC机与嵌入式设备或传感器节点进行通信。其中,最常用的接口就是RS-232串口和USB接口(并口)。鉴于USB接口的复杂性以及不需要很大的数据传输量,现模块中使用了串口进行通讯。 其中SUN的CommAPI分别提供了对常用的RS232串行端口和IEEE1284并行端口通讯的支持。RS-232-C(又称EIA RS-232-C,以下简称RS232)是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它是一个全双工的通讯协议,可以同时进行数据接收和发送的工作。 目前,常见的Java串口包有SUN在1998年发布的串口通信API:comm2.0.jar(Windows下)、comm3.0.jar(Linux/Solaris);IBM的串口通信API以及一个开源的实现。现模块中使用了comm3.0.jar(Linux/Solaris)串口包进行串口通讯。 首先需要打开串口,如下所示: CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(“串口名”); try { SerialPort sPort = (SerialPort) portId.open("串口所有者名称", 超时等待时间); } catch (PortInUseException e) {//如果端口被占用就抛出这个异常 throw new SerialConnectionException(e.getMessage()); } 然后使用InputStream从串口读取数据,使用OutputStream向串口写入数据,如下所示: try { in = serialPort.getInputStream(); out = serialPort.getOutputStream(); } catch (IOException e) { return InitFail; } 最后设置初始化通讯参数,分别为波特率、输入/输出流控制、数据位数、停止位和齐偶校验。这里设置为9600, N, 8, 1: try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { return InitFail; } 经过以上的初始化工作就可以通过调用in. read()以及out.write(char)进行数据读取及发送工作了。该模块同样通过调用out.write(char)向外网设备发送AT命令及PDU数据包,通过in.read()读取从外网设备返回的数据。