1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/makerdiary-python-keyboard

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
hand-wiring-a-keyboard.md 9.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 4 месяцев назад af36626

Сварка клавиатуры вручную

Здесь рассказывается, как вручную спаять клавиатуру и реализовать USB-Bluetooth-совместимую клавиатуру с более чем 100 строками кода Python.

Подготовка материалов

  • Медный провод 5 метров (диаметр 0,8 мм), также можно использовать обычный провод, но медный выглядит круче.
  • Позиционная плата, выбрана 60%, потому что выбор большой, а клавиш ещё мало (например, позиционная плата из алюминиевого сплава для спутниковой оси спутниковых антенн).
  • Сбалансированная ось или спутниковая ось, поскольку без печатной платы можно выбрать только тип позиционной платы.
  • Оси 61 штука, чтобы хвастаться в офисе (можно получить удар), конечно, выбраны чёткие (раздражающие) оси с синим валом.
  • Диоды 61 штука — это защита от одновременного нажатия нескольких клавиш (Anti-ghost), если вы редко используете комбинации из трёх и более клавиш одновременно (например, Ctrl + Shift + C), то этот шаг можно пропустить (удобно купить на торговом центре Lida).
  • Также необходим главный контроллер с Bluetooth и USB, например, Pitaya Go, после чего Python будет работать на этой плате разработки.

Инструменты

  • Паяльник, припой.
  • Плоскогубцы для резки медного провода.
  • Отвёртка.
  • Мультиметр, если у вас хорошее зрение, то его можно не использовать.

Ручная сварка клавиатуры

  1. Установите спутниковую ось. Установите спутниковую ось на позиционную плату, можно смазать её смазкой, чтобы уменьшить шум от нажатия клавиш, смазка представляет собой полутвёрдое вещество, а не масло. Также можно заменить сбалансированную ось на спутниковую.
  2. Установите оси для клавиш. Поместите оси для клавиш на позиционную плату.
  3. Припаяйте матрицу клавиатуры. Матрица клавиатуры делится на строки и столбцы, сначала используйте диоды для соединения одной ножки оси со строкой и хорошо припаяйте их, направление диодов может быть от строки к столбцу или от столбца к строке, но вся матрица должна сохранять одинаковое направление диодов.
  4. Соедините строки и столбцы с портами ввода-вывода главного контроллера Pitaya Go. Здесь используется матрица клавиатуры с 5 строками и 14 столбцами, у Pitaya Go есть 20 доступных портов ввода-вывода, оставшийся порт ввода-вывода можно также использовать для подключения светодиода. После завершения пайки матрицы клавиатуры и главного контроллера лучше всего проверить мультиметром, нет ли короткого замыкания между строками и столбцами.

