fire hazard macropad

This commit is contained in:
DinosaurPotato534 2025-02-15 04:00:34 -05:00
parent 769de8429b
commit 92e2184abe
42 changed files with 316574 additions and 0 deletions

View file

@ -0,0 +1,16 @@
I was originally inspired to make this because I typically need to mute/deafen on calls a lot.
The hardest challenge I faced was attempting to CAD the case. I am very unfamiliar with CAD modeling.
BOM:
4x Cherry MX Switches
1x EC11 Encoder
6x SK6812 MINI Leds
1x 0.96in 128x32px OLED (SSD1306)
4x M3x20mm screws
1x Bottom case (3D Printed)
1x Top plate (3D Printed)
1x Seeed XIAO RP2040
4x Blank DSA Keycaps
![Render](./render.png)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,202 @@
0
SECTION
2
HEADER
9
$INSUNITS
70
4
0
ENDSEC
0
SECTION
2
TABLES
0
TABLE
2
LTYPE
0
LTYPE
72
65
70
64
2
CONTINUOUS
3
______
73
0
40
0
0
ENDTAB
0
TABLE
2
LAYER
0
ENDTAB
0
ENDSEC
0
SECTION
2
ENTITIES
0
LINE
8
0
10
3.025
20
-59.675
11
16.025
21
-59.675
0
LINE
8
0
10
3.025
20
-73.675
11
16.025
21
-73.675
0
LINE
8
0
10
2.525
20
-60.175
11
2.525
21
-73.175
0
LINE
8
0
10
16.525
20
-60.175
11
16.525
21
-73.175
0
ARC
8
0
10
3.025
20
-60.175
40
0.5
50
90
51
180
0
ARC
8
0
10
16.025
20
-60.175
40
0.5
50
0
51
90
0
ARC
8
0
10
3.025
20
-73.175
40
0.5
50
180
51
270
0
ARC
8
0
10
16.025
20
-73.175
40
0.5
50
270
51
0
0
LINE
8
0
10
0
20
-76.2
11
19.05
21
-76.2
0
LINE
8
0
10
0
20
-57.15
11
19.05
21
-57.15
0
LINE
8
0
10
0
20
-76.2
11
0
21
-57.15
0
LINE
8
0
10
19.05
20
-76.2
11
19.05
21
-57.15
0
ENDSEC
0
EOF

View file

@ -0,0 +1,37 @@
import time
import random
from displayio import Group
class DisplayManager:
def __init__(self, display, splash_group, media_info):
self.display = display
self.splash_group = splash_group
self.media_info = media_info
self.last_activity = time.monotonic()
self.last_shift = time.monotonic()
self.shift_interval = 30
self.timeout = 600
self.original_position = (splash_group.x, splash_group.y)
def update(self):
current_time = time.monotonic()
if current_time - self.last_shift > self.shift_interval:
self._shift_content()
self.last_shift = current_time
if current_time - self.last_activity > self.timeout:
if "No track playing" in self.media_info.get_media_info():
self.display.brightness = 0.1
else:
self.display.brightness = 1.0
else:
self.display.brightness = 1.0
def register_activity(self):
self.last_activity = time.monotonic()
self.display.brightness = 1.0
def _shift_content(self):
self.splash_group.x = self.original_position[0] + random.randint(-2, 2)
self.splash_group.y = self.original_position[1] + random.randint(-2, 2)

View file

@ -0,0 +1,23 @@
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners import DiodeOrientation
from kmk.scanners.keypad import KeysScanner
class MacroPad(KMKKeyboard):
def __init__(self):
# Key matrix pins
self.direct_pins = [
board.D5,
board.D6,
board.D7,
board.D8,
]
self.led1 = board.D9
self.led2 = board.D10
self.scanner = KeysScanner(
pins=self.direct_pins,
value_when_pressed=False,
pull=True,
)

View file

@ -0,0 +1,40 @@
import time
import board
import digitalio
from rainbowio import colorwheel
class LEDManager:
def __init__(self, rgb_pixels):
self.pixels = rgb_pixels
self.color_cycle = 0
self.last_update = time.monotonic()
self.update_interval = 0.05
self.mute_led = digitalio.DigitalInOut(board.D9)
self.mute_led.direction = digitalio.Direction.OUTPUT
self.deafen_led = digitalio.DigitalInOut(board.D10)
self.deafen_led.direction = digitalio.Direction.OUTPUT
self.is_muted = False
self.is_deafened = False
def update_chain(self):
current = time.monotonic()
if current - self.last_update > self.update_interval:
for i in range(4):
color_index = (self.color_cycle + (i * 64)) % 255
self.pixels[i] = colorwheel(color_index)
self.color_cycle = (self.color_cycle + 1) % 255
self.pixels.show()
self.last_update = current
def toggle_mute(self):
self.is_muted = not self.is_muted
self.mute_led.value = self.is_muted
def toggle_deafen(self):
self.is_deafened = not self.is_deafened
self.deafen_led.value = self.is_deafened
if self.is_deafened:
self.is_muted = True
self.mute_led.value = True

View file

@ -0,0 +1,107 @@
import board
import displayio
import terminalio
from adafruit_display_text import label
import adafruit_displayio_ssd1306
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.encoder import EncoderHandler
from kmk.modules.pixelmap import PixelMap
from kmk.extensions.RGB import RGB
from kmk.extensions.media_keys import MediaKeys
from kb import MacroPad
import time
from media_info import MediaInfo
from display_manager import DisplayManager
from led_manager import LEDManager
keyboard = MacroPad()
layers = Layers()
encoder_handler = EncoderHandler()
keyboard.modules = [layers, encoder_handler]
encoder_handler.pins = ((board.A2, board.A3, board.A1),)
encoder_handler.map = [(
((KC.VOLD, KC.VOLU, KC.MUTE),),
((KC.LEFT, KC.RIGHT, KC.ENTER),),
)]
rgb = RGB(
pixel_pin=board.NEOPIXEL,
num_pixels=4,
num_strands=1,
)
keyboard.extensions.append(rgb)
led_manager = LEDManager(rgb.pixels)
displayio.release_displays()
i2c = board.I2C()
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=64)
media = MediaInfo()
splash = displayio.Group()
album_group = displayio.Group(x=2, y=16)
album_bitmap = media.get_album_art()
album_palette = displayio.Palette(1)
album_palette[0] = 0xFFFFFF
album_tile = displayio.TileGrid(album_bitmap, pixel_shader=album_palette)
album_group.append(album_tile)
splash.append(album_group)
text_area = label.Label(
terminalio.FONT,
text="Waiting...",
color=0xFFFFFF,
x=36,
y=24,
scale=1
)
splash.append(text_area)
display.show(splash)
display_manager = DisplayManager(display, splash, media)
def update_display():
track_info = media.get_media_info()
text_area.text = track_info
album_bitmap = media.get_album_art()
album_tile.bitmap = album_bitmap
keyboard.keymap = [
[
KC.MT(KC.M, KC.LCTL(KC.LSFT)),
KC.MT(KC.D, KC.LCTL(KC.LSFT)),
KC.LGUI(KC.D),
KC.LCTL(KC.LSFT(KC.M)) + KC.LCTL(KC.LSFT(KC.D)) + KC.LGUI(KC.D),
],
[KC.LSFT, KC.LCTL, KC.LALT, KC.MO(1)]
]
def handle_key_event(key_event):
if key_event.pressed:
if key_event.key_number == 0:
led_manager.toggle_mute()
elif key_event.key_number == 1:
led_manager.toggle_deafen()
if __name__ == "__main__":
last_update = 0
while True:
keyboard.go()
current_time = time.monotonic()
key_event = keyboard.events.get()
if key_event:
display_manager.register_activity()
handle_key_event(key_event)
if current_time - last_update >= 5:
update_display()
last_update = current_time
display_manager.update()
led_manager.update_chain()

View file

@ -0,0 +1,29 @@
import usb_hid
from PIL import Image
import displayio
import adafruit_imageload
class MediaInfo:
def __init__(self):
self.current_track = "No track info"
self.default_image = self.create_default_image()
def create_default_image(self):
# Create a blank 32x32 bitmap
bitmap = displayio.Bitmap(32, 32, 1)
return bitmap
def get_media_info(self):
try:
consumer = usb_hid.devices[1]
if consumer:
return self.current_track
return "No track playing"
except:
return "Media Error"
def get_album_art(self):
try:
return self.default_image
except:
return self.default_image

View file

