05-I2C控制LCD1602
·
一、简介
什么是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还提供了其他的一些功能,如移动光标、开关背光等。可以查看源码自行试验
更多推荐
所有评论(0)