【鼓捣树莓派】树莓派通过I2C总线连接LCD1602

来源:互联网 发布:金融学中的优化方法 编辑:程序博客网 时间:2024/06/05 11:42

硬件:

  • Raspberry Pi 3B
  • LCD1602屏幕
    -i2c转LCD1602的转接板( PCF85741)

一般LCD1602需要11个GPIO,但是树莓派的GPIO口有限,所以需要串转并的方式来节省GPIO口。

下图为一般LCD1602的接法。
当前使用的转接板为 PCF85741
pcf85741
手头的是接好的板子
这里写图片描述

接线方式::---PCF85741---:   :---RASP---:    GND-------------06 GROUND    VCC-------------02 5V    SDA-------------03 SDA1

树莓派I/O引脚图
好了,完成上面的接线工作,就可以通电了。
连接电源打开树莓派,显示屏就会亮,同时在第一行显示一排黑方块。如果看不到黑方块或黑方块不明显,请调节可调电阻,直到黑方块清晰显示。如果调节可调电阻还看不到方块,则可能你的连接有问题了,请检查连接,包括检查显示屏的引脚有没有虚焊。

下面我们需要修改树莓派的配置文件使能I2C,通过nano编辑器修改raspi-blacklist.conf 文件内容
pi@raspberrypi ~ $ sudo nano /etc/modprobe.d/raspi-blacklist.conf

写入保存

# blacklist spi and i2c by default (many users don't need them)blacklist spi-bcm2708blacklist i2c-bcm2708

打开/etc/modules ,在文件结尾加上 i2c-dev、i2c-bcm2708

pi@raspberrypi ~ $ sudo nano /etc/modules

写入保存

# /etc/modules: kernel modules to load at boot time.## This file contains the names of kernel modules that should be loaded# at boot time, one per line. Lines beginning with "#" are ignored.# Parameters can be specified after the module name.snd-bcm2835i2c-bcm2708i2c-dev

更新一次包列表

pi@raspberrypi ~ $ sudo apt-get update

安装 i2c-tools工具与python-smbus

pi@raspberrypi ~ $ sudo apt-get install i2c-tools python-smbus

之后reboot,重启后千万记得打开i2c接口
这里写图片描否则无法找到i2c地址,出现如下错误:
Could not open file /dev/i2c-1' or/dev/i2c/1’: No such file or directory
寻址:

pi@raspberrypi ~ $ sudo i2cdetect -y 1

你的I2c设备地址就是0x27,即转接板上的I2C地址。

完成!
测试代码:

#!/user/bin/env python import smbusimport timeimport sysimport LCD1602 as LCDimport logximport loggingif __name__ == '__main__':      LCD.init_lcd()    time.sleep(2)    LCD.print_lcd(0,0,'NUPT bear BLight')    LCD.print_lcd(1,1,'local time')    logging.info('wait 2 seconds')    LCD.turn_light(1)    logging.info('turn on BLight')    time.sleep(5)    while True:        nowtime = time.strftime('%m-%d %H:%M:%S',time.localtime(time.time()))        hourtime = time.strftime('%H',time.localtime(time.time()))        mintime = time.strftime('%M',time.localtime(time.time()))        sectime = time.strftime('%S',time.localtime(time.time()))        LCD.print_lcd(1,1,nowtime)        if mintime == '59':            if sectime == '00':                LCD.turn_light(1)            elif sectime  == '59':                LCD.turn_light(0)        time.sleep(1)   

这里写图片描述


资料来源:

  • 百度贴吧《树莓派用I2c接口控制LCD1602,用Arduino的I2c转LCD1602的转接板》by:swubear
  • 电子发烧友论坛《如何通过I2C总线来使用LCD1602液晶显示屏》by:wufan931111
0 0