@ -0,0 +1,370 @@
(footprint "MODULE_DM-OLED096-636"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at -9.525 -13.97 0)
(layer "F.SilkS")
(uuid "7e7212f9-e047-40a7-957d-9d75dff2839c")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "MODULE_DM-OLED096-636"
(at 0.635 13.97 0)
(layer "F.Fab")
(uuid "b4d4ccf0-8fa9-449e-8875-0f43c4ccb85c")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "327d7d67-4cc6-496f-aae4-d8a52e3ad33f")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "44d966ca-b591-43fa-abd7-084ca15b9340")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "55c5ce1c-04ca-4599-a868-8ec72d21b7b0")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(attr through_hole)
(fp_line
(start -13 -13)
(end 13 -13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "9c62812f-bfbd-4b3c-a3a1-46e18d680177")
)
(fp_line
(start -13 13)
(end -13 -13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "b723a164-4c49-4b0d-9496-67031f78638b")
)
(fp_line
(start -7 11)
(end -7 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "7ddb0cd8-3715-419a-8c4b-c28165d9b8fa")
)
(fp_line
(start -7 13)
(end -13 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "92969aee-7932-4a43-8e5a-f0c790a30fe1")
)
(fp_line
(start 7 11)
(end -7 11)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "f53e6c35-61c0-4fc8-b9c1-10b0272ae1cc")
)
(fp_line
(start 7 13)
(end 7 11)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "2ec3b725-8068-4545-9d37-d6cc81f827cd")
)
(fp_line
(start 13 -13)
(end 13 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "d7c454bd-b567-455f-9101-26e8ab46a350")
)
(fp_line
(start 13 13)
(end 7 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "0d7aedf2-90ce-42f6-bd4f-f56cc2228e90")
)
(fp_circle
(center -4 -13.5)
(end -3.9 -13.5)
(stroke
(width 0.2)
(type solid)
)
(fill none)
(layer "F.SilkS")
(uuid "604bc2c2-0646-44e5-a562-16bf01eff296")
)
(fp_line
(start -13.25 -13.25)
(end 13.25 -13.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "c27c2d7c-fde7-42b1-a691-6e1340bf957b")
)
(fp_line
(start -13.25 13.25)
(end -13.25 -13.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "747ffc5e-a76e-4c01-b869-c69053f62497")
)
(fp_line
(start 13.25 -13.25)
(end 13.25 13.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "74dc61d1-6cb0-42bf-9e15-5d92e7782e64")
)
(fp_line
(start 13.25 13.25)
(end -13.25 13.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "e92eb786-c889-4c2d-8c6d-09a9c5df5d48")
)
(fp_line
(start -13 -13)
(end 13 -13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "eac64748-33df-4bb1-b917-51611c93b902")
)
(fp_line
(start -13 13)
(end -13 -13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "7c5f815c-7233-45fe-abb5-3a0f30199754")
)
(fp_line
(start -7 11)
(end 7 11)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "7c2d9fa3-0ce8-4f74-a37a-efa8eab80054")
)
(fp_line
(start -7 13)
(end -13 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "4713d769-0495-42fc-9bb0-6ca438fc0fff")
)
(fp_line
(start -7 13)
(end -7 11)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "10182d28-39e8-4cf0-99de-7de692dfe285")
)
(fp_line
(start 7 11)
(end 7 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "c42c9119-f089-4ec8-b6ed-f4d51b48eb44")
)
(fp_line
(start 13 -13)
(end 13 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "c5ef328d-a690-4bb3-adda-1d00b28bff06")
)
(fp_line
(start 13 13)
(end 7 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "6d6707f6-9b6b-4d50-8275-f72a8e17755f")
)
(fp_circle
(center -4 -13.5)
(end -3.9 -13.5)
(stroke
(width 0.2)
(type solid)
)
(fill none)
(layer "F.Fab")
(uuid "d0c4d446-2b4d-434c-9fe3-16f23045638a")
)
(pad "1" thru_hole rect
(at -3.81 -11.5)
(size 1.508 1.508)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "74b4afec-2c0f-441c-b0e3-c5eccc477669")
)
(pad "2" thru_hole circle
(at -1.27 -11.5)
(size 1.508 1.508)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "79003ed0-b938-4ac5-854b-9537b33e66a2")
)
(pad "3" thru_hole circle
(at 1.27 -11.5)
(size 1.508 1.508)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "456c3e03-51e1-4a58-9b8e-68d30b2a2070")
)
(pad "4" thru_hole circle
(at 3.81 -11.5)
(size 1.508 1.508)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "90bb6b7c-156c-44bb-8fd0-bc8a1d30431f")
)
(pad "S1" thru_hole circle
(at -11 -11)
(size 3 3)
(drill 2)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "8d34444f-8f15-4d3e-af4a-adffde6c55a9")
)
(pad "S2" thru_hole circle
(at 11 -11)
(size 3 3)
(drill 2)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "abb9a1f6-2b7d-40a0-a47d-92cdb9b14a3c")
)
(pad "S3" thru_hole circle
(at 11 11)
(size 3 3)
(drill 2)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "0c54fc9d-1728-4e08-82f8-71a253490e82")
)
(pad "S4" thru_hole circle
(at -11 11)
(size 3 3)
(drill 2)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "b73989a4-ad2b-4544-b5db-180d47bca05d")
)
(model "/Users/taranmittal/Documents/MITTAL1/PCB/CUSTOM LIBRARY.pretty/DM-OLED096-636/DM-OLED096-636.step"
(offset
(xyz 0 0 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 90 180 180)
)
)
)

View file

@ -0,0 +1,25 @@
name: 'Close stale issues and PRs'
on:
workflow_dispatch:
schedule:
- cron: '0 4 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Checkout script repository
uses: actions/checkout@v4
with:
repository: Seeed-Studio/sync-github-all-issues
path: ci
- name: Run script
run: ./ci/tools/stale.sh
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -0,0 +1,24 @@
name: Automate Issue Management
on:
issues:
types:
- opened
- edited
- assigned
- unassigned
- labeled
- unlabeled
- reopened
jobs:
add_issue_to_project:
runs-on: ubuntu-latest
steps:
- name: Add issue to GitHub Project
uses: actions/add-to-project@v1.0.2
with:
project-url: https://github.com/orgs/Seeed-Studio/projects/17
github-token: ${{ secrets.ISSUE_ASSEMBLE }}
labeled: bug
label-operator: NOT

View file