Запуск Python на клавиатуре

  1. Обратитесь к руководству по загрузке Pitaya Go (https://wiki.makerdiary.com/pitaya-go/programming/), чтобы обновить прошивку CircuitPython (https://gitee.com/makerdiary/python-keyboard/raw/master/circuitpython-5.3.0-for-pitaya-go.hex), после обновления прошивки Pitaya Go будет имитировать USB-накопитель и последовательный порт на компьютере под названием CIRCUITPY.
  2. Загрузите две библиотеки CircuitPython — adafruit-ble (https://github.com/adafruit/Adafruit_CircuitPython_BLE) и adafruit-hid (https://github.com/adafruit/Adafruit_CircuitPython_HID), затем поместите их в каталог lib на накопителе CIRCUITPY, структура содержимого накопителя CIRCUITPY следующая:
CIRCUITPY
├───code.py
└───lib
    ├───adafruit_ble
    └───adafruit_hid
  1. Скопируйте следующий код Python в code.py, после сохранения code.py он будет перезагружен и запущен, и тогда у вас будет USB + Bluetooth-совместимая клавиатура с двумя режимами.
import time
from board import *
import digitalio
import usb_hid

import adafruit_ble
from adafruit_ble.advertising import Advertisement
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.standard.hid import HIDService
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode as _

ROWS = (P27, P13, P30, P20, P3)
COLS = (P26, P31, P29, P28, P5, P4, P24, P25, P23, P22, P14, P15, P16, P17)

KEYMAP = (_.ESCAPE, _.ONE, _.TWO, _.THREE, _.FOUR, _.FIVE, _.SIX, _.SEVEN, _.EIGHT, _.NINE, _.ZERO, _.MINUS, _.EQUALS, _.BACKSPACE,
        _.TAB, _.Q, _.W, _.E, _.R, _.T, _.Y, _.U, _.I, _.O, _.P, _.LEFT_BRACKET, _.RIGHT_BRACKET, _.BACKSLASH,
        _.CAPS_LOCK, _.A, _.S, _.D, _.F, _.G, _.H, _.J, _.K, _.L, _.SEMICOLON, _.QUOTE, None, _.ENTER,
        _.LEFT_SHIFT, _.Z, _.X, _.C, _.V, _.B, _.N, _.M, _.COMMA, _.PERIOD, _.FORWARD_SLASH, None, _.RIGHT_SHIFT, None,
        _.LEFT_CONTROL, _.LEFT_ALT, _.LEFT_GUI, None, None, _.SPACE, None, None, _.SPACE, _.APPLICATION, _.RIGHT_CONTROL, None, None)

class Matrix:
    def __init__(self, rows=ROWS, cols=COLS):
        self.rows = []
        for pin in rows:
            io = digitalio.DigitalInOut(pin)
            io.direction = digitalio.Direction.OUTPUT
            io.drive_mode = digitalio.DriveMode.PUSH_PULL
            io.value = 0
            self.rows.append(io)
        self.cols = []
        for pin in cols:
            io = digitalio.DigitalInOut(pin)
            io.direction = digitalio.Direction.INPUT
            io.pull = digitalio.Pull.DOWN
            self.cols.append(io)
        self.pressed_keys = []

    def scan(self):
        new_keys = []
        pressed_keys = []
        released_keys = self.pressed_keys
        for r in range(len(self.rows)):
            self.rows[r].value = 1
            for c in range(len(self.cols)):
                if self.cols[c].value:
                    key = r * len(self.cols) + c
                    pressed_keys.append(key)
``` ```
если ключ в released_keys:
                released_keys.remove(ключ)
            иначе:
                new_keys.append(ключ)
        self.rows[r].value = 0
    self.pressed_keys = pressed_keys
    вернуть pressed_keys, released_keys, new_keys

def main():
    hid = HIDService()
    advertisement = ProvideServicesAdvertisement(hid)
    advertisement.appearance = 961
    ble = adafruit_ble.BLERadio()
    если ble.connected:
        для c в ble.connections:
            c.disconnect()
    ble.start_advertising(advertisement)
    advertising = True
    ble_keyboard = Keyboard(hid.devices)

    matrix = Matrix()
    usb_keyboard = Keyboard(usb_hid.devices)

    пока верно:
        pressed_keys, released_keys, new_keys = matrix.scan()
        если released_keys:
            released_keycodes = список(карта(лямбда i: KEYMAP[i], released_keys))
            print('выпущенные клавиши {}'.format(released_keycodes))

            usb_keyboard.release(*released_keycodes)
            если ble.connected:
                advertising = False
                ble_keyboard.release(*released_keycodes)
        если new_keys:
            new_keycodes = список(карта(лямбда i: KEYMAP[i], new_keys))
            print('новые клавиши {}'.format(new_keycodes))
            usb_keyboard.press(*new_keycodes)
            если ble.connected:
                advertising = False
                ble_keyboard.press(*new_keys)

        если не ble.connected и не advertising:
            ble.start_advertising(advertisement)
            advertising = True

        time.sleep(0.001)

main()

Если ваша клавиатура подключена к IO Pitaya Go по-другому, вам нужно изменить код в ROWS и COLS.

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/makerdiary-python-keyboard.git
git@gitlife.ru:oschina-mirror/makerdiary-python-keyboard.git
oschina-mirror
makerdiary-python-keyboard
makerdiary-python-keyboard
zh-cn