探索 Adafruit Trellis:开源背光键盘驱动系统

电子说

1.4w人已加入

描述

探索 Adafruit Trellis:开源背光键盘驱动系统

在电子设计领域,一款优秀的开源背光键盘驱动系统能为项目带来更多的可能性和便利性。Adafruit Trellis 就是这样一款值得关注的产品,今天我们就来深入了解它。

文件下载:1616.pdf

一、Trellis 概述

Trellis 是一个开源的背光键盘驱动系统,使用起来非常方便。它可以与任何 3mm 的 LED 搭配使用,并且最多可以在共享的 I2C 总线上拼接 8 个模块。

Trellis 的 PCB 是专门为适配 Adafruit 4x4 弹性键盘而设计的。每个 PCB 上有 4x4 的焊盘和 4x4 个适合 3mm LED 的位置。板载电路负责处理 4x4 模块的按键和 LED 照明,但它没有微控制器或其他“大脑”,需要一个 Arduino 或类似的微控制器来控制 Trellis,读取按键数据并控制 LED 点亮。

每个模块都有一个 I2C 控制的 LED 序列器和键盘读取器。芯片可以单独控制所有 16 个 LED 的开关,但不能进行灰度或调光。同样的芯片还能读取橡胶键盘的按键操作,连接方式采用“二极管复用”,这样在按下多个按键时不用担心“鬼影”问题,每个按键都有唯一的地址。

模块上有 3 个地址跳线,只要每个模块有唯一的地址,就可以在单个 I2C 总线上拼接最多 8 个 PCB(总共 4x32 或 16x8 = 128 个按钮/LED)。所有模块通过边缘焊接连接,共享相同的电源、接地、中断和 I2C 时钟/数据引脚,只需 2 根 I2C 线就能轻松设置 128 个 LED 并读取 128 个按钮。模块可以任意排列,只要每个模块通过 5 个边缘引脚相互连接即可。

每个 LED 都通过恒流驱动器进行复用,因此可以自由混合搭配不同颜色的 LED,使用 250mcd 以上亮度的漫射 LED 效果最佳。

二、添加 LED

Trellis PCB 配备了所有驱动电路,但没有预装 LED,这是为了让用户可以自由选择喜欢的 LED 颜色。安装 LED 时需要注意极性,LED 有一个较长的引脚是正极,要将其插入 PCB 上标有“+”的孔中。

安装时,可以一次安装一个 LED,也可以一次性安装所有 LED,这取决于你的焊接经验。将 LED 引脚弯曲,使其平贴在 PCB 上,然后翻转 PCB 进行焊接。焊接完成后,将引脚剪至离 PCB 约 2 - 3mm 的长度。

三、连接与库的使用

3.1 连接硬件

Trellis 只是一个 LED/键盘控制器,需要 Arduino 或类似设备来读取键盘数据并控制 LED 点亮。首先,从 GitHub 仓库下载 Trellis Arduino 库,将解压后的文件夹重命名为 Adafruit_Trellis,并将其放置在 Arduino 草图文件夹的 libraries 子文件夹中(如果是第一次安装库,可能需要创建该子文件夹),然后重启 IDE。

接下来连接 PCB,将 5 根连接引脚的实心线焊接并插入 Arduino。建议从 Uno 开始,连接方式如下:

  • 5V 连接到 Arduino 的 5V 电源引脚
  • GND 连接到 Arduino 的 GND 接地引脚
  • SCL 连接到 I2C 时钟引脚(在 Uno 上为 A5)
  • SDA 连接到 I2C 数据引脚(在 Uno 上为 A4)
  • INT 中断引脚连接到 A2(在示例代码中未使用,可选择不连接)

3.2 库的使用

3.2.1 创建对象

每个面板都有一个名为 Adafruit_Trellis 的对象,例如:

Adafruit_Trellis matrix = Adafruit_Trellis();

如果有多个 Adafruit_Trellis 对象,可以创建一个 TrellisSet 来一次性读取所有按钮和控制所有 LED。例如:

Adafruit_TrellisSet trellis = Adafruit_TrellisSet(&matrix0, &matrix1, &matrix2, &matrix3);

在调用 begin 方法启动 Adafruit_TrellisSet 对象时,需要传入与 PCB 对应的地址(地址范围从 0x70 到 0x77),例如:

trellis.begin(0x70, 0x71, 0x72, 0x73);

3.2.2 控制 LED

可以使用 trellis.setLED(n) 和 trellis.clrLED(n) 来设置或清除 LED,其中 n 是 LED 的编号,范围从 0 到(Trellis 数量 * 16 - 1)。设置和清除 LED 后,必须调用 trellis.writeDisplay() 来将数据发送到所有电路板。还可以使用 trellis.isLED(n) 来测试 LED 是否点亮。

