树莓派使用i2c连接LCD1602屏,显示时间和温度(JAVA实现)
jungle说
2020年06月22日 23:58
收录于文集
共1篇

树莓派版本: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