一、简介

什么是LCD1602:LCD是显示方式,LCD液晶显示器。每行可以显示16个字符,一共可以显示2行。
在这里插入图片描述
一般来说LCD1602有16个IO口,控制它,就需要16个引脚。
但是这次购买的套件中,通过I2C芯片进行了适配,大大减少了引脚的占用,从16个变少到了2个。
I2C介绍(Inter-Intergrated Circuit):中文名称 集成电路总线,它是一种串行通信总线,适用于主-从架构。功能包括:

  • 减少引脚占用:只需要两个IO引脚
  • 所有组件之间,都存在简单的主-从关系。连接到总线的每一个设备都可以通过唯一的地址,进行软件寻址
  • I2C是真正的多主设备总线,可以提供仲裁和冲突检测
  • 传输速度:标准模式-100Kbps,快速模式-400Kbps,高速模式-3.4Mbps,超快速模式-5Mbps
  • 最大连接设备数:无限制
  • 最大从机设备数:127

二、具体实现逻辑

当前控制LCD1602的逻辑是这样的:
ESP32–I2C协议–PCF8574–LCD屏幕
PCF8574:接收I2C数据,控制8个IO引脚的输出

下图是连接方式
在这里插入图片描述

MicroPython官网,也有对I2C通信的描述

from machine import Pin, SoftI2C

# 按照具体的连接方式定义好对应的scl和sda引脚,通信频率 标准频率100Kbps
i2c = SoftI2C(scl=Pin(12), sda=Pin(13), freq=100000)

print(i2c.scan()) # 扫描总线上出现的设备
# 打印 [39]

在这里插入图片描述
这里0x27(16进制的39)其实是I2C的默认地址,它的值是由PCF8574芯片配置引脚的高低电平决定的,给图中的A0-A2配置不同的阻值就能改变他的地址

这里直接使用了普中的I2C驱动LCD的代码,使用它们大大的简化了操作其中内容的复杂度。
https://gitee.com/hong-shengquan/esp32/blob/master/Code/LCD1602/i2c_lcd.py
https://gitee.com/hong-shengquan/esp32/blob/master/Code/LCD1602/lcd_api.py
直接将两个文件导入到ESP32中,通过代码引用它们即可
在这里插入图片描述

from machine import Pin, SoftI2C
import time
from i2c_lcd import I2cLcd 

# 按照具体的连接方式定义好对应的scl和sda引脚,通信频率 标准频率100Kbps
i2c = SoftI2C(scl=Pin(12), sda=Pin(13), freq=100000)

print(i2c.scan()) # 扫描总线上出现的设备
DEFAULT_ADDR = 0x27
# lcd对应的标准i2c对象  地址  几行lcd  每行对少个字符
lcd = I2cLcd(i2c, DEFAULT_ADDR, 2, 16)

for i in range(0, 100):
    #lcd.clear()
    lcd.putstr("loading---{}%\n".format(i))
    lcd.putstr("Please wait.\n")
    #time.sleep_ms(1)

可以看到,这里的实现是非常简单的,因为两个驱动代码已经封装好了基础功能
此外,I2cLcd还提供了其他的一些功能,如移动光标、开关背光等。可以查看源码自行试验

相关资料、代码

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