刚来公司实习,还什么都不会,也是第一次接触串口,短信cat之类的东西。然后写了个小程序。
开始前需要下载javacomm20-win32 .zip,下载解压,然后开始配置,这个我也是头晕,不过用了个本方法,下面的配置可以参考:
1.win32com.dll 放在 C:\Program Files\Java\jdk1.6.0_21\jre\bin目录下;
2.javax.comm.porperties 放在 C:\Program Files\Java\jdk1.6.0_21\jre\lib目录下;
配置完之后,在java中可以引入相应的javax.comm包即可。
下面开始就是串口通信的的简单小例子了,采用的是AT命令。
package PortDemo; import java.io.OutputStream; import java.util.Map; import javax.comm.CommPortIdentifier; import javax.comm.NoSuchPortException; import javax.comm.PortInUseException; import javax.comm.SerialPort; import javax.comm.UnsupportedCommOperationException; public class FinalPort { public static void monSms(Map a){ SerialPort port = null; OutputStream out = null; java.io.InputStream inn = null; String portName = (String) a.get("portName"); String ownerName = (String) a.get("ownerName"); int lazyLoadTime = (Integer) a.get("lazyLoadTime"); String smsNumber = (String) a.get("smsNumber"); String[] descNumbers = (String[]) a.get("descNumbers"); String smsText = (String) a.get("smsText"); int baudrate = (Integer) a.get("baudrate"); int databits = (Integer) a.get("databits"); int stopbits = (Integer) a.get("stopbits"); int parity = (Integer) a.get("parity"); try { String[] texts = sendSms(smsNumber,descNumbers, smsText); for(int i=0;i<texts.length;i++){ port = openPort(portName, ownerName, lazyLoadTime,baudrate, databits, stopbits,parity); out = port.getOutputStream(); inn=port.getInputStream(); String text = texts[i]; Thread.sleep(300); int num = (text.length() - 18) / 2; char ch = '\r'; byte[] bytes = ("AT+CMGF=0" + ch).getBytes(); out.write(bytes); Thread.sleep(300); byte[] data = new byte[30];//读取信息接收数组 StringBuffer sb = new StringBuffer(); //设置读取信息的缓冲区 int red=inn.read(data); //读取信息到data数组,返回信息的长度 for(int j=0;j<data.length;j++){ sb.append((char)data[j]); } if(sb.indexOf("OK")>=0){ sb.delete(0, sb.length()-1); //清空读取信息的缓冲区 out.write(("AT+CMGS=" + num + ch).getBytes()); Thread.sleep(300); byte[] data2 = new byte[20]; inn.read(data2); //读取信息到data2数组 for(int j=0;j<data2.length;j++){ sb.append((char)data2[j]); //将读取到的信息转换成字符串 } } if(sb.indexOf(">") >= 0){ sb.delete(0, sb.length()-1); //清空读取信息的缓冲区 String c = "\u001a"; text = text + c; System.out.println("text:"+text); out.write(text.getBytes()); //发送信息 Thread.sleep(2000); } inn.close(); out.close(); port.close(); } }catch(Exception e){} } private static String[] sendSms(String Smsc_Number,String[] Dest_Numbers,String Sms_Text) { int size = Dest_Numbers.length; String[] strs = new String[size]; for(int i=0;i<size;i++){ String Dest_Number = Dest_Numbers[i]; String str = ""; str = str + "089168"; char[] chArray = (Smsc_Number + "F").toCharArray(); for (int j = 0; j < chArray.length; j += 2) { str = str + String.valueOf(chArray[j + 1]) + String.valueOf(chArray[j]); } str = str + "11000D9168"; char[] chArray2 = (Dest_Number + "F").toCharArray(); for (int j = 0; j < chArray2.length; j += 2){ str = str + String.valueOf(chArray2[j + 1]) + String.valueOf(chArray2[j]); } str = str + "000800"; str = str + gbEncoding(Sms_Text); strs[i] = str; } return strs; } public static SerialPort openPort(String portName,String ownerName,int lazyLoadTime,int baudrate,int databits, int stopbits,int parity) throws PortInUseException,NoSuchPortException, UnsupportedCommOperationException { SerialPort port = (SerialPort) CommPortIdentifier.getPortIdentifier(portName).open(ownerName,lazyLoadTime); port.setSerialPortParams(baudrate,databits, stopbits,parity); return port; } public static String gbEncoding(String gbString) { char[] utfBytes = gbString.toCharArray(); String unicodeBytes = Integer.toHexString((utfBytes.length)*2); if(unicodeBytes.length() < 2){ unicodeBytes = "0"+unicodeBytes; } for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++) { String hexB = Integer.toHexString(utfBytes[byteIndex]); if (hexB.length() <= 2) { hexB = "00" + hexB; } unicodeBytes = unicodeBytes + hexB; } return unicodeBytes.toUpperCase(); } }
接下来给测试一下能否发短信了:
package PortDemo; import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args){ String[] bytes = {"18032213010","15016522101"}; String portName = "COM2"; String ownerName = "myddd"; int lazyLoadTime = 2000; String smsNumber = "13800100500"; String smsText = "您好,您该交话费啦"; int baudrate = 9600; int databits = 8; int stopbits = 1; int parity = 0; Map a = new HashMap(); a.put("portName", portName); a.put("ownerName", ownerName); a.put("lazyLoadTime", lazyLoadTime); a.put("smsNumber", smsNumber); a.put("descNumbers", bytes); a.put("smsText", smsText); a.put("baudrate", baudrate); a.put("databits", databits); a.put("stopbits", stopbits); a.put("parity", parity); FinalPort.monSms(a); } }
这个在我的机器上正常运行:XP系统,jdk1.6.
需要注意的是,如果出现javax.comm.NoSucnPortException错误,说明配置文件放错位置了,这时候请查看你的ide使用的是jre还是jdk里面的jre。我用的事myeclipse,设置的IDE默认的jre是C:\Program Files (x86)\Java\jdk1.6.0_51
,它使用的是jdk1.6.0_51里面的jre,所以我把comm32包的配置文件放在里jdk里面的jre中的bin和lib目录了。
相关推荐
总的来说,Java串口通信实例`comtest`揭示了如何在Java环境中实现与硬件设备的串行通信。通过理解这些基本步骤和关键类,你可以根据自己的需求扩展功能,比如添加多线程、错误恢复机制,或者构建更复杂的通信协议。
本实例旨在提供一个简单的Java串口通信基础,帮助开发者快速掌握这一技术并应用于上位机开发。 1. **Java串口API** Java的标准库并不直接支持串口通信,但可以通过第三方库如`rxtx`或`javax.comm`来实现。`rxtx`是...
Java串口通信是一种在计算机之间通过串行接口进行数据传输的技术。在Java中,我们可以使用javax.comm库或者RXTX库来实现串口通信。这个实例是关于如何使用GUI(图形用户界面)来构建一个Java应用程序,使得用户可以...
在这个"Java串口通信实例带数据库传输"项目中,我们将深入探讨如何使用Java进行串口操作,并结合数据库存储传输的数据。 首先,Java提供了一个名为`javax.comm`的库来处理串口通信,但这个库已经过时,且对现代Java...
1. 串口通信协议:串行通信遵循特定的协议,如RS-232、RS-485或USB到串口转换。RS-232是最常见的,用于短距离通信,它定义了数据速率、电压标准、连接器类型等。 2. 波特率:波特率是衡量数据传输速率的指标,表示每...
java串口通信实例,仅供大家学习参考。Java串口,本实例大致工作流程是:将以下的所有java类都放在一个包下面,run as ---java application ,打开的是一个图形化界面,最上面的是一个输入文本框(也就是你要发射的...
Java实现串口通信是计算机编程中的一个重要领域,特别是在嵌入式系统、自动化设备以及物联网(IoT)设备的控制和数据传输中。Java虽然不是直接支持串口操作的语言,但通过一些库和API,我们可以创建应用程序来实现串口...
串口通信,又称串行通信,是通过串行数据传输的方式进行设备间的数据交换。它将数据一位一位地顺序传输,与并行通信相比,虽然速度较慢,但硬件成本较低,适合于短距离通信。在Java中,我们可以使用Java.comm包来...
Java串口通信编程是Java应用程序与外部设备之间通过串行接口进行数据交换的一种技术。在Java中实现串口通信,通常需要借助第三方库,RXTXcomm.jar就是这样一个常用的库,它提供了Java语言访问串口的功能。这个压缩包...
Java串口通信是一种在计算机之间或计算机与外部设备(如传感器、打印机等)之间通过串行接口进行数据传输的技术。这个“java 串口通信 完整demo”提供了一个完整的示例,包括所有必要的依赖包,可以直接运行,并且带...
Java串口通信是一种在计算机与外部设备之间进行数据交换的技术,它通过标准的串行物理接口(例如RS-232)实现。在Java中,虽然标准库并未直接支持串口通信,但可以通过第三方库来实现,如RXTX和Java Comm API。本...
### Java串口通信详解 #### 1. 串口通信简介 串口通信是一种非常重要的通信方式,尤其是在嵌入式系统或传感器网络的应用场景中。它允许PC机与嵌入式设备或传感器节点进行有效通信。最常见的接口有两种:RS-232串口...
SerialPort是实际处理串行通信的类,提供了设置波特率、数据位、停止位、校验位等配置的方法,以及读写数据的API。 2.4 串口API实例 - 列举所有可用串口:通过CommPortIdentifier枚举系统中的串口。 - 串口参数...
而`Java串口通信实例%282011.5.31%29.rar`文件可能包含更多实际的代码示例和项目,供你参考和学习。 总的来说,Java串口通信是一个实用的技术,特别适合于需要与硬件设备交互的项目。通过理解和应用这些基本概念,...
JAVA实现单片机串口通信的例子 本文详细讲解了基于JAVA语言的单片机串口通信的实现步骤,并对硬件电路设计、软件设计进行了详细的讲解。该项目的主要目的是实现PC机与单片机之间的串口通信,以便在分布式控制系统中...
Java串口通信是指Java程序通过计算机的串行通信接口(通常称为“串口”)与其他设备进行数据交换的过程。这种通信方式广泛应用于工业自动化、物联网等领域。为了支持这种通信,Java提供了一套专门的API,即`javax....
Java串口通信是Java编程中一个重要的组成部分,特别是在设备交互、数据传输以及嵌入式系统等领域有着广泛的应用。本文将详细介绍如何在Java中实现串口通信,并围绕"Java串口通信配置文件(全).rar"这个压缩包展开...
Java串口通信是一种在计算机之间或计算机与外部设备(如传感器、打印机)之间进行数据交换的方法,它基于串行通信协议。在这个Java程序中,开发者使用了Java的标准库`javax.comm`来实现串口通信的功能,并结合Java的...
接着,让我们了解Java串口通信的基本步骤: 1. **初始化串口**: 在Java程序中,我们需要创建一个`CommPortIdentifier`对象来识别可用的串口。这可以通过`CommPortIdentifier.getPortIdentifiers()`方法获取。然后,...