@ -0,0 +1,177 @@
# Welcome to Our Hardware Component Repository!
Dive into a world of innovation with our curated collection of hardware components straight from the electronics hub of Shenzhen, complemented by an array of parts supported by Seeed Studio. Our mission is to empower makers, developers, and hardware enthusiasts with a diverse repository that streamlines innovation and accelerates development.
The Seeed Fusion Open Parts Libraries (OPL) and the associated component libraries are provided and maintained by the [Seeed Studio Fusion](https://www.seeedstudio.com/fusion.html) team and the wider community for the turnkey [Seeed Fusion PCB Assembly (PCBA) Service](https://www.seeedstudio.com/fusion_pcb.html).
To accelerate PCB design and make it much more convenient, Seeed Fusion has provided these component libraries for KiCad. Prepared and scrutinized by our own engineers, these footprints can save you hours of design time and minimize potential production errors, so you can get on with PCB design with peace of mind.
## Highlights(Content of Tables)
- [**Preparatory Work: KiCad Download and Library Download**](#jump1)
- [**How to add and use Seeed OPL Footprint Libraries(Grove Vision AI V2)**](#jump2)
- [**How to add and use Seeed OPL Symbol Libraries(Grove Vision AI V2)**](#jump3)
- [**Scale up Your Creation With Seeed Studio Fusion**](#jump4)
- [**Co-Create with Seeed Studio**](#jump5)
- [**Resources**](#jump6)
![](/images/19.png)
## <span id="jump1">Preparatory Work: KiCad Download and Library Download </span>
1. You can refer to this [link](https://www.kicad.org/download/) to download the KiCad software.
2. You can [download](https://github.com/Seeed-Studio/OPL_Kicad_Library) the "OPL_KiCad_Library" or use command to clone:
```
git clone https://github.com/Seeed-Studio/OPL_Kicad_Library.git
```
![](/images/0.png)
## How to add and use Seeed OPL Footprint Libraries
### <span id="jump2"> Take Grove Vision AI V2 and XIAO footprint as an Example </span>
1. Open KiCad and refer to `File -> Open Project`.
![](./images/1.png)
2. Find the "Grove Vision AI V2 Library" and open the project:
![](./images/2.png)
3. Double click the "Grove Vision AI V2" PCB file and you will see below:
![](./images/3.png)
4. Refer to the `Preferences -> Manage Footprint Libraries`
![](./images/4.png)
5. Here is the existed footprint libraries and you can click the button below:
![](./images/5.png)
6. Find the "Grove Vision AI V2 Library" and open the folder that contains the boards footprint:
![](./images/6.png)
Now you have added the "XIAO footprint library"
7. You can click here to use the added library:
![](./images/7.png)
8. Search for "seeed" and you can check the footprint added:
![](./images/8.png)
9. Click "ok" and you can add the XIAO RP2040 footprint into the "Grove Vision VI V2".
![](./images/9.png)
10. You can change any component on the Grove Vision VI V2 module and make it your own project.
## <span id="jump3"> How to add and use Seeed OPL Symbol Libraries </span>
### Take Grove Vision AI V2 and Sensor-Transducer as an Example:
1. Open KiCad and refer to `File -> Open Project`.
![](./images/1.png)
2. Find the "Grove Vision AI V2 Library" and open the project:
![](./images/2.png)
3. Double click the "Grove Vision AI V2" .sch file and you will see below:
![](./images/10.png)
4. Refer to the `Preferences -> Manage Symbol Libraries`
![](./images/11.png)
5. Here is the existed symbol libraries and you can click the button below:
![](./images/12.png)
6. Find the "OPL_Sensor-Transducer" lib file:
![](./images/13.png)
Now you have added the "OPL_Sensor-Transducer library"
7. You can click here to use the added library:
![](./images/16.png)
8. Search for "OPL" and you can check the symbol added:
![](./images/14.png)
9. Click "ok" and you can add it into the "Grove Vision VI V2".
![](./images/15.png)
10. You can change any component on the Grove Vision VI V2 module and make it your own project.
## <span id="jump4"> Scale up Your Creation With Seeed Studio Fusion </span>
Seeed Studio Fusion serves as the comprehensive service platform for Seeed Studio, a global one-stop online platform offering PCB manufacturing, PCB assembly and hardware customization with global sourcing capability. Whether you need prototyping, mass production, custom solutions for open-source products, or the transformation of your creative ideas into profitable products, Seeed Studio Fusion can meet your requirements.
- [PCB/PCBA Design](https://www.seeedstudio.com/fusion_pcb.html)
- [Fusion Website](https://www.seeedstudio.com/fusion.html)
- **Email Contact**: fusion@seeed.io
## <span id="jump5"> Co-Create with Seeed Studio </span>
Leverage our Co-Create Program to transform your advanced prototype into a commercially successful product! This program is designed to optimize your product's journey from prototype to market by handling marketing, packaging, and distribution, allowing you to concentrate on refining your product. Upon acceptance of your prototype by Seeed, it will be showcased on the Seeed Studio marketplace. You'll receive a portion of the profits for each unit sold.
- [Application Form](https://docs.google.com/forms/d/e/1FAIpQLSe3A7_rIbn2OLO4JyJd_poGZodItCaRy6M6-3FtdqL3xG1Usg/viewform)
- [Co-Create Website](https://www.seeedstudio.com/co-create.html)
## <span id="jump6"> Resources </span>
- [Seeed Studio Open Parts List](https://files.seeedstudio.com/wiki/OPL/OPL_list.xlsx)
<!-- ## Even More Components!
![](https://blog.seeedstudio.com/wp-content/uploads/2018/12/1200_628-facebook-ad-copy.png)
As of last December, the [OPL has expanded](http://www.seeedstudio.com/blog/2018/12/04/just-what-you-wanted-for-xmas-introducing-the-new-shenzhen-open-parts-library-with-over-10000-parts/) from 800 components to more than 10,000 with the introduction of the new Shenzhen OPL. The original Seeed OPL is a catalog of components from Seeeds own inventory, we have the parts and, we have been using them in our own production processes for years. The Shenzhen OPL contains parts from Shenzhens biggest components distributor that Seeed can quickly order for turnkey PCBA. While the sources are different, both can be used together with the Seeed Fusion PCBA service and reduce the production time to 7 days.
But with all the new components and many more to come, we dont have enough resources to create the footprints for all of them. So, we are asking for help from you and the wider community to gradually build-up the library with us. As more and more users utilize the OPL and update the component libraries, the better the library will become for everyone.
To assist with the process, we have designated a team of engineers to maintain the library and GitHub repositories. They will also help draw some footprints and connect schematic symbols. But while our engineers do their best to check each footprint, with the sheer number of components, it is inevitable that some errors will be present. It is unavoidable. So to make up for it, Seeed Fusion has introduced a re-manufacture promise: If an error in the library requires the boards to be re-manufactured, then we will re-manufacture the corrected boards for you for free. By using this library, you accept this potential risk.
## Footprint Design Guidelines
It is still early days, and we have a lot of catching up to do. So, the most important additions at this stage are unique symbols and footprints and any generic footprints that are missing. Part-specific symbols that use generic footprints and slight variations of generic footprints can be added later.
For consistency and ease of use, we would greatly appreciate it if everyone followed the same guidelines for new additions to the library:
- The previous component libraries have been re-organized to match the Shenzhen OPLs categorization. Please add new entries to the relevant sub-library according to the online OPL librarys classification.
- Please take the time to study [KiCads own Library Convention](http://kicad-pcb.org/libraries/klc/) and ensure that the new footprints comply. Please refer to other footprints in the OPL or KiCads built-in footprints for reference.
- For MPN specific footprints, please follow the existing footprint naming convention for the footprint and name the corresponding schematic symbol with the manufacturer part number.
### Notes:
- #### The current version of the KiCad Library has been completely revamped in response to all the feedback we have recieved. Originally a direct import of the Eagle library, the old library did not comply with KiCad guidelines and placed features on the wrong layers. For the latest version, we have throroughly investigated the issues and revised (nearly) all of the footprints. Let us know if you think we missed something!
- The Seeed OPL component libraries have been updated to match the Shenzhen OPL categories to aid in merging the two libraries. Some components will have moved to new homes, but this has not been updated on the website OPL library yet. We will update this soon!
- Some of the original Seeed OPL KiCad component footprints have not been updated to match KiCads design guidelines yet. They are safe to use, and the pads are correct, but they may look a little ugly.
- Unlike previous versions, we have uploaded the files individually as opposed to a whole zip file. We hope this will help you follow standard GitHub workflow to contribute changes. (Thanks for your feedback!)
There is a lot to consider in managing a large library like this, so we would greatly appreciate any ideas and feedback regarding how we can make the library more user-friendly. Well be monitoring the discussion section and the designated OPL section in our forums. You are also welcome to let us know by [e-mail](mailto:fusion@seeed.cc).
We hope the new maintained library will prove to be an invaluable resource to all of our PCBA users and beyond.
## Resources
1. A KiCad Bill-of-Materials (BOM) plugin to follow SeeedStudio's Fusion PCBA assembly service's template, This plugin is set up to use the KiCad schematic's part data as it is provided in Seeed Studio's Open Parts Library (OPL) collection for KiCad. - https://github.com/imrehg/kicad-bom-seeedstudio
[![Analytics](https://ga-beacon.appspot.com/UA-46589105-3/OPL_Kicad_Library)](https://github.com/igrigorik/ga-beacon) -->

View file

@ -0,0 +1,425 @@
(footprint "XIAO-RP2040-SMD"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at -9.335 -11.5 0)
(layer "F.SilkS")
(uuid "a9f5f5dd-597c-45dd-b31d-a35c3963eed2")
(effects
(font
(size 0.78232 0.78232)
(thickness 0.10668)
)
(justify left bottom)
)
)
(property "Value" "XIAO-RP2040-SMD"
(at 0.055 -0.295 0)
(layer "F.Fab")
(uuid "2d66aca7-e0b3-44df-838e-be285890792c")
(effects
(font
(size 0.635 0.635)
(thickness 0.1016)
)
)
)
(property "Footprint" ""
(at -8.835 10.5 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "32a8cb35-59e0-4282-b955-c4626b0c3c52")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at -8.835 10.5 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "5173b428-b87b-497c-9fd1-0d444c2ced85")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at -8.835 10.5 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "ea7181c4-fdca-44f1-ad15-d0627f50a68e")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(fp_line
(start -8.835 8.513)
(end -8.835 -8.632)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "df0486b4-d04f-4201-a301-beede6e15862")
)
(fp_line
(start -6.93 10.418)
(end 7.04 10.418)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "f54abd8d-62ed-4b05-8e37-f29acdadc0f8")
)
(fp_line
(start -4.44 -10.537)
(end -4.436272 -11.447272)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "fead6daa-b9f4-4bd1-a131-b5d2cd3184de")
)
(fp_line
(start -3.936272 -11.947)
(end 4.059 -11.947)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "b90ae92d-7c1a-4689-bf64-c3528a3ea3ee")
)
(fp_line
(start 4.559 -11.447)
(end 4.559 -10.537)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "b540fbcc-8e06-44d7-95f6-8b142e4c90fb")
)
(fp_line
(start 7.04 -10.537)
(end -6.93 -10.537)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "2b80542c-5088-4f89-ae32-3400cf894ca1")
)
(fp_line
(start 8.945 8.513)
(end 8.945 -8.632)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "4cd8add0-8a8c-468d-ba6f-b86787c288af")
)
(fp_arc
(start -8.835 -8.636)
(mid -8.277038 -9.983038)
(end -6.93 -10.541)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "4d9bf7a5-4ab4-48bb-b8ac-0a5ce4523642")
)
(fp_arc
(start -6.93 10.418)
(mid -8.277038 9.860038)
(end -8.835 8.513)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "d09661c8-1ad3-40e9-8323-9dabc8f3f98b")
)
(fp_arc
(start -4.436272 -11.447272)
(mid -4.289724 -11.800644)
(end -3.936272 -11.947)
(stroke
(width 0.127)
(type default)
)
(layer "F.SilkS")
(uuid "7a58f637-14d7-4804-b127-f1d029b5d1e6")
)
(fp_arc
(start 4.059 -11.947)
(mid 4.412553 -11.800553)
(end 4.559 -11.447)
(stroke
(width 0.127)
(type default)
)
(layer "F.SilkS")
(uuid "d0bc8663-987f-4e2e-b464-096a547b822f")
)
(fp_arc
(start 7.04 -10.537)
(mid 8.387038 -9.979038)
(end 8.945 -8.632)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "77004ea5-53a4-40ab-b35c-7bdd22107e34")
)
(fp_arc
(start 8.945 8.513)
(mid 8.387038 9.860038)
(end 7.04 10.418)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "94189dc1-14b5-4f17-b9d3-0163ed99e583")
)
(fp_circle
(center -9.045 -10.121)
(end -9.045 -10.375)
(stroke
(width 0.5)
(type solid)
)
(fill solid)
(layer "F.SilkS")
(uuid "dc606cc5-10bc-4635-81d1-fa27b1e6b4e2")
)
(fp_circle
(center -7.771 -9.404)
(end -7.771 -9.658)
(stroke
(width 0.5)
(type solid)
)
(fill solid)
(layer "F.SilkS")
(uuid "2b5e2829-6d01-441f-9983-fc4a273ff483")
)
(fp_rect
(start 8.965 10.5)
(end -8.835 -10.5)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "e428eb56-00a2-4249-bb91-d2e5823b2899")
)
(fp_rect
(start -8.835 -10.5)
(end 8.965 10.5)
(stroke
(width 0.1)
(type default)
)
(fill none)
(layer "F.Fab")
(uuid "2133d927-559d-4615-ab92-732772c02d94")
)
(fp_circle
(center -7.751 -9.4)
(end -7.751 -9.654)
(stroke
(width 0.5)
(type solid)
)
(fill solid)
(layer "F.Fab")
(uuid "50e04a65-8ff2-4d1f-be98-2db48101e90a")
)
(pad "1" smd roundrect
(at -8 -7.62)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "c68f6b12-dcf5-46b1-b159-2eef9023b0ac")
)
(pad "2" smd roundrect
(at -8 -5.08)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "525b09fc-9099-4274-98c3-45f84d0591ab")
)
(pad "3" smd roundrect
(at -8 -2.54)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "99cc76a7-0a78-4868-871b-c214ecac5525")
)
(pad "4" smd roundrect
(at -8 0)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "8038b67b-b3bf-4a3e-b790-40857963c957")
)
(pad "5" smd roundrect
(at -8 2.54)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "84711cb2-d222-464e-bcd5-f76af75cc612")
)
(pad "6" smd roundrect
(at -8 5.08)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "aabcfc3b-fa72-4e48-95d1-d53474158cc0")
)
(pad "7" smd roundrect
(at -8 7.62)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "3e086061-1f3f-4b1e-9354-920126d40249")
)
(pad "8" smd roundrect
(at 8.165 7.62)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "974a7e29-b5d3-475c-b481-2bc14f5b3495")
)
(pad "9" smd roundrect
(at 8.165 5.08)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "a553cc0b-22bc-49aa-9fb7-680c812e8abd")
)
(pad "10" smd roundrect
(at 8.165 2.54)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "b650936d-c436-4d93-abb7-7957add5cfb1")
)
(pad "11" smd roundrect
(at 8.165 0)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "177728f1-7b02-41a6-9de4-bdaee546f6d9")
)
(pad "12" smd roundrect
(at 8.165 -2.54)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "eb6539ef-4d84-4ae5-bc4e-237dae21b9ef")
)
(pad "13" smd roundrect
(at 8.165 -5.08)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "c8744fbe-93c9-4c54-84bc-435357de679f")
)
(pad "14" smd roundrect
(at 8.165 -7.62)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "fd579d63-bbef-4609-9252-aad3f944a314")
)
(pad "15" smd roundrect
(at -1.088 8.64 270)
(size 2.5 1.1)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(thermal_bridge_angle 45)
(uuid "144d3c3d-6207-433c-9e61-4f75722af865")
)
(pad "16" smd roundrect
(at 1.452 8.64 270)
(size 2.5 1.1)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(thermal_bridge_angle 45)
(uuid "3780a4ef-348c-4241-b04b-2cb4f7127fa2")
)
(pad "17" smd circle
(at -1.088 -8.378)
(size 1.7 1.7)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "ad890579-1e55-4b71-9d59-080a59598896")
)
(pad "18" smd circle
(at 1.452 -8.378)
(size 1.7 1.7)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "25d6fdae-01ac-4ca4-8702-55badc8bcbc8")
)
(pad "19" smd circle
(at -1.088 -5.838)
(size 1.7 1.7)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "e73ae295-736f-4acf-8ee1-0c120ebcebea")
)
(pad "20" smd circle
(at 1.452 -5.838)
(size 1.7 1.7)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "7adfba87-f861-42a5-bb73-c3f9fac53180")
)
)

