ESP32-C5 mpy i2c 驱动LCD1602A屏幕

2025-10-11119
AI 快速预览详细 收起
本文介绍了如何使用ESP32-C5通过i2c接口驱动LCD1602A屏幕。通过i2c转接板,可以将16个引脚的屏幕简化为4个引脚,大大降低了接线难度。文章提供了详细的硬件连接方法和代码示例,适合初学者学习。此外,还展示了如何实现跑马灯效果,增加了项目的趣味性。

     相信只要初学过创客的人手里都会有一个硕大的点阵屏幕,这东西会出现在任何新手套装里。我记得我在初学Arduino的时候也尝试点亮过,但是因为引脚有16个之多,所以自从用杜邦线在面包板上插好的那一天起我就没有再拆掉过…… 因为杜邦线实在太容易不小心就掉一根了,所以一直没有拆掉的勇气。直到有一天我发现网上有一个i2c转接板可以解决我的痛点,只要把它焊在屏幕背后我就把一个16pin的屏幕变成了只有4pin的i2c屏幕,接线难度指数级下降。

 

blackcard.jpg

按这个方向焊在LCD1602A屏幕上

adapter.jpg

首先我们获得LCD1602A的驱动

https://github.com/v-leihe/PicoFun/blob/main/lib/LCD1602A.py

 

然后再获得LCD1602A的i2c驱动文件LCD1602AI2C.py

https://github.com/v-leihe/PicoFun/blob/main/lib/LCD1602AI2C.py

 

Demo文件

https://github.com/v-leihe/PicoFun/blob/main/examples/Part20-lcd1602A.py

 

按Esp32C5的pin脚修改程序

#3v3   → VCC

#GND → GND

#10/C → SCL

#9/D   → SDA

 

i2c = SoftI2C(sda=Pin(9),scl=Pin(10),freq=100000)

 

呜呼,生活变得好简单,好开心。

 

2fdc33b7311891b27cb5d4e816a42b12.jpg

代码
import time
from machine import SoftI2C, Pin
from LCD1602AI2C import LCD1602AI2C
 
DEFAULT_I2C_ADDR = 0x27  # lcd1602的地址是0x27
i2c = SoftI2C(sda=Pin(9),scl=Pin(10),freq=100000)
lcd = LCD1602AI2C(i2c, DEFAULT_I2C_ADDR, 2, 16)  # 行数2,行的大小16个字节
 
lcd.clear()  # 清屏
lcd.putstr("ESP32-C5\n")
lcd.putstr("MiffyDad")

关于LCD1602A的显示规则:

已知屏幕有两行16列,也就是可以显示2x16个字符。

当字符不足16时就按顺序显示。

如 lcd.putstr("MiffyDad")

 

#显示

MiffyDad

#显示完毕

 

当字符超过16但不到32时,显示完16个字符自动换行

lcd.putstr("ABCDEFGHIJKLMNOPQRSTUVWXYZ")

 

#显示

ABCDEFGHIJKLMNOP

QRSTUVWXYZ

#显示完毕

 

当字符超过32时,显示效果就比较意外了

lcd.putstr("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

 

#显示

6789EFGHIJKLMNOP

QRSTUVWXYZ012345

#显示完毕

 

这里6789是从头开始显示,这个应该超出了大部分人的预期。

那么我们把要显示的内容稍微修改一下,实现一个跑马灯效果

代码
import time
from machine import SoftI2C, Pin
from LCD1602AI2C import LCD1602AI2C
 
DEFAULT_I2C_ADDR = 0x27  # lcd1602的地址是0x27
i2c = SoftI2C(sda=Pin(9),scl=Pin(10),freq=100000)
lcd = LCD1602AI2C(i2c, DEFAULT_I2C_ADDR, 2, 16)  # 行数2,行的大小16个字节
 
lcd.clear()  # 清屏
input = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

for i in range(0, len(input)-32 + 1) :
    output = input[i:i+32]
    lcd.putstr(output)
    time.sleep(1)

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -