
树莓派版本:4B
1.连线

GND --> GND
VCC --> 5V
SDA --> SDA
SCL --> SCL
2.打开树莓派i2c开关

Raspberry Pi Configuration
修改modules添加i2c模块

vim /etc/modules
重启后,通过i2cdetect查看i2c设备是否正常加载

i2cdetect -l
这里可以看到设备被系统正常加载,而且可以看到设备是1号i2c设备,下面通过这个编号来查看设备地址

i2cdetect -y 1
可以得到设备地址是0x27
3.编写java代码
首先maven添加pi4j包 pi4j-core,pi4j-device



public class pi { public static void main(String[] args) { try { final pi p = new pi(); new Thread(() -> { p.start(); }).start(); } catch (Exception e) { e.printStackTrace(); } } private LCD lcd; private Integer timerFlag = 3; private Integer timer = 0; public pi() throws Exception { /** * rows声明lcd设备的行数,columns声明lcd设备的列数 * i2cBus声明i2c设备号(通过i2cdetect -l查询) * i2cAddress声明i2c设备地址(通过i2cdetect -y 1查询) * 8位数据,1位是rs,2位是rw,3位是en,4位是背光灯 * 5,6,7,8分别是dat4,5,6,7 */ lcd = new I2CLcdDisplay(2,16,1,0x27, 3,0,1,2, 7,6,5,4); } public void start(){ try { TimeUnit.SECONDS.sleep(1); //清除标记 lcd.clear(); Process uptime; InputStream in; String s; byte[] b; File file; InputStreamReader reader; BufferedReader br; while (true){ //第二行读取系统提供的temp文件,显示cpu温度 if (timer >= timerFlag){ lcd.clear(); timer = 0; file = new File("/sys/class/thermal/thermal_zone0/temp"); reader = new InputStreamReader(new FileInputStream(file)); br = new BufferedReader(reader); String wendu = br.readLine(); br.close(); reader.close(); //生命锚点位置 lcd.setCursorPosition(1,0); //从锚点开始写入数据 lcd.write("PI TEMP:" + Float.parseFloat(wendu) / 1000 + "°C"); } else { timer += 1; } uptime = Runtime.getRuntime().exec("uptime"); in = uptime.getInputStream(); s = ""; while (uptime.isAlive()){ if(in.available() > 0){ b = new byte[in.available()]; in.read(b); s += new String(b); } } s = s.trim(); if(s.length() > 8){ lcd.setCursorPosition(0,0); lcd.write("TIME:" + s.substring(0,8)); } TimeUnit.SECONDS.sleep(1); } } catch (Exception e){ e.printStackTrace(); } } }

4.打包运行
使用自己最擅长的方式将代码打成可运行jar包,然后用自己最擅长的方式将jar包放到树莓派中,然后用最擅长的方式运行jar包。上效果图:

bingo
5.拓展
接入mq、rpc等等通讯框架可以实现简单的消息展示功能。如图

rabbitmq向树莓派监听队列中发送消息

bingo