View file

@ -0,0 +1,80 @@
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
(symbol "MOUDLE-SEEEDUINO-XIAO" (in_bom yes) (on_board yes)
(property "Reference" "U" (at -16.51 11.43 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "MOUDLE-SEEEDUINO-XIAO" (at -3.81 -11.43 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at -16.51 2.54 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at -16.51 2.54 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "MOUDLE-SEEEDUINO-XIAO_0_1"
(rectangle (start -16.51 10.16) (end 19.05 -10.16)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "MOUDLE-SEEEDUINO-XIAO_1_1"
(pin passive line (at -19.05 7.62 0) (length 2.54)
(name "PA02_A0_D0" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 -2.54 180) (length 2.54)
(name "PA5_A9_D9_MISO" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 0 180) (length 2.54)
(name "PA6_A10_D10_MOSI" (effects (font (size 1.27 1.27))))
(number "11" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 2.54 180) (length 2.54)
(name "3V3" (effects (font (size 1.27 1.27))))
(number "12" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 5.08 180) (length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "13" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 7.62 180) (length 2.54)
(name "5V" (effects (font (size 1.27 1.27))))
(number "14" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 5.08 0) (length 2.54)
(name "PA4_A1_D1" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 2.54 0) (length 2.54)
(name "PA10_A2_D2" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.0468 0.0151 0) (length 2.54)
(name "PA11_A3_D3" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 -2.54 0) (length 2.54)
(name "PA8_A4_D4_SDA" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 -5.08 0) (length 2.54)
(name "PA9_A5_D5_SCL" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 -7.62 0) (length 2.54)
(name "PB08_A6_D6_TX" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 -7.62 180) (length 2.54)
(name "PB09_A7_D7_RX" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 -5.08 180) (length 2.54)
(name "PA7_A8_D8_SCK" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
)
)
)

View file

@ -0,0 +1,80 @@
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
(symbol "MOUDLE-SEEEDUINO-XIAO" (in_bom yes) (on_board yes)
(property "Reference" "U" (at -16.51 11.43 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "MOUDLE-SEEEDUINO-XIAO" (at -3.81 -11.43 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at -16.51 2.54 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at -16.51 2.54 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "MOUDLE-SEEEDUINO-XIAO_0_1"
(rectangle (start -16.51 10.16) (end 19.05 -10.16)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "MOUDLE-SEEEDUINO-XIAO_1_1"
(pin passive line (at -19.05 7.62 0) (length 2.54)
(name "PA02_A0_D0" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 -2.54 180) (length 2.54)
(name "PA5_A9_D9_MISO" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 0 180) (length 2.54)
(name "PA6_A10_D10_MOSI" (effects (font (size 1.27 1.27))))
(number "11" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 2.54 180) (length 2.54)
(name "3V3" (effects (font (size 1.27 1.27))))
(number "12" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 5.08 180) (length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "13" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 7.62 180) (length 2.54)
(name "5V" (effects (font (size 1.27 1.27))))
(number "14" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 5.08 0) (length 2.54)
(name "PA4_A1_D1" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 2.54 0) (length 2.54)
(name "PA10_A2_D2" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 0 0) (length 2.54)
(name "PA11_A3_D3" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 -2.54 0) (length 2.54)
(name "PA8_A4_D4_SDA" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 -5.08 0) (length 2.54)
(name "PA9_A5_D5_SCL" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -19.05 -7.62 0) (length 2.54)
(name "PB08_A6_D6_TX" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 -7.62 180) (length 2.54)
(name "PB09_A7_D7_RX" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 21.59 -5.08 180) (length 2.54)
(name "PA7_A8_D8_SCK" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
)
)
)

View file

@ -0,0 +1,33 @@
(footprint "MOUDLE14P-2.54-21X17.8MM" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 0)
(attr through_hole)
(fp_text reference "REF**" (at 2.54 -10.16 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 095a372f-9f31-4250-a321-c0000b6622a5)
)
(fp_text value "MOUDLE14P-2.54-21X17.8MM" (at 0 10.16 unlocked) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp f196aca9-6148-4d59-893a-dc3f267dc99e)
)
(fp_text user "${REFERENCE}" (at 0 -10.16 unlocked) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp a9cd3fc5-5172-4399-b322-d1cddd92bb36)
)
(fp_rect (start -10.5 -8.89) (end 10.5 8.89) (layer "F.SilkS") (width 0.12) (fill none) (tstamp 2848380e-1aa8-4183-a0a3-cfc0c941bc60))
(fp_rect (start 4.57 -4.5) (end 11.9 4.5) (layer "F.SilkS") (width 0.12) (fill none) (tstamp da27c870-b593-4b10-b9df-3aee53ab4459))
(pad "1" thru_hole rect (at 7.62 -7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 0c8eb2bc-ecde-4d91-b5b1-7e80c298a0e4))
(pad "2" thru_hole circle (at 5.08 -7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp dc1dcec1-476b-47d2-a2f3-83ae28e4e62a))
(pad "3" thru_hole circle (at 2.54 -7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 23901e3c-df1d-479c-aba7-7fda808e4902))
(pad "4" thru_hole circle (at 0 -7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 4681b869-0c10-4df7-a79a-581d0e53c827))
(pad "5" thru_hole circle (at -2.54 -7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 43e5ac53-e741-439f-807d-3919fa9cdb34))
(pad "6" thru_hole circle (at -5.08 -7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp ec5dce95-f507-4229-96b1-c2c841b239a3))
(pad "7" thru_hole circle (at -7.62 -7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp f2dfd457-779e-4651-8f97-79abc01c8725))
(pad "8" thru_hole circle (at -7.62 7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 6feca75d-a16a-4acf-8534-57bb924b0929))
(pad "9" thru_hole circle (at -5.08 7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 572ac95f-90fa-4d22-a045-8259b2b84a34))
(pad "10" thru_hole circle (at -2.54 7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 09f99e1c-c6ae-44ec-968b-c80e895f427d))
(pad "11" thru_hole circle (at 0 7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp f2305822-9eac-47dd-a98e-ff3fc63c904c))
(pad "12" thru_hole circle (at 2.54 7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 55b767dc-c4ff-4640-858e-d1aa6fd5073e))
(pad "13" thru_hole circle (at 5.08 7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 81ba8c43-1bea-4636-b168-b29f894e8f48))
(pad "14" thru_hole circle (at 7.62 7.62) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask) (tstamp 048b9374-cfe3-48fa-afc5-71793b8c3942))
)

View file

@ -0,0 +1,32 @@
(footprint "MOUDLE14P-SMD-2.54-21X17.8MM" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 0)
(attr smd)
(fp_text reference "REF**" (at 2.25 -21.5 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 897541eb-b465-4e27-8a4b-91f62491cb56)
)
(fp_text value "MOUDLE14P-SMD-2.54-21X17.8MM" (at 13.5 1.25 unlocked) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 4f0a284e-b888-48ac-a859-5fbf326a2640)
)
(fp_text user "${REFERENCE}" (at 6.25 -21.5 unlocked) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 2c3f10c0-3ec4-4016-a1d4-a5b8fe3722cb)
)
(fp_rect (start 0 -21) (end 17.8 0) (layer "F.SilkS") (width 0.12) (fill none) (tstamp 21f22ca0-17a9-450c-bfaf-d9d644fba1ad))
(pad "1" smd roundrect (at 0.835 -18.12) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp cd57ae13-688b-44b5-a77b-18aa4b697dd4))
(pad "2" smd roundrect (at 0.835 -15.58) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 94a66f45-611f-48c3-b652-51cc405acba3))
(pad "3" smd roundrect (at 0.835 -13.04) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 569bc9b3-a9f7-4940-bebd-2d85ec7d11b5))
(pad "4" smd roundrect (at 0.835 -10.5) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 3ba8047c-e52e-491f-b9ef-2854e9b50b2f))
(pad "5" smd roundrect (at 0.835 -7.96) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 425241bf-425c-4446-aa9d-efe21dd3395f))
(pad "6" smd roundrect (at 0.835 -5.42) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp cf207411-edae-473f-bbd9-328bad7df21e))
(pad "7" smd roundrect (at 0.835 -2.88) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 6766234c-a50b-47b2-8a1b-c2d37fd3d5b7))
(pad "8" smd roundrect (at 17 -2.88) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp c1557ea3-1341-4c47-82b2-04f390e90da0))
(pad "9" smd roundrect (at 17 -5.42) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp cfcd40a1-5b80-4f29-97e6-f468da0810ff))
(pad "10" smd roundrect (at 17 -7.96) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 4391e9df-1a39-4dba-9896-dc2c87fd189a))
(pad "11" smd roundrect (at 17 -10.5) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 5d2cf5ba-c347-49b0-bbaa-71df0d342deb))
(pad "12" smd roundrect (at 17 -13.04) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 61b05e71-c84c-4336-853c-639e83a41cac))
(pad "13" smd roundrect (at 17 -15.58) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 073e8676-095e-4b42-b37f-7fda43a7177c))
(pad "14" smd roundrect (at 17 -18.12) (size 2.75 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp b883b35d-47b2-4ec2-8ddc-3e5a1510d4d7))
)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,7 @@
(fp_lib_table
(version 7)
(lib (name "OPL")(type "KiCad")(uri "${KIPRJMOD}/OPL_Kicad_Library-master/Seeed Studio XIAO Series Library")(options "")(descr ""))
(lib (name "XIAO")(type "KiCad")(uri "${KIPRJMOD}/Seeeduino-xiao-rp2040-KiCAD-Library/XIAO_PCB.pretty")(options "")(descr ""))
(lib (name "OLED")(type "KiCad")(uri "${KIPRJMOD}/OLED")(options "")(descr ""))
(lib (name "models")(type "KiCad")(uri "${KIPRJMOD}/models.pretty")(options "")(descr ""))
)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 40,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "ffffc3c_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "macropad.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,584 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.1,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "macropad.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"a2876b9e-1cdb-4ad0-a2b0-3cd14c585726",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,279 @@
(footprint "LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(descr "3.5mm x 3.5mm PLCC4 Addressable RGB LED NeoPixel, https://cdn-shop.adafruit.com/product-files/2686/SK6812MINI_REV.01-1-2.pdf")
(tags "LED RGB NeoPixel Mini PLCC-4 3535")
(property "Reference" "REF**"
(at 0 -2.75 0)
(layer "F.SilkS")
(uuid "5a11e3a0-df26-4e1e-8b8f-efb3ead5086b")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm"
(at 0 3.25 0)
(layer "F.Fab")
(uuid "e06e35b3-e0aa-45c8-9c4c-d6ce7c824750")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "d59d046c-c730-4aa6-a088-ed1f36e076fb")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "d1d514e2-b75a-404f-8c89-2ef6fd656f2a")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "c9b5b815-b514-4091-86c6-0a3e60819067")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(attr smd)
(fp_line
(start -2.8 -2)
(end -2.8 2)
(stroke
(width 0.12)
(type default)
)
(layer "F.SilkS")
(uuid "43adbbe1-6a98-41f5-898f-b826717c1132")
)
(fp_line
(start -2.8 -2)
(end 2.8 -2)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "ac05fd60-c7fe-4ebc-afdb-bb03a9433555")
)
(fp_line
(start -2.8 2)
(end 2.2 2)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "8b9d6599-795e-4cf4-ba1d-7057604a3bdf")
)
(fp_line
(start 2.8 1.4)
(end 2.2 2)
(stroke
(width 0.12)
(type default)
)
(layer "F.SilkS")
(uuid "512f89f0-756e-4428-87af-703f4214a630")
)
(fp_line
(start 2.8 1.4)
(end 2.8 -2)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "a7837fa2-fcb5-49a9-a046-9741da620195")
)
(fp_line
(start -2.8 -2)
(end -2.8 2)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "72992e62-bce9-4f6e-9406-5d626166f6e0")
)
(fp_line
(start -2.8 2)
(end 2.8 2)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "3407ab69-504c-4f7b-94c8-4b7d0f807fa5")
)
(fp_line
(start 2.8 -2)
(end -2.8 -2)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "618d036d-5236-45e6-9dcf-8d85a1b73eed")
)
(fp_line
(start 2.8 2)
(end 2.8 -2)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "b6c113c4-050a-4055-bd0b-88b68607e013")
)
(fp_line
(start -1.75 -1.75)
(end -1.75 1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "4bf15588-8141-4eed-9b3c-61f1a0af2e71")
)
(fp_line
(start -1.75 1.75)
(end 1.75 1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "edf08d44-29ab-41d0-b891-6908b9c35b30")
)
(fp_line
(start 1.75 -1.75)
(end -1.75 -1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "d059dc71-e93e-4c09-98bd-8587f16853ad")
)
(fp_line
(start 1.75 0.75)
(end 0.75 1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "f77e6c0b-1ee4-4a22-9ff5-561d1f4206d5")
)
(fp_line
(start 1.75 1.75)
(end 1.75 -1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "697d65c4-63d2-4b60-b801-a3800fcf954c")
)
(fp_circle
(center 0 0)
(end 0 -1.5)
(stroke
(width 0.1)
(type solid)
)
(fill none)
(layer "F.Fab")
(uuid "974be58e-74de-4e07-947f-98852335e05c")
)
(fp_text user "1"
(at -3.2 -0.875 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "8e37004e-c9dd-4a9a-adc3-b571b53d17d6")
(effects
(font
(size 0.8 0.8)
(thickness 0.15)
)
)
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "44968780-5c6b-43a0-9bc4-76ab950d885b")
(effects
(font
(size 0.5 0.5)
(thickness 0.1)
)
)
)
(pad "1" smd rect
(at -1.75 -0.875)
(size 1.6 0.85)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "3aa8cc5d-54e5-4038-aae5-88b9a0043bb9")
)
(pad "2" smd rect
(at -1.75 0.875)
(size 1.6 0.85)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "9a5b3312-e555-4b96-8d26-1be1020a0691")
)
(pad "3" smd rect
(at 1.75 0.875)
(size 1.6 0.85)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "80a855b4-41b1-40fc-89fa-5d46a84d59c1")
)
(pad "4" smd rect
(at 1.75 -0.875)
(size 1.6 0.85)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "bf51f97d-70b8-403d-b9e7-1c48bc155b9d")
)
(model "${KIPRJMOD}/modelFiles/SK6812_Mini.step"
(offset
(xyz 0 0 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 90 180 0)
)
)
)

