在Raspberry 皮 上使用启用I2C的LCD屏幕

23

以前的帖子 I’使用HD44780进行了覆盖16×2 and 20×使用Python的Raspberry 皮 具有4个LCD屏幕。这些相对易于使用,但需要与Pi建立许多连接’s 通用输入输出头。使用支持I2C的LCD屏幕可以简化此设置。

这些可以作为一个完整的单元购买,也可以将I2C背包连接到标准屏幕。

这是一个I2C背包:

I2C 液晶屏背包

这是一个焊接在标准16背面的背包×2 液晶屏 屏幕 :I2C 液晶屏背包

它需要16个焊接点,但是一旦完成,屏幕仅需四根线就可以连接到Pi!

第1步–将LCD屏幕连接到Pi

i2c电平转换器I2c模块可以用5V或3.3V供电,但如果提供5V,则屏幕工作最佳。但是Pi’s 通用输入输出 pins aren’t可以承受5V电压,因此需要对I2C信号进行电平转换。为此,我使用了I2C电平转换器。

这需要设备用作参考的高电平电压(5V)和低电平电压(3.3V)。 高压引脚可以连接到屏幕,两个LV引脚可以连接到Pi’s I2C 接口.

电平转换器I2C背包
左心室3.3V(引脚1)
左心室1SDA(引脚3)
左心室2SCL(引脚5)
地线地线(引脚6)地线
高压5V(引脚2)VCC
高压1SDA
高压2SCL

在进行实验时,我发现它在不改变电平的情况下仍然可以正常工作,但是我无法’可以确定这不是’一定不会损坏Pi。所以’最好安全地玩!

第2步–下载示例Python脚本

该示例脚本将允许您通过I2C将文本发送到屏幕。这与我的脚本非常相似 正常的16×2 屏幕。要将脚本直接下载到您的Pi,可以使用:

wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/lcd_i2c.py

第三步–启用I2C接口

为了使用I2C设备,必须在Raspberry 皮 上启用该接口。这可以通过遵循我的“在Raspberry 皮 上启用I2C接口”教程。默认情况下,I2C背包将显示在地址0x27上。

步骤4– Run 液晶屏 Script

可以使用以下命令运行脚本:

sudo 蟒蛇 lcd_i2c.py

最后,您应该会看到类似以下内容的内容:

I2C 16x2液晶屏

故障排除

如果您遇到问题,请:

  • 仔细检查您的接线
  • 从新的Raspbian图像开始
  • 确保按照以下步骤设置I2C“在Raspberry 皮 上启用I2C接口” tutorial
  • 跟着“Testing hardware”以上I2C教程中的“参考”部分,并检查是否检测到屏幕
  • 确保SDA和SCL正确连接到Pi上的引脚3和5
  • 使用i2c背包上的修剪器调整对比度
分享。