3.2.3 读取开关

通过调用 trellis.readSwitches() 来读取按钮状态,如果自上次调用以来开关状态有变化,则返回 true,否则返回 false。读取开关后,可以使用 isKeyPressed(k)、trellis.justReleased(k) 和 trellis.justPressed(k) 来查询按键状态。

3.2.4 添加更多模块

如果要拼接更多的 Trellis PCB,需要确保每个模块有唯一的地址 ID。在 TrellisTest 草图中添加更多的 Adafruit_Trellis 对象,并更新 TrellisSet 以包含这些对象。同时,修改 begin() 调用以添加所有使用的地址。

四、拼接模块

可以在单个 2 线 I2C 总线上拼接最多 8 个 Trellis PCB,从而轻松构建 8x16 或 4x32 的面板。在拼接之前,最好先单独组装和测试每个模块,确保其正常工作。

拼接时,将模块按所需方式排列,确保 Adafruit 标志对齐。在相邻的引脚焊盘上焊接两个焊锡点,然后用烙铁将焊锡从一个焊盘拖到另一个焊盘,使其连接。为了获得更牢固的连接,可以使用一根小裸线跨接在焊盘上。重复此过程,直到连接完所有 5 个边缘引脚。最后,检查面板是否对齐,如有需要可以轻轻弯曲或重新加热使其变直。

五、地址设置

每个 Trellis 模块必须有唯一的地址。可以通过在每个面板背面的地址跳线上焊接来设置地址。Trellis 上的 HT16K33 驱动芯片默认 I2C 地址为 0x70,由于 I2C 总线上的每个设备必须有唯一的地址,因此避免地址冲突非常重要。

HT16K33 有 3 个地址调整引脚,每个引脚改变地址的一个二进制位,因此可以将地址设置为 0x70、0x71、0x72、0x73、0x74、0x75、0x76 或 0x77 中的任意一个。面板的地址不需要连续,只要唯一即可。

例如,如果 A2 和 A0 短路,地址为 0x70 + 4 + 1 = 0x75;如果只有 A1 短路,地址为 0x70 + 2 = 0x72。设置好唯一地址后,需要在 Arduino 代码中设置这些地址。

六、Python 和 CircuitPython 的使用

6.1 硬件连接

6.1.1 CircuitPython 微控制器连接

将 Trellis 连接到 CircuitPython 微控制器的方式与连接到 Arduino 类似。例如,将 Feather M0 与 Trellis 连接时,3V 连接到 Trellis 的 5V/VCC,GND 连接到 Trellis 的 GND,SCL 连接到 Trellis 的 SCL,SDA 连接到 Trellis 的 SDA。

6.1.2 Python 计算机连接

以 Raspberry Pi 为例,将 Pi 的 5V 连接到 Trellis 的 5V,Pi 的 GND 连接到 Trellis 的 GND,Pi 的 SCL 连接到 Trellis 的 SCL,Pi 的 SDA 连接到 Trellis 的 SDA。

6.2 库的安装

6.2.1 CircuitPython 库安装

首先确保运行的是适用于电路板的最新版本的 Adafruit CircuitPython。然后从 Adafruit 的 CircuitPython 库捆绑包中复制 adafruit_trellis.mpy 和 adafruit_bus_device 到 CIRCUITPY 驱动器的 lib 文件夹中。

6.2.2 Python 库安装

需要安装 Adafruit_Blinka 库以在 Python 中提供 CircuitPython 支持,可能还需要在平台上启用 I2C 并确保运行的是 Python 3。安装完成后,从命令行运行以下命令:

sudo pip3 install adafruit-circuitpython-trellis

6.3 使用示例

以下是一个简单的 Python 示例,用于初始化 Trellis、控制 LED 和读取按钮状态:

import time
import busio
from board import SCL, SDA
from adafruit_trellis import Trellis

i2c = busio.I2C(SCL, SDA)
trellis = Trellis(i2c)

# 打开所有 LED
trellis.led.fill(True)
time.sleep(2)

# 关闭所有 LED
trellis.led.fill(False)
time.sleep(2)

pressed_buttons = set()
while True:
    time.sleep(.1)
    just_pressed, released = trellis.read_buttons()
    for b in just_pressed:
        pressed_buttons.update(just_pressed)
        print('pressed:', b)
        trellis.led[b] = True
    for b in released:
        print('released:', b)
        pressed_buttons.difference_update(released)
        trellis.led[b] = False
    for b in pressed_buttons:
        print('still pressed:', b)
        trellis.led[b] = True

Adafruit Trellis 是一款功能强大、易于使用的开源背光键盘驱动系统,无论是在硬件连接还是软件编程方面都有很多值得探索的地方。你在使用 Trellis 的过程中遇到过哪些有趣的问题或挑战呢?欢迎在评论区分享。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分