Macropad - Seeed Xiao RP2040 - 1 phím
Macropad siêu nhỏ gọn với 1 phím, sử dụng chip Seeed Xiao RP2040. Sản phẩm có thiết kế không cần ốc vít, cửa sổ LED, và chỉ cần hàn 2 dây. Hướng dẫn chi tiết cách cài đặt CircuitPython, KMK và các tùy chọn in ấn để tạo ra macropad độc đáo của riêng bạn.
Mô tả
Tính năng:
- Thiết kế cho các switch có thể tương thích với Cherry MX.
- Cửa sổ LED để tận dụng đèn LED RGB neopixel tích hợp của RP2040.
- Không cần ốc vít!
- Các chốt giữ cơ học cho RP2040.
- Nắp đậy dạng khớp nối.
- Lỗ truy cập cổng USB ở mặt sau của macropad.
- Kích thước nhỏ nhắn, dễ thương, chỉ có 1 phím!
- Chỉ cần hàn 2 dây!
Keycaps
Năng suất
Sắp có!
Đa dạng (hơn 48)
Xúc xắc
Bài tây
Trống
Tổng quan
Bộ vi điều khiển:
Tôi đã chế tạo macropad này bằng bo mạch vi điều khiển Seeed Studio Xiao RP2040 (MCU). Đây là một bo mạch giá 10 đô la Canada, có bán trên Amazon. Tôi sẽ không đi sâu vào thông số kỹ thuật chi tiết của bo mạch nhưng nó được xây dựng dựa trên bộ xử lý dual-core RP2040 của Raspberry PI. Nó có thể chạy Arduino, MicroPython và CircuitPython. Đối với dự án này, tôi đã chọn sử dụng CircuitPython và tôi đang sử dụng 1 chân digital IO, đèn LED RGB neopixel tích hợp và cổng USB C.

Dây nối:
Bàn phím và macropad thường được nối dây theo dạng ma trận hàng và cột được kết nối bằng diode. Mỗi hàng và cột sau đó được kết nối với một chân digital IO trên MCU, cho phép có nhiều phím hơn số lượng chân IO digital. Ví dụ, nếu bạn nối một ma trận 5 hàng và 6 cột, bạn có thể có 30 phím chỉ với 11 chân digital IO. Tôi không muốn sử dụng diode nên tôi đã kết nối switch trực tiếp với MCU. QMK (không phải lỗi chính tả, đây là một firmware bàn phím phổ biến khác) có một hướng dẫn nối dây thủ công rất hay tại đây.
Trong trường hợp của tôi, một chân của switch được kết nối với chân IO D0 trên MCU. Tôi đang sử dụng điện trở kéo lên nội bộ nên cũng không cần điện trở bên ngoài. Chân còn lại của switch được kết nối với chân ground của MCU.

