树莓派Java开发实现串口通信
程序员文章站
2022-07-02 22:09:11
...
通过com.pi4j.io.serial的jar包支持实现与树莓派的串口通信
由于工作需要,不得不了解了一些关于嵌入式开发方面的知识。
因为公司的JAVA程序运行在"树莓派"上(不知道树莓派的同学可以百度了解一下)
树莓派:它是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100 以太网接口(A型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能。 Raspberry Pi B款只提供电脑板,无内存、电源、键盘、机箱或连线。
恕我愚笨,我就暂且认为它就是个小型电脑主板吧,它具备了普通PC设备所拥有的大部分功能。可以连接鼠标+键盘,也可以装上屏幕显示。一般我们都给它安装Linux系统,在安装过jre环境后运行用JAVA编写的生产程序,实现生产自动化、监控、报警等等功能。
对于从未接触过该类神奇硬件设备的我来说更是迷茫,好在我在网上找到了它的相关使用文档,通过多次测试对接,终于open了端口对接。总之就是调jar包呗,国外也已经有过此类开源jar包了,站在巨人的肩膀上编程,感谢前辈。
找到jar包:com.pi4j
open串口的方法:
import com.pi4j.io.serial.*;
//首先 实例化serial对象,用于初始化串口
public Serial serial;
public String serial_lastStr = new String();//用于存放从串口获取的字符串信息
serial = SerialFactory.createInstance();//获取一个serial实例
String Com = "";
try {
SerialConfig config = new SerialConfig();//初始化config配置类
//默认获取第一个串口
String rs232port = RaspberryPiSerial.S0_COM_PORT;
File s0ComPort = new File(RaspberryPiSerial.S0_COM_PORT);
if((s0ComPort.exists())){
rs232port = RaspberryPiSerial.S0_COM_PORT;
}
else {//否则就使用默认的串口
rs232port = RaspberryPiSerial.DEFAULT_COM_PORT;
}
//config设定
config.device(rs232port)
.baud(Baud._9600)//波特率
.dataBits(DataBits._7)//数据位
.parity(Parity.EVEN)//偶校验
.stopBits(StopBits._1)//停止位
.flowControl(FlowControl.NONE);
//尝试打开串口
serial.open(config);
Com = rs232port;
System.out.println("獲取到端口:"+Com);
} catch(Exception e2) {
System.out.println("Get RS232 Error:"+e2.getMessage());
e2.printStackTrace();
}
close串口:
serial.close();
从串口读取内容:
开启一个对serial的监听,实时获取串口传来的信息。
serial.addListener(new SerialDataEventListener() {
@Override
public void dataReceived(SerialDataEvent event) {
//从单片机读取
try {
serial_lastStr = event.getAsciiString();
System.out.println("接受到:"+serial_lastStr);
} catch (IOException e) {
e.printStackTrace();
System.out.println("Get RS232 Error:"+e.printStackTrace());
}
}
});
当然,以上的代码适用于有串口的硬件设备,否则会抛出"找不到串口",或者FileNotFoundException异常,想要测试必须要有合适的测试环境。