View file

@ -0,0 +1,370 @@
(footprint "MODULE_DM-OLED096-636"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at -9.525 -13.97 0)
(layer "F.SilkS")
(uuid "7e7212f9-e047-40a7-957d-9d75dff2839c")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "MODULE_DM-OLED096-636"
(at 0.635 13.97 0)
(layer "F.Fab")
(uuid "b4d4ccf0-8fa9-449e-8875-0f43c4ccb85c")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "327d7d67-4cc6-496f-aae4-d8a52e3ad33f")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "44d966ca-b591-43fa-abd7-084ca15b9340")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "55c5ce1c-04ca-4599-a868-8ec72d21b7b0")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(attr through_hole)
(fp_line
(start -13 -13)
(end 13 -13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "9c62812f-bfbd-4b3c-a3a1-46e18d680177")
)
(fp_line
(start -13 13)
(end -13 -13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "b723a164-4c49-4b0d-9496-67031f78638b")
)
(fp_line
(start -7 11)
(end -7 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "7ddb0cd8-3715-419a-8c4b-c28165d9b8fa")
)
(fp_line
(start -7 13)
(end -13 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "92969aee-7932-4a43-8e5a-f0c790a30fe1")
)
(fp_line
(start 7 11)
(end -7 11)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "f53e6c35-61c0-4fc8-b9c1-10b0272ae1cc")
)
(fp_line
(start 7 13)
(end 7 11)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "2ec3b725-8068-4545-9d37-d6cc81f827cd")
)
(fp_line
(start 13 -13)
(end 13 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "d7c454bd-b567-455f-9101-26e8ab46a350")
)
(fp_line
(start 13 13)
(end 7 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "0d7aedf2-90ce-42f6-bd4f-f56cc2228e90")
)
(fp_circle
(center -4 -13.5)
(end -3.9 -13.5)
(stroke
(width 0.2)
(type solid)
)
(fill none)
(layer "F.SilkS")
(uuid "604bc2c2-0646-44e5-a562-16bf01eff296")
)
(fp_line
(start -13.25 -13.25)
(end 13.25 -13.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "c27c2d7c-fde7-42b1-a691-6e1340bf957b")
)
(fp_line
(start -13.25 13.25)
(end -13.25 -13.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "747ffc5e-a76e-4c01-b869-c69053f62497")
)
(fp_line
(start 13.25 -13.25)
(end 13.25 13.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "74dc61d1-6cb0-42bf-9e15-5d92e7782e64")
)
(fp_line
(start 13.25 13.25)
(end -13.25 13.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "e92eb786-c889-4c2d-8c6d-09a9c5df5d48")
)
(fp_line
(start -13 -13)
(end 13 -13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "eac64748-33df-4bb1-b917-51611c93b902")
)
(fp_line
(start -13 13)
(end -13 -13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "7c5f815c-7233-45fe-abb5-3a0f30199754")
)
(fp_line
(start -7 11)
(end 7 11)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "7c2d9fa3-0ce8-4f74-a37a-efa8eab80054")
)
(fp_line
(start -7 13)
(end -13 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "4713d769-0495-42fc-9bb0-6ca438fc0fff")
)
(fp_line
(start -7 13)
(end -7 11)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "10182d28-39e8-4cf0-99de-7de692dfe285")
)
(fp_line
(start 7 11)
(end 7 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "c42c9119-f089-4ec8-b6ed-f4d51b48eb44")
)
(fp_line
(start 13 -13)
(end 13 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "c5ef328d-a690-4bb3-adda-1d00b28bff06")
)
(fp_line
(start 13 13)
(end 7 13)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "6d6707f6-9b6b-4d50-8275-f72a8e17755f")
)
(fp_circle
(center -4 -13.5)
(end -3.9 -13.5)
(stroke
(width 0.2)
(type solid)
)
(fill none)
(layer "F.Fab")
(uuid "d0c4d446-2b4d-434c-9fe3-16f23045638a")
)
(pad "1" thru_hole rect
(at -3.81 -11.5)
(size 1.508 1.508)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "74b4afec-2c0f-441c-b0e3-c5eccc477669")
)
(pad "2" thru_hole circle
(at -1.27 -11.5)
(size 1.508 1.508)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "79003ed0-b938-4ac5-854b-9537b33e66a2")
)
(pad "3" thru_hole circle
(at 1.27 -11.5)
(size 1.508 1.508)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "456c3e03-51e1-4a58-9b8e-68d30b2a2070")
)
(pad "4" thru_hole circle
(at 3.81 -11.5)
(size 1.508 1.508)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "90bb6b7c-156c-44bb-8fd0-bc8a1d30431f")
)
(pad "S1" thru_hole circle
(at -11 -11)
(size 3 3)
(drill 2)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "8d34444f-8f15-4d3e-af4a-adffde6c55a9")
)
(pad "S2" thru_hole circle
(at 11 -11)
(size 3 3)
(drill 2)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "abb9a1f6-2b7d-40a0-a47d-92cdb9b14a3c")
)
(pad "S3" thru_hole circle
(at 11 11)
(size 3 3)
(drill 2)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "0c54fc9d-1728-4e08-82f8-71a253490e82")
)
(pad "S4" thru_hole circle
(at -11 11)
(size 3 3)
(drill 2)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "b73989a4-ad2b-4544-b5db-180d47bca05d")
)
(model "${KIPRJMOD}/modelFiles/SSD1306_OLED_Display(128x64).step"
(offset
(xyz 0 0 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 0 0 0)
)
)
)

