一,环境
windows 11, JDK8
二,使用资料
链接:https://pan.baidu.com/s/13dy6DV5RcnFn-k_Oe5b8Cw
提取码:30uh
我的JAVA_HOME 是 D:\env\jdk\
- 放置
RXTXcomm.jar
于JDK的lib下面,还有JRE的lib\ext 下面(我的是这个,D:\env\jdk\lib
,D:\env\jdk\jre\lib\ext
) - 放置
rxtxSerial.dll
和rxtxParallel.dll
于JDK的 bin下面,还有JRE的bin下面(我的是这个,D:\env\jdk\bin
,D:\env\jdk\jre\bin
) -
smslib-3.5.1.jar
你可以导入本地仓库 或者项目引用也行 - 串口转usb 驱动(这个特别注意,如果你安装最新的,会一直报端口占用问题,我被坑的怀疑人生,搞个旧版本的就行),把
CH341S64.SYS
放置 C:\Windows\System32 下面就行了,如果之前有安装过的替换掉。
三,maven 依赖
<dependency>
<groupId>org.smslib</groupId>
<artifactId>smslib</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
第一个依赖在资料内部,自己导入本地仓库
四,使用直接调用 sendSMS 就行
- yml配置
sms:
id: 1 # 编号不重复便可
comPort: COM1 # 串口号
baudRate: 115200 # 波特率
manufacturer: Quectel # 厂家 (可为空)
model: # 型号(可为空)
- 配置类
@Configuration
@ConfigurationProperties("sms")
@Data
public class SmsConfig {
//编号
private String id;
//串口
private String comPort;
//波特率
private String baudRate;
//厂家
private String manufacturer;
//型号
private String model;
//sim卡的pin码
private String simPin;
}
- 工具类
@Slf4j
@Component
public class SMSUtil {
static SerialModemGateway gateway;
@Autowired
public SMSUtil(SmsConfig smsConfig) {
gateway = new SerialModemGateway(smsConfig.getId(),
smsConfig.getComPort(),
Integer.valueOf(smsConfig.getBaudRate()),
smsConfig.getManufacturer(),
smsConfig.getModel());
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin(smsConfig.getSimPin());
}
public static void sendSMS(String mobile, String content) throws IOException, InterruptedException, SMSLibException {
log.info("发送短信:" + mobile + ",内容:" + content);
Service.getInstance().addGateway(gateway);
Service.getInstance().startService();
OutboundMessage outboundMessage =
new OutboundMessage(mobile, content);
outboundMessage.setEncoding(Message.MessageEncodings.ENCUCS2);
// outboundMessage.setEncoding(Message.MessageEncodings.ENCCUSTOM);
// outboundMessage.setEncoding(Message.MessageEncodings.ENC8BIT);
Service.getInstance()
.sendMessage(outboundMessage);
Service.getInstance().stopService();
Service.getInstance().removeGateway(gateway);
}
}
五,可能出现的异常问题
PortInUseException
- 输出是拒绝访问的,可能是其他程序占用了 (可能用了其他工具占用了端口)
- 输出是设备不可用,那么就是驱动有问题,要换驱动(我被坑惨了)
NoSuchPortException
- 检测下端口是否输入错误 可能是COM2 COM3