Firmware Macropad (mã nguồn):
Đối với mã bàn phím, thay vì tự mình làm lại từ đầu, tôi đã sử dụng KMK, một lớp chuyên dụng cho bàn phím chạy trên CircuitPython. Nó được tài liệu hóa khá tốt cho việc nối dây ma trận với diode nhưng không nhiều cho các kết nối trực tiếp như tôi đã làm, vì vậy tôi sẽ chia sẻ một số mã để giúp bạn bắt đầu nếu bạn cũng đi theo con đường đó.
Khi bạn kết nối bo mạch, nó sẽ bắt đầu chạy _boot.py_ và sau đó là _code.py_. _boot.py_ là tùy chọn và chỉ cần thiết nếu bạn muốn ẩn ổ USB (CIRCUITPY) và giao diện nối tiếp (COM port). Tôi đã đặt mã vào _boot.py_ để gắn ổ USB và giao diện nối tiếp khi nhấn và giữ phím được kết nối với D0 trong khi khởi động, nhưng nếu không thì chỉ giao diện bàn phím được kích hoạt.
Mẫu dưới đây có các macro để mở Google, notepad, cmd, powershell, mật khẩu của bạn (không an toàn, đừng làm vậy!), v.v. Nó có thể được tùy chỉnh cho nhu cầu của riêng bạn. Tôi chưa làm nhiều nhưng KMK cho phép bạn tạo các lớp, thay đổi màu của đèn LED dựa trên lớp và vô số thứ thú vị khác. Đây là một dự án đang tiến hành nên tôi sẽ bổ sung thêm tính năng sau. Nếu bạn nghĩ ra điều gì hay, vui lòng chia sẻ trong phần bình luận!
Tôi chưa thấy ví dụ nào sử dụng module KeysScanner của keypad, vì vậy tôi hy vọng điều này sẽ giúp ích cho bạn.
code.py chứa mã bàn phím chính:
#
# <code.py>
# Import các module
# KeysScanner là cần thiết vì chúng ta sử dụng kết nối switch trực tiếp thay vì
# ma trận có diode.
# simple_key_sequence và send_string được sử dụng trong macro.
# RGB cho phép sử dụng đèn LED RGB neopixel tích hợp của RP2040.
# Mediakeys cho phép gán các chức năng như tăng âm lượng cho phím.
# Layers cho phép ánh xạ phím thay thế theo lớp.
#
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.keypad import KeysScanner
from kmk.keys import KC
from kmk.handlers.sequences import simple_key_sequence
from kmk.handlers.sequences import send_string
from kmk.extensions.RGB import RGB
from kmk.extensions.RGB import AnimationModes
from kmk.extensions.media_keys import MediaKeys
from kmk.modules.layers import Layers as _Layers
from kmk.modules.modtap import ModTap
#
# In một chuỗi ra bảng điều khiển nối tiếp
#
print("NPQ Macropad")
#
# Ánh xạ GPIO sang phím - Chúng ta sử dụng tất cả các chân digital IO của bo mạch
#
# Chân Seed Xiao RP2040:
# 'A0', 'A1', 'A2', 'A3'
# 'D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10'
# 'I2C', 'MISO', 'MOSI', 'RX', 'SCK', 'SCL', 'SDA', 'SPI', 'TX', 'UART', 'board_id'
# 'LED', 'LED_BLUE', 'LED_GREEN', 'LED_RED', 'NEOPIXEL', 'NEOPIXEL_POWER'
#
_KEY_CFG = [
# 0 - D0
board.D0
]
#
# Lớp Keyboard của riêng chúng ta. Chúng ta cần làm điều này vì chúng ta có dây nối trực tiếp các switch
# với MCU thay vì ma trận "tiêu chuẩn" gồm các cột và hàng được kết nối bằng diode.
#
class MyKeyboard(KMKKeyboard):
def __init__(self):
# tạo và đăng ký scanner
self.matrix = KeysScanner(
# đối số yêu cầu:
pins=_KEY_CFG,
# đối số tùy chọn với mặc định:
value_when_pressed=False,
pull=True,
interval=0.02, # Thời gian debounce theo giây dấu phẩy động
max_events=64,
)
# Đối tượng bàn phím của chúng ta!
keyboard = MyKeyboard()
#
# Extension đèn LED RGB Neopxiel - http://kmkfw.io/docs/rgb
#
neopix = RGB(
pixel_pin=board.NEOPIXEL,
num_pixels=1,
hue_default=170, # Xanh dương = 170
sat_default=255, # Xanh dương = 255
val_default=255, # Xanh dương = 255
animation_mode=AnimationModes.BREATHING,
animation_speed=6,
)
#
# Lớp (Layers)
#
# Màu sắc lớp
LYR_BLUE, LYR_WHITE, LYR_RED, LYR_GREEN, LYR_PINK, LYR_YELLOW = 0, 1, 2, 3, 4, 5
LAYOR_COLOR = ["BLUE", "WHITE", "RED", "GREEN", "PINK", "YELLOW"]
# Thay thế lớp Layers bằng lớp của riêng chúng ta để triển khai
# chỉ báo màu lớp LED
class Layers(_Layers):
last_top_layer = 0
# Giá trị HSV cho mỗi lớp
# Xanh dương Trắng Đỏ Xanh lá Hồng Vàng
lyr_hue = [ 170, 0, 0, 85, 213, 42, ]
lyr_sat = [ 255, 0, 255, 255, 255, 255, ]
lyr_val = [ 255, 255, 255, 255, 255, 255, ]
# Xử lý thay đổi màu LED khi lớp thay đổi
def after_hid_send(self, keyboard):
if keyboard.active_layers[0] != self.last_top_layer:
self.last_top_layer = keyboard.active_layers[0]
neopix.hue = self.lyr_hue[self.last_top_layer]
neopix.sat = self.lyr_sat[self.last_top_layer]
neopix.val = self.lyr_val[self.last_top_layer]
# Tôi đã sử dụng bảng điều khiển nối tiếp để gỡ lỗi
# print(LAYOR_COLOR[self.last_top_layer])
# print(keyboard.active_layers)
# modtap
# tùy chọn: đặt thời gian nhấn tùy chỉnh (ms)
# modtap.tap_time = 300
modtap = ModTap()
#
# Thêm các extension
#
keyboard.extensions.append(neopix)
keyboard.extensions.append(MediaKeys())
keyboard.modules.append(Layers())
keyboard.modules.append(modtap)
#
# Macro - Có thể gán cho các phím
#
# Bố cục bàn phím của tôi là tiếng Pháp Canada nên một số phím không hoạt động tốt với tôi.
# Dấu gạch chéo ngược và dấu gạch chéo gặp sự cố. Tôi đã giải quyết vấn đề dấu gạch chéo
# (cho tôi ký tự é) bằng cách sử dụng mã phím từ bàn phím số. Đối với dấu gạch chéo ngược,
# tôi chưa tìm thấy KC nào hoạt động trên mọi bố cục, vì vậy điều này sẽ cần được
# điều chỉnh trong macro...
#
# Trên bàn phím tiếng Pháp Canada:
# \ = KC.RALT(KC.GRAVE) # KC.BSLASH cho ra "é" trên bàn phím tiếng Pháp Canada
# / = KC.LSFT(KC.N3) # KC.SLASH cho ra "<" trên bàn phím tiếng Pháp Canada
#
# Trên bàn phím US:
# \ = KC.BSLASH
# / = KC.SLASH
#
# Cái này hoạt động trên cả hai:
# / = KC.KP_SLASH
#
# Đây là một ví dụ về những gì bạn có thể làm nhưng còn nhiều hơn nữa... Hãy xem tài liệu KMK
# để biết những gì có thể.
#
# Notepad
NOTEPAD = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("notepad.exe"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# Máy tính
CALC = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("calc.exe"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# Dòng lệnh
CMD = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("cmd.exe"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# Windows PowerShell
WPOWERSHELL = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("powershell.exe"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# Windows PowerShell ISE
WPOWERSHELLISE = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("powershell_ise.exe"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# PowerShell 7
POWERSHELL7 = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("pwsh.exe"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# Trình quản lý chứng chỉ - Máy cục bộ
CERTLM = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("mmc.exe CERTLM.MSC"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# Trình quản lý chứng chỉ - Người dùng hiện tại
CERTMGR = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("mmc.exe CERTMGR.MSC"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# Mở Google trong một tab mới trên trình duyệt mặc định
GOOGLE = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("https:"),
#KC.LSFT(KC.N3), # / trên bàn phím tiếng Pháp Canada
#KC.LSFT(KC.N3), # / trên bàn phím tiếng Pháp Canada
KC.KP_SLASH, # / trên bố cục tiếng Pháp Canada và US!
KC.KP_SLASH, # / trên bố cục tiếng Pháp Canada và US!
send_string("www.google.com"),
KC.ENTER,
KC.MACRO_SLEEP_MS(250),
)
)
# MS Word (32bit)
# C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE
MSWORD32 = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("C:"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Program Files (x86)"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Microsoft Office"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("root"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Office16"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("WINWORD.EXE"),
KC.ENTER,
)
)
# MS Excel (32bit)
# C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE
EXCEL32 = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("C:"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Program Files (x86)"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Microsoft Office"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("root"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Office16"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("EXCEL.EXE"),
KC.ENTER,
)
)
# MS Outlook (32bit)
# C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE
OUTLOOK32 = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("C:"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Program Files (x86)"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Microsoft Office"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("root"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Office16"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("OUTLOOK.EXE"),
KC.ENTER,
)
)
# MS Word (64bit)
# C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE
MSWORD64 = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("C:"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Program Files"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Microsoft Office"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("root"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Office16"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("WINWORD.EXE"),
KC.ENTER,
)
)
# MS Excel (64bit)
# C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE
EXCEL64 = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("C:"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Program Files"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Microsoft Office"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("root"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Office16"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("EXCEL.EXE"),
KC.ENTER,
)
)
# MS Outlook (64bit)
# C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE
OUTLOOK64 = simple_key_sequence(
(
KC.LWIN(KC.R),
KC.MACRO_SLEEP_MS(250),
send_string("C:"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Program Files"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Microsoft Office"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("root"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("Office16"),
KC.RALT(KC.GRAVE), # \ trên bàn phím tiếng Pháp Canada
# KC.BSLASH, # \ trên bàn phím US
send_string("OUTLOOK.EXE"),
KC.ENTER,
)
)
# Tôi nghi ngờ bạn sẽ thực sự sử dụng các macro "màu sắc" này trong cuộc sống thực nhưng đây
# là những gì tôi đã sử dụng để gỡ lỗi và làm rõ
# Gõ: BLUE<Enter>
BLUE = simple_key_sequence(
(
send_string("BLUE"),
KC.ENTER,
)
)
# Gõ: WHITE<Enter>
WHITE = simple_key_sequence(
(
send_string("WHITE"),
KC.ENTER,
)
)
# Gõ: RED<Enter>
RED = simple_key_sequence(
(
send_string("RED"),
KC.ENTER,
)
)
# Gõ: GREEN<Enter>
GREEN = simple_key_sequence(
(
send_string("GREEN"),
KC.ENTER,
)
)
# Gõ: PINK<Enter>
PINK = simple_key_sequence(
(
send_string("PINK"),
KC.ENTER,
)
)
# Gõ: YELLOW<Enter>
YELLOW = simple_key_sequence(
(
send_string("YELLOW"),
KC.ENTER,
)
)
# Bí danh - Trông đẹp hơn trong keymap
_______ = KC.TRANSPARENT # Trong suốt
XXXXXXX = KC.NO # Không có phím
#
# Keymap!
#
# Bạn sẽ cần tùy chỉnh điều này cho nhu cầu của riêng mình. Ví dụ
# bên dưới sẽ cho bạn ý tưởng tốt về những gì bạn có thể làm.
#
# Giữ phím D0 sẽ chuyển đổi giữa các lớp 0-5 và sau đó trở lại lớp 0.
#
# Để chuyển đổi giữa các lớp, chúng ta sử dụng KC.TG để chuyển sang các lớp cao hơn
# và sau đó KC.TO để quay lại lớp thấp nhất (đầu tiên) khi
# chúng ta đạt đến lớp cuối cùng. Ban đầu tôi đã sử dụng KC.TO ở mọi nơi
# dẫn đến lớp hiện tại là lớp hoạt động duy nhất và các phím trong suốt không hoạt động như mong đợi. Một lời khen lớn
# dành cho "regicidal plutophage" vì đã giúp tôi hiểu điều đó trên
# phòng chat hỗ trợ zulip https://kmkfw.zulipchat.com/
#
# Chuyển đổi giữa các lớp:
# Lớp 0 (Đèn LED xanh dương) - Lớp hoạt động [0]
# Lớp 1 (Đèn LED trắng) - Lớp hoạt động [1,0]
# Lớp 2 (Đèn LED đỏ) - Lớp hoạt động [2,1,0]
# Lớp 3 (Đèn LED xanh lá) - Lớp hoạt động [3,2,1,0]
# Lớp 4 (Đèn LED hồng) - Lớp hoạt động [4,3,2,1,0]
# Lớp 5 (Đèn LED vàng) - Lớp hoạt động [5,4,3,2,1,0]
#
GO_WHITE = KC.TG(LYR_WHITE)
GO_RED = KC.TG(LYR_RED)
GO_GREEN = KC.TG(LYR_GREEN)
GO_PINK = KC.TG(LYR_PINK)
GO_YELLOW = KC.TG(LYR_YELLOW)
GO_FIRST = KC.TO(0)
keyboard.keymap = [
# LYR_BLUE
[
# D0
KC.MT(GOOGLE, GO_WHITE),
],
# LYR_WHITE
[
# D0
KC.MT(WHITE, GO_RED),
],
# LYR_RED
[
# D0
KC.MT(RED, GO_GREEN),
],
# LYR_GREEN
[
# D0
KC.MT(GREEN, GO_PINK),
],
# LYR_PINK
[
# D0
KC.MT(PINK, GO_YELLOW),
],
# LYR_YELLOW
[
# D0
KC.MT(YELLOW, GO_FIRST),
],
]
if __name__ == "__main__":
keyboard.go()
boot.py (tùy chọn) chứa mã để ẩn ổ USB CIRCUITPY và cổng COM nối tiếp (REPL) trừ khi bạn nhấn và giữ một phím cụ thể khi khởi động, trong trường hợp này là phím được kết nối với D10. Đối với tôi, nó nằm bên dưới cửa sổ LED:
# <boot.py>
# Bao gồm tệp này ở thư mục gốc của ổ CIRCUITPY nếu
# bạn muốn tắt ổ USB và giao diện nối tiếp
# trừ khi bạn nhấn và giữ phím 10 khi khởi động
import board
import digitalio
import storage
import usb_cdc
# Cần cái này để bàn phím hiển thị trong BIOS
# Đây là một macropad nên khó có khả năng chúng ta cần nó
# import usb_hid
# usb_hid.enable(boot_device=1)
# Ổ USB (CIRCUITPY) và giao diện nối tiếp (REPL)
# được bật theo mặc định
#
# Nếu phím trên chân D10 không được giữ trong khi khởi động,
# thực hiện mã để tắt ổ USB và giao diện nối tiếp.
# (Giữ phím để gắn ổ đĩa và giao diện nối tiếp)
#
# https://learn.adafruit.com/customizing-usb-devices-in-circuitpython/circuitpy-midi-serial
bypass_key = digitalio.DigitalInOut(board.D0)
bypass_key.pull = digitalio.Pull.UP
if bypass_key.value:
# Tắt ổ USB CIRCUITPY
storage.disable_usb_drive()
# Tắt cả hai thiết bị nối tiếp
# Tương đương với usb_cdc.enable(console=False, data=False)
usb_cdc.disable()
bypass_key.deinit()
Các bước cài đặt
Cài đặt CircuitPython
Có một hướng dẫn chi tiết có sẵn cho Mac OSX tại đây, hãy cẩn thận liên kết tải xuống được cung cấp là cho phiên bản CircuitPython lỗi thời; tôi khuyên bạn nên lấy phiên bản ổn định mới nhất từ trang tải xuống CircuitPython tại đây.
Khởi động RP2040 ở chế độ bootloader:
Nhấn và giữ nút “BOOT” (xem sơ đồ trong phần tổng quan để tham khảo) trên bo mạch RP2040 và sau đó kết nối nó với USB hoặc nhấn và thả nút “reset” (trong khi vẫn giữ “BOOT”) nếu bo mạch đã được kết nối với USB.
Thả nút “BOOT” sau khi bo mạch đã khởi động và bạn thấy ổ USB RP1-RPI2.
Tải xuống và sao chép CircuitPython cho bo mạch Seeed Xiao RP2040:
Tôi đã tải xuống phiên bản ổn định hiện tại (8.0.3) từ đây.
Sao chép tệp UF2 vào thư mục gốc của ổ USB RP1-RPI2.
Bo mạch sẽ khởi động lại và bạn sẽ thấy ổ USB CIRCUITPY thay vì RP1-RPI2.
Chúc mừng, bạn vừa cài đặt CircuitPython!
Cài đặt thư viện KMK và neopixel
Tải xuống KMK từ đây.
Mở tệp zip và sao chép thư mục KMK cùng nội dung của nó vào thư mục gốc của ổ CIRCUITPY.
Tải xuống thư viện neopixel từ đây.
Mở tệp zip và sao chép tệp neopixel.py vào thư mục gốc của ổ CIRCUITPY.
Thiết lập KMK
Tạo một tệp code.py ở thư mục gốc của ổ CIRCUITPY. Tệp có thể chứa mã của riêng bạn hoặc mã mẫu mà tôi đã cung cấp.
Tùy chọn, tạo một tệp boot.py ở thư mục gốc của ổ CIRCUITPY. Tệp này chỉ cần thiết nếu bạn muốn ẩn ổ USB và cổng nối tiếp. Bạn cần rút và cắm lại cáp USB để áp dụng các thay đổi cho tệp boot.py (việc đặt lại đơn giản là không đủ).
Cài đặt in:
Nếu bạn sẵn lòng hy sinh cửa sổ LED, bạn có thể in bằng một màu duy nhất nhưng tôi khuyên bạn nên in lớp trên cùng bằng sợi trong suốt.


Hướng dẫn thay đổi màu sắc: https://help.prusa3d.com/article/color-change_1687
Cài đặt đề xuất
Chiều cao lớp
0.2 mm
0.15 mm
0.1 mm
Chất liệu
PETG
Infill - Kiểu điền đáy
Hilbert Curve
Các lớp và chu vi - Lớp rắn - Đáy
15
20
29
Thay đổi màu sắc
Hướng dẫn thay đổi màu sắc cho Prusa slicer. https://help.prusa3d.com/article/color-change_1687
1.8 mm
3.2 mm
1.7 mm
3.2 mm
1.6 mm
3.1 mm
Tôi đã in lớp trên cùng với đầu phun 0.6 mm vì đó là thứ tôi đã lắp / chiều cao lớp 0.2 mm nhưng có lẽ tôi sẽ in với đầu phun 0.4 mm.
Tất cả các thay đổi màu sắc là tùy chọn nếu bạn sẵn sàng hy sinh cửa sổ LED. Lớp đầu tiên nên được in bằng sợi trong suốt với thay đổi màu sắc ở chiều cao được chỉ định trong bảng trên. Thay đổi màu đầu tiên rất được khuyến khích. Thay đổi thứ hai là tùy chọn nhưng việc thay đổi màu mang lại vẻ ngoài đẹp mắt.
Hilbert Curve mang lại lớp hoàn thiện tuyệt vời trên lớp trong suốt (tốt hơn nhiều so với các đường chéo!).
PLA có thể hoạt động nhưng tôi không chắc các chốt RP2040 sẽ chịu được việc bị uốn cong khi lắp bộ vi điều khiển (PLA giòn hơn PETG). Tôi cũng không nhớ đã từng thấy PLA trong suốt nên bạn sẽ phải hy sinh cửa sổ LED. Nếu bạn in bằng PLA, vui lòng cho tôi biết nó hoạt động như thế nào!
Nếu bạn muốn tìm hiểu thêm về CircuitPython, bạn có thể xem hướng dẫn này tại đây trên trang web Adafruit.
Trang github của KMK là tại đây.
Trang web của KMK là tại đây.
Giấy phép
File mô hình
Chưa có bản in nào được khoe. Hãy là người đầu tiên!
Chưa có bình luận nào. Hãy là người đầu tiên!