View file

@ -0,0 +1,410 @@
(footprint "RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(descr "Alps rotary encoder, EC12E... with switch, vertical shaft, http://www.alps.com/prod/info/E/HTML/Encoder/Incremental/EC11/EC11E15204A3.html")
(tags "rotary encoder")
(property "Reference" "REF**"
(at 2.8 -4.7 0)
(layer "F.SilkS")
(uuid "d8b4ea29-2263-46ad-8021-f771c5544363")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm"
(at 7.5 10.4 0)
(layer "F.Fab")
(uuid "866aae23-5c15-48ba-bfed-550261ad4b22")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "8b2c011c-d780-4e6c-8f38-459b73a40f22")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "247c9c81-a67d-4b1c-ae9a-825f3b5bda25")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "95c86b0a-83b1-493d-96eb-ec1eff5e46ef")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(attr through_hole)
(fp_line
(start -0.3 -1.6)
(end 0.3 -1.6)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "eb6bc121-e4ef-4bd7-b1f7-cef9e9d1336a")
)
(fp_line
(start 0 -1.3)
(end -0.3 -1.6)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "257d0db5-2f0a-4d4e-b554-666082832778")
)
(fp_line
(start 0.3 -1.6)
(end 0 -1.3)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "1316dd25-1186-48bb-a3e1-1d81c802ee31")
)
(fp_line
(start 1.4 -3.4)
(end 1.4 8.4)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "e55d0412-8cf8-40a1-b486-42a944d16e9e")
)
(fp_line
(start 5.5 -3.4)
(end 1.4 -3.4)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "a7fb7a53-a2c2-4cf1-ad92-4410de1a3837")
)
(fp_line
(start 5.5 8.4)
(end 1.4 8.4)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "346a86a1-27c6-4070-961d-3c29923c90ed")
)
(fp_line
(start 7 2.5)
(end 8 2.5)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "cce2f411-0d22-423c-8469-56951e0ad821")
)
(fp_line
(start 7.5 2)
(end 7.5 3)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "9608e049-7f11-464d-a72d-969d9208fa2d")
)
(fp_line
(start 9.5 -3.4)
(end 13.6 -3.4)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "3738bbc6-3dec-447d-b9f6-51dce9398a40")
)
(fp_line
(start 13.6 -3.4)
(end 13.6 -1)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "48f4c365-33de-431d-8e79-37217d5a2e49")
)
(fp_line
(start 13.6 1.2)
(end 13.6 3.8)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "d5325dd6-9df8-480b-803d-c3a2f184c965")
)
(fp_line
(start 13.6 6)
(end 13.6 8.4)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "5a1b105a-8dc6-4e81-bda7-58d66232de32")
)
(fp_line
(start 13.6 8.4)
(end 9.5 8.4)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "0aa32db9-eaba-443c-a81e-37086835483c")
)
(fp_circle
(center 7.5 2.5)
(end 10.5 2.5)
(stroke
(width 0.12)
(type solid)
)
(fill none)
(layer "F.SilkS")
(uuid "f305ebc3-91eb-4171-8e14-3b9229bea43d")
)
(fp_line
(start -1.5 -4.6)
(end -1.5 9.6)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "1ddaac48-dd83-4e9b-9646-6c54b63f87ec")
)
(fp_line
(start -1.5 -4.6)
(end 16 -4.6)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "abfc3ad7-298f-4478-820d-4b72669f2d59")
)
(fp_line
(start 16 9.6)
(end -1.5 9.6)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "0be44551-91de-4260-8ade-4f01ab98ebcd")
)
(fp_line
(start 16 9.6)
(end 16 -4.6)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "39c21cf9-91dd-4df0-afd4-a9a499233201")
)
(fp_line
(start 1.5 -2.2)
(end 2.5 -3.3)
(stroke
(width 0.12)
(type solid)
)
(layer "F.Fab")
(uuid "e23578ca-e767-4b6b-8064-383356a38b5c")
)
(fp_line
(start 1.5 8.3)
(end 1.5 -2.2)
(stroke
(width 0.12)
(type solid)
)
(layer "F.Fab")
(uuid "b7b26ca6-a96f-403e-b33d-36a90d2074bb")
)
(fp_line
(start 2.5 -3.3)
(end 13.5 -3.3)
(stroke
(width 0.12)
(type solid)
)
(layer "F.Fab")
(uuid "f1b5e328-116a-4896-a9b7-046e98f07963")
)
(fp_line
(start 4.5 2.5)
(end 10.5 2.5)
(stroke
(width 0.12)
(type solid)
)
(layer "F.Fab")
(uuid "7d66f1f3-dd2f-4fdc-a925-295b71f13747")
)
(fp_line
(start 7.5 -0.5)
(end 7.5 5.5)
(stroke
(width 0.12)
(type solid)
)
(layer "F.Fab")
(uuid "73b4c092-b9db-4b55-8212-faa2c449dff2")
)
(fp_line
(start 13.5 -3.3)
(end 13.5 8.3)
(stroke
(width 0.12)
(type solid)
)
(layer "F.Fab")
(uuid "3fd5902a-2495-47d0-93d8-7e64e1be2512")
)
(fp_line
(start 13.5 8.3)
(end 1.5 8.3)
(stroke
(width 0.12)
(type solid)
)
(layer "F.Fab")
(uuid "d921efc9-dd01-43de-8ce8-262460b347ab")
)
(fp_circle
(center 7.5 2.5)
(end 10.5 2.5)
(stroke
(width 0.12)
(type solid)
)
(fill none)
(layer "F.Fab")
(uuid "5e887882-c6b8-4374-9393-8af20b9e77ea")
)
(fp_text user "${REFERENCE}"
(at 11.1 6.3 0)
(layer "F.Fab")
(uuid "182ff091-1254-48a3-80ef-6b6995a78ef9")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "A" thru_hole rect
(at 0 0)
(size 2 2)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "d3f14617-ec5a-46a6-8a47-cd2e3697c97b")
)
(pad "B" thru_hole circle
(at 0 5)
(size 2 2)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "33d993c4-f3cd-42d4-8b73-94f587efeacb")
)
(pad "C" thru_hole circle
(at 0 2.5)
(size 2 2)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "9d27ed1a-8d2e-44a0-95d3-6a95bac98afe")
)
(pad "MP" thru_hole rect
(at 7.5 -3.1)
(size 3.2 2)
(drill oval 2.8 1.5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "fb5c326d-33d2-4f06-ad1b-af7de80ab720")
)
(pad "MP" thru_hole rect
(at 7.5 8.1)
(size 3.2 2)
(drill oval 2.8 1.5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "581c338d-e280-4cca-b269-6389c2f86f18")
)
(pad "S1" thru_hole circle
(at 14.5 5)
(size 2 2)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "7d67148e-6a33-40ce-8b6b-e59f7dfe7253")
)
(pad "S2" thru_hole circle
(at 14.5 0)
(size 2 2)
(drill 1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "e4806ec9-285f-4aec-99da-67ca111daa66")
)
(model "${KIPRJMOD}/modelFiles/RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm.step"
(offset
(xyz 0 0 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 0 0 0)
)
)
)

View file