23条留言

  1. 迈克·福勒

    在所示的背包(以及我所用的背包)上,有一个NPN晶体管连接至插针16,该晶体管控制背光– as you’在您以前的帖子中已实现。通过在脚本中设置LCD_BACKLIGHT = 0,可以关闭背光。

    另外,某些背包使用i2c地址0x3f,而不是0x27。

    • 大多数背包使用PCF8547或8547A芯片。通常,使用8547的数据包将默认为0x27,而使用8547A的数据包将默认为0x3F。在我的背包(cheapo中国东西)上,有三对标有A0,A1,A2的垫子,可用于更改地址。分别链接两个打击垫会将相关位设置为零,因此您可以将背包设置为0x20–0x27(8547)或0x38–0x3F(8547A)。如您所料,A0是LSB,A2是MSB–无论如何,在我的背包上!

  2. 你好

    您的lcd_i2c.py在第42-43行包含一些错别字(#comments):它们与第74-75行相反。

    非常感谢,我’我现在正在使用它。

  3. 感谢脚本!使用i2c总线将1602 液晶屏连接到rpi可以快速启动。
    就我个人而言’我计划在我的网络音频播放器项目(使用rpi 2,volumio和hifiberry dac构建)中使用它。
    但是,我’ve注意到,有时,在脚本启动时,显示内容会显示损坏的随机字符,而不是正常的字符串。
    例如,这可能会失败,但可能不会:
    lcd_string(strftime(“%H:%M:%S”,gmtime()),LCD_LINE_2)
    此外,脚本中更详细的注释将非常有帮助!

  4. Isn’电平转换器有点不必要吗? SDA和SCL引脚是Pi的输出,因此它们正在发送3.3v逻辑电平,而不接收它们?只要背包可以应付3.3v逻辑,并且PCF8574 + 液晶屏的+5,就可以了。代码工作正常,谢谢!

  5. 谢谢马特!
    到目前为止,这似乎是唯一对我有用的脚本。
    我还有一个“challenge”希望您能在这里提供帮助。
    根本原因是我’在Python方面完全是菜鸟。
    我需要您的脚本来读取文本文件的内容(我已经做到了,’ok),然后将所选内容作为静态文本(在这种情况下为艺术家和歌曲标题)传递到屏幕,并且’是的。发生变化时,脚本将由播放器自动启动(MoOde音频)’由播放器本身覆盖,我可以在其中定义要启动的脚本)。一旦工作– I’我很高兴,可以开始考虑更高级的水平,何时可以’t fit the 屏幕.
    提前致谢!

  6. 丹尼尔·阿劳斯(Daniel Araos)

    伟大的工作,您节省了我宝贵的时间!

    我修改了lcd_string函数,使其更易于用作库,现在它可以接受从0到3的行号:

    def lcd_string(message,line):
      # Send string to 显示
      if line==0:
        line=LCD_LINE_1
      if line==1:
        line=LCD_LINE_2
      if line==2:
        line=LCD_LINE_3
      if line==3:
        line=LCD_LINE_4
    	
      message = message.ljust(LCD_WIDTH," ")
    
      lcd_byte(line, 液晶屏_CMD)
    
      for i in range(LCD_WIDTH):
        lcd_byte(ord(message[i]),LCD_CHR)
    
  7. 很棒的演示,但是我在下面得到了错误,并且想知道是否有人可以阐明一下。它是最新的pi3

    追溯(最近一次通话):
    文件“lcd_i2c.py”, line 135, in
    lcd_byte(0x01,LCD_CMD)
    文件“lcd_i2c.py”,第83行,在lcd_byte中
    bus.write_byte(I2C_ADDR,bits_high)
    IOError:[错误5]输入/输出错误

    • 当i2c不存在时,您会收到该错误’启用或设备没有’在i2c总线上找不到。运行i2cdetect测试时是否显示?

  8. 我停留在阅读桌子上“将屏幕连接到Pi”,如何在不使用Level Shifter的情况下将Raspberry pi直接连接到I2C背包?我有一个Level Shifter,但它在中国发布,可能要花几周的时间,我现在想开始没有它的游戏。我有一个pi 1。
    谢谢。

  9. 迈克·尼尔森

    您还需要使用I2C电平转换器吗?

    大部分(如果全部是LCD)’声称能够在5v上工作

    他们只是希望它能工作吗?

    仍然最好在pi和LCD之间安装一个I2C电平转换器吗?

    • 屏幕将在5V电压下工作。它’仅设备也可能在逻辑引脚上使用5V。 Raspberry 皮 的输入不容许5V的电压,因此电平转换器仅保证Pi永远不会在屏幕上看到5V的电压。但是,如果没有它,可能会正常工作。真正确定的唯一方法是能够测量屏幕的幅度’I2C信号。但是如果没有某种信号分析仪,这很难做到。一世’我使用了没有电平转换器的屏幕,但是我没有’如果有人遵循我的教程并损坏了他们的Pi,我们不建议您这样做。

  10. 上帝祝福你!您是唯一提到调整对比度的人。其他所有博主都让我死了:o)

    感谢天堂像你这样的人!

  11. 谢谢你这样的帖子’s really useful!

    I’我一直遵循所有步骤(除了使用5.5v端口,我不’因为没有移位器,所以我将I2C 液晶屏直接连接到3V端口)。它打开并且代码没有’t break, I’我什至可以使用python代码来打开和关闭背景灯,但是,这是问题,我’我无法在上面显示任何字母! :s

    我尝试了此代码,并尝试了另一种代码,但得出了相同的结论。我不’t know, maybe there’我不使用此液晶显示器时常见的错误’不知道。是否发生在像我这样的其他人身上,这似乎有用,但最后却没有效果?

    任何想法?

    I’使用带有Raspbian的Raspberry 皮 3 B型 +时,我还连接了一个射频识别器并对其进行工作,也许有任何不兼容之处吗?

    我不’没有收到任何错误消息。

    谢谢!

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.