欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

树莓派Java开发实现串口通信

程序员文章站 2022-07-02 22:09:11
...

通过com.pi4j.io.serial的jar包支持实现与树莓派的串口通信

由于工作需要,不得不了解了一些关于嵌入式开发方面的知识。
因为公司的JAVA程序运行在"树莓派"上(不知道树莓派的同学可以百度了解一下)

树莓派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
树莓派Java开发实现串口通信

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异常,想要测试必须要有合适的测试环境。

相关标签: 个人总结