@ -0,0 +1,289 @@
(footprint "SW_Cherry_MX_1.00u_PCB"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(descr "Cherry MX keyswitch, 1.00u, PCB mount, http://cherryamericas.com/wp-content/uploads/2014/12/mx_cat.pdf")
(tags "Cherry MX keyswitch 1.00u PCB")
(property "Reference" "REF**"
(at -2.54 -2.794 0)
(layer "F.SilkS")
(uuid "c03327f2-012e-4fbf-80a8-a7d4b49f6df2")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "SW_Cherry_MX_1.00u_PCB"
(at -2.54 12.954 0)
(layer "F.Fab")
(uuid "729da0de-a38f-4970-a9aa-b4dc70f92f16")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "acaa596e-914d-4cd8-ab3a-52e2a0d3f270")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "0037b9f5-583a-41f5-9b90-1b725631a7a1")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "482871a4-3f1f-46ca-bcff-19c31bbdd9f3")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(attr through_hole)
(fp_line
(start -9.525 -1.905)
(end 4.445 -1.905)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "f2eeb289-74f8-46da-801f-0aafb6af9995")
)
(fp_line
(start -9.525 12.065)
(end -9.525 -1.905)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "4f02a351-9568-48f2-b04f-076667160b2f")
)
(fp_line
(start 4.445 -1.905)
(end 4.445 12.065)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "2251a3c2-fb48-4ef6-9776-e36c07a3aa92")
)
(fp_line
(start 4.445 12.065)
(end -9.525 12.065)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "b287663f-61be-4819-9523-1331a964301e")
)
(fp_line
(start -12.065 -4.445)
(end 6.985 -4.445)
(stroke
(width 0.15)
(type solid)
)
(layer "Dwgs.User")
(uuid "e73067c5-0bf4-4f44-be33-c28f7b06adae")
)
(fp_line
(start -12.065 14.605)
(end -12.065 -4.445)
(stroke
(width 0.15)
(type solid)
)
(layer "Dwgs.User")
(uuid "17a37dc2-1fc7-4198-bc2d-40147f9021f4")
)
(fp_line
(start 6.985 -4.445)
(end 6.985 14.605)
(stroke
(width 0.15)
(type solid)
)
(layer "Dwgs.User")
(uuid "707f604a-7f3f-405f-8b89-2e17dbf94ec1")
)
(fp_line
(start 6.985 14.605)
(end -12.065 14.605)
(stroke
(width 0.15)
(type solid)
)
(layer "Dwgs.User")
(uuid "68ba3686-54f3-42b1-847b-d7576a207bac")
)
(fp_line
(start -9.14 -1.52)
(end 4.06 -1.52)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "3a139f5a-3d7f-49bd-b57b-3b3b63bd6f5a")
)
(fp_line
(start -9.14 11.68)
(end -9.14 -1.52)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "9d9006b1-c0da-4488-b6c4-3bf750600acd")
)
(fp_line
(start 4.06 -1.52)
(end 4.06 11.68)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "12a34f16-8b02-4a16-8e95-de8109927f8a")
)
(fp_line
(start 4.06 11.68)
(end -9.14 11.68)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "cb893612-c825-49d3-b7ba-e7e76ca792b9")
)
(fp_line
(start -8.89 -1.27)
(end 3.81 -1.27)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "101f121f-d715-41de-b65e-0eb643435073")
)
(fp_line
(start -8.89 11.43)
(end -8.89 -1.27)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "ef533fc2-b06e-4fb0-bad6-5831fe8240f6")
)
(fp_line
(start 3.81 -1.27)
(end 3.81 11.43)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "31ba89c8-dd03-4cdd-9ba7-3f7d0aded6a1")
)
(fp_line
(start 3.81 11.43)
(end -8.89 11.43)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "800336e4-24a6-46ec-9023-c027ab2f3d06")
)
(fp_text user "${REFERENCE}"
(at -2.54 -2.794 0)
(layer "F.Fab")
(uuid "40dd7085-da12-41b9-b892-bfa7bf4f1386")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "" np_thru_hole circle
(at -7.62 5.08)
(size 1.7 1.7)
(drill 1.7)
(layers "*.Cu" "*.Mask")
(uuid "b86d769f-f008-4ebc-81df-18e41ab52916")
)
(pad "" np_thru_hole circle
(at -2.54 5.08)
(size 4 4)
(drill 4)
(layers "*.Cu" "*.Mask")
(uuid "73765e79-092c-47ba-8638-124dd80e461f")
)
(pad "" np_thru_hole circle
(at 2.54 5.08)
(size 1.7 1.7)
(drill 1.7)
(layers "*.Cu" "*.Mask")
(uuid "c335d4df-5e73-4f97-a7a9-cdd4823bfe9d")
)
(pad "1" thru_hole circle
(at 0 0)
(size 2.2 2.2)
(drill 1.5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "95f28955-d4ce-4605-8aac-5b414b25ef4e")
)
(pad "2" thru_hole circle
(at -6.35 2.54)
(size 2.2 2.2)
(drill 1.5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "9d507696-ddb2-4a94-b63a-54a69e85b238")
)
(model "${KIPRJMOD}/modelFiles/SW_Cherry_MX_PCB.stp"
(offset
(xyz -2.5 -5.5 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 0 0 0)
)
)
)

View file

@ -0,0 +1,436 @@
(footprint "XIAO-RP2040-SMD"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at -9.335 -11.5 0)
(layer "F.SilkS")
(uuid "a9f5f5dd-597c-45dd-b31d-a35c3963eed2")
(effects
(font
(size 0.78232 0.78232)
(thickness 0.10668)
)
(justify left bottom)
)
)
(property "Value" "XIAO-RP2040-SMD"
(at 0.055 -0.295 0)
(layer "F.Fab")
(uuid "2d66aca7-e0b3-44df-838e-be285890792c")
(effects
(font
(size 0.635 0.635)
(thickness 0.1016)
)
)
)
(property "Footprint" ""
(at -8.835 10.5 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "32a8cb35-59e0-4282-b955-c4626b0c3c52")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at -8.835 10.5 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "5173b428-b87b-497c-9fd1-0d444c2ced85")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at -8.835 10.5 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "ea7181c4-fdca-44f1-ad15-d0627f50a68e")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(fp_line
(start -8.835 8.513)
(end -8.835 -8.632)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "df0486b4-d04f-4201-a301-beede6e15862")
)
(fp_line
(start -6.93 10.418)
(end 7.04 10.418)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "f54abd8d-62ed-4b05-8e37-f29acdadc0f8")
)
(fp_line
(start -4.44 -10.537)
(end -4.436272 -11.447272)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "fead6daa-b9f4-4bd1-a131-b5d2cd3184de")
)
(fp_line
(start -3.936272 -11.947)
(end 4.059 -11.947)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "b90ae92d-7c1a-4689-bf64-c3528a3ea3ee")
)
(fp_line
(start 4.559 -11.447)
(end 4.559 -10.537)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "b540fbcc-8e06-44d7-95f6-8b142e4c90fb")
)
(fp_line
(start 7.04 -10.537)
(end -6.93 -10.537)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "2b80542c-5088-4f89-ae32-3400cf894ca1")
)
(fp_line
(start 8.945 8.513)
(end 8.945 -8.632)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "4cd8add0-8a8c-468d-ba6f-b86787c288af")
)
(fp_arc
(start -8.835 -8.636)
(mid -8.277038 -9.983038)
(end -6.93 -10.541)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "4d9bf7a5-4ab4-48bb-b8ac-0a5ce4523642")
)
(fp_arc
(start -6.93 10.418)
(mid -8.277038 9.860038)
(end -8.835 8.513)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "d09661c8-1ad3-40e9-8323-9dabc8f3f98b")
)
(fp_arc
(start -4.436272 -11.447272)
(mid -4.289724 -11.800644)
(end -3.936272 -11.947)
(stroke
(width 0.127)
(type default)
)
(layer "F.SilkS")
(uuid "7a58f637-14d7-4804-b127-f1d029b5d1e6")
)
(fp_arc
(start 4.059 -11.947)
(mid 4.412553 -11.800553)
(end 4.559 -11.447)
(stroke
(width 0.127)
(type default)
)
(layer "F.SilkS")
(uuid "d0bc8663-987f-4e2e-b464-096a547b822f")
)
(fp_arc
(start 7.04 -10.537)
(mid 8.387038 -9.979038)
(end 8.945 -8.632)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "77004ea5-53a4-40ab-b35c-7bdd22107e34")
)
(fp_arc
(start 8.945 8.513)
(mid 8.387038 9.860038)
(end 7.04 10.418)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "94189dc1-14b5-4f17-b9d3-0163ed99e583")
)
(fp_circle
(center -9.045 -10.121)
(end -9.045 -10.375)
(stroke
(width 0.5)
(type solid)
)
(fill solid)
(layer "F.SilkS")
(uuid "dc606cc5-10bc-4635-81d1-fa27b1e6b4e2")
)
(fp_circle
(center -7.771 -9.404)
(end -7.771 -9.658)
(stroke
(width 0.5)
(type solid)
)
(fill solid)
(layer "F.SilkS")
(uuid "2b5e2829-6d01-441f-9983-fc4a273ff483")
)
(fp_rect
(start 8.965 10.5)
(end -8.835 -10.5)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "e428eb56-00a2-4249-bb91-d2e5823b2899")
)
(fp_rect
(start -8.835 -10.5)
(end 8.965 10.5)
(stroke
(width 0.1)
(type default)
)
(fill none)
(layer "F.Fab")
(uuid "2133d927-559d-4615-ab92-732772c02d94")
)
(fp_circle
(center -7.751 -9.4)
(end -7.751 -9.654)
(stroke
(width 0.5)
(type solid)
)
(fill solid)
(layer "F.Fab")
(uuid "50e04a65-8ff2-4d1f-be98-2db48101e90a")
)
(pad "1" smd roundrect
(at -8 -7.62)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "c68f6b12-dcf5-46b1-b159-2eef9023b0ac")
)
(pad "2" smd roundrect
(at -8 -5.08)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "525b09fc-9099-4274-98c3-45f84d0591ab")
)
(pad "3" smd roundrect
(at -8 -2.54)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "99cc76a7-0a78-4868-871b-c214ecac5525")
)
(pad "4" smd roundrect
(at -8 0)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "8038b67b-b3bf-4a3e-b790-40857963c957")
)
(pad "5" smd roundrect
(at -8 2.54)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "84711cb2-d222-464e-bcd5-f76af75cc612")
)
(pad "6" smd roundrect
(at -8 5.08)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "aabcfc3b-fa72-4e48-95d1-d53474158cc0")
)
(pad "7" smd roundrect
(at -8 7.62)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "3e086061-1f3f-4b1e-9354-920126d40249")
)
(pad "8" smd roundrect
(at 8.165 7.62)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "974a7e29-b5d3-475c-b481-2bc14f5b3495")
)
(pad "9" smd roundrect
(at 8.165 5.08)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "a553cc0b-22bc-49aa-9fb7-680c812e8abd")
)
(pad "10" smd roundrect
(at 8.165 2.54)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "b650936d-c436-4d93-abb7-7957add5cfb1")
)
(pad "11" smd roundrect
(at 8.165 0)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "177728f1-7b02-41a6-9de4-bdaee546f6d9")
)
(pad "12" smd roundrect
(at 8.165 -2.54)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "eb6539ef-4d84-4ae5-bc4e-237dae21b9ef")
)
(pad "13" smd roundrect
(at 8.165 -5.08)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "c8744fbe-93c9-4c54-84bc-435357de679f")
)
(pad "14" smd roundrect
(at 8.165 -7.62)
(size 2.75 2)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(solder_mask_margin 0.0508)
(thermal_bridge_angle 45)
(uuid "fd579d63-bbef-4609-9252-aad3f944a314")
)
(pad "15" smd roundrect
(at -1.088 8.64 270)
(size 2.5 1.1)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(thermal_bridge_angle 45)
(uuid "144d3c3d-6207-433c-9e61-4f75722af865")
)
(pad "16" smd roundrect
(at 1.452 8.64 270)
(size 2.5 1.1)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.25)
(thermal_bridge_angle 45)
(uuid "3780a4ef-348c-4241-b04b-2cb4f7127fa2")
)
(pad "17" smd circle
(at -1.088 -8.378)
(size 1.7 1.7)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "ad890579-1e55-4b71-9d59-080a59598896")
)
(pad "18" smd circle
(at 1.452 -8.378)
(size 1.7 1.7)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "25d6fdae-01ac-4ca4-8702-55badc8bcbc8")
)
(pad "19" smd circle
(at -1.088 -5.838)
(size 1.7 1.7)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "e73ae295-736f-4acf-8ee1-0c120ebcebea")
)
(pad "20" smd circle
(at 1.452 -5.838)
(size 1.7 1.7)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "7adfba87-f861-42a5-bb73-c3f9fac53180")
)
(model "${KIPRJMOD}/modelFiles/xiao.step"
(offset
(xyz 0 0 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 0 0 0)
)
)
)

View file

@ -0,0 +1,5 @@
(sym_lib_table
(version 7)
(lib (name "OPL")(type "KiCad")(uri "${KIPRJMOD}/OPL_Kicad_Library-master/Seeed Studio XIAO Series Library/Seeed_Studio_XIAO_Series.kicad_sym")(options "")(descr ""))
(lib (name "XIAO")(type "KiCad")(uri "${KIPRJMOD}/Seeeduino-xiao-rp2040-KiCAD-Library/MOUDLE-SEEEDUINO-XIAO.kicad_sym")(options "")(descr ""))
)

View file

@ -0,0 +1,37 @@
import time
import random
from displayio import Group
class DisplayManager:
def __init__(self, display, splash_group, media_info):
self.display = display
self.splash_group = splash_group
self.media_info = media_info
self.last_activity = time.monotonic()
self.last_shift = time.monotonic()
self.shift_interval = 30
self.timeout = 600
self.original_position = (splash_group.x, splash_group.y)
def update(self):
current_time = time.monotonic()
if current_time - self.last_shift > self.shift_interval:
self._shift_content()
self.last_shift = current_time
if current_time - self.last_activity > self.timeout:
if "No track playing" in self.media_info.get_media_info():
self.display.brightness = 0.1
else:
self.display.brightness = 1.0
else:
self.display.brightness = 1.0
def register_activity(self):
self.last_activity = time.monotonic()
self.display.brightness = 1.0
def _shift_content(self):
self.splash_group.x = self.original_position[0] + random.randint(-2, 2)
self.splash_group.y = self.original_position[1] + random.randint(-2, 2)

View file

@ -0,0 +1,23 @@
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners import DiodeOrientation
from kmk.scanners.keypad import KeysScanner
class MacroPad(KMKKeyboard):
def __init__(self):
# Key matrix pins
self.direct_pins = [
board.D5,
board.D6,
board.D7,
board.D8,
]
self.led1 = board.D9
self.led2 = board.D10
self.scanner = KeysScanner(
pins=self.direct_pins,
value_when_pressed=False,
pull=True,
)

View file

@ -0,0 +1,40 @@
import time
import board
import digitalio
from rainbowio import colorwheel
class LEDManager:
def __init__(self, rgb_pixels):
self.pixels = rgb_pixels
self.color_cycle = 0
self.last_update = time.monotonic()
self.update_interval = 0.05
self.mute_led = digitalio.DigitalInOut(board.D9)
self.mute_led.direction = digitalio.Direction.OUTPUT
self.deafen_led = digitalio.DigitalInOut(board.D10)
self.deafen_led.direction = digitalio.Direction.OUTPUT
self.is_muted = False
self.is_deafened = False
def update_chain(self):
current = time.monotonic()
if current - self.last_update > self.update_interval:
for i in range(4):
color_index = (self.color_cycle + (i * 64)) % 255
self.pixels[i] = colorwheel(color_index)
self.color_cycle = (self.color_cycle + 1) % 255
self.pixels.show()
self.last_update = current
def toggle_mute(self):
self.is_muted = not self.is_muted
self.mute_led.value = self.is_muted
def toggle_deafen(self):
self.is_deafened = not self.is_deafened
self.deafen_led.value = self.is_deafened
if self.is_deafened:
self.is_muted = True
self.mute_led.value = True

View file

@ -0,0 +1,107 @@
import board
import displayio
import terminalio
from adafruit_display_text import label
import adafruit_displayio_ssd1306
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.encoder import EncoderHandler
from kmk.modules.pixelmap import PixelMap
from kmk.extensions.RGB import RGB
from kmk.extensions.media_keys import MediaKeys
from kb import MacroPad
import time
from media_info import MediaInfo
from display_manager import DisplayManager
from led_manager import LEDManager
keyboard = MacroPad()
layers = Layers()
encoder_handler = EncoderHandler()
keyboard.modules = [layers, encoder_handler]
encoder_handler.pins = ((board.A2, board.A3, board.A1),)
encoder_handler.map = [(
((KC.VOLD, KC.VOLU, KC.MUTE),),
((KC.LEFT, KC.RIGHT, KC.ENTER),),
)]
rgb = RGB(
pixel_pin=board.NEOPIXEL,
num_pixels=4,
num_strands=1,
)
keyboard.extensions.append(rgb)
led_manager = LEDManager(rgb.pixels)
displayio.release_displays()
i2c = board.I2C()
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=64)
media = MediaInfo()
splash = displayio.Group()
album_group = displayio.Group(x=2, y=16)
album_bitmap = media.get_album_art()
album_palette = displayio.Palette(1)
album_palette[0] = 0xFFFFFF
album_tile = displayio.TileGrid(album_bitmap, pixel_shader=album_palette)
album_group.append(album_tile)
splash.append(album_group)
text_area = label.Label(
terminalio.FONT,
text="Waiting...",
color=0xFFFFFF,
x=36,
y=24,
scale=1
)
splash.append(text_area)
display.show(splash)
display_manager = DisplayManager(display, splash, media)
def update_display():
track_info = media.get_media_info()
text_area.text = track_info
album_bitmap = media.get_album_art()
album_tile.bitmap = album_bitmap
keyboard.keymap = [
[
KC.MT(KC.M, KC.LCTL(KC.LSFT)),
KC.MT(KC.D, KC.LCTL(KC.LSFT)),
KC.LGUI(KC.D),
KC.LCTL(KC.LSFT(KC.M)) + KC.LCTL(KC.LSFT(KC.D)) + KC.LGUI(KC.D),
],
[KC.LSFT, KC.LCTL, KC.LALT, KC.MO(1)]
]
def handle_key_event(key_event):
if key_event.pressed:
if key_event.key_number == 0:
led_manager.toggle_mute()
elif key_event.key_number == 1:
led_manager.toggle_deafen()
if __name__ == "__main__":
last_update = 0
while True:
keyboard.go()
current_time = time.monotonic()
key_event = keyboard.events.get()
if key_event:
display_manager.register_activity()
handle_key_event(key_event)
if current_time - last_update >= 5:
update_display()
last_update = current_time
display_manager.update()
led_manager.update_chain()

View file

@ -0,0 +1,29 @@
import usb_hid
from PIL import Image
import displayio
import adafruit_imageload
class MediaInfo:
def __init__(self):
self.current_track = "No track info"
self.default_image = self.create_default_image()
def create_default_image(self):
# Create a blank 32x32 bitmap
bitmap = displayio.Bitmap(32, 32, 1)
return bitmap
def get_media_info(self):
try:
consumer = usb_hid.devices[1]
if consumer:
return self.current_track
return "No track playing"
except:
return "Media Error"
def get_album_art(self):
try:
return self.default_image
except:
return self.default_image

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB