由Python驱动的手线USB和蓝牙键盘

2020-05-18 21:42:01

下载两个Circuit itPython库-Adafruit-ble&;Adafruit-HID,并将它们放入名为CIRCUITPY的USB驱动器的lib目录中。

CircuitPy├─代码.py└─库├─adafruit_ble└─adafruit_hid。

将Python代码复制到code.py。重新加载code.py时,您将获得一个带USB蓝牙的键盘(&;Bluetooth。

从电路板导入时间导入*导入Digitalio导入usb_hid从adafruit_ble导入adafruit_ble。广告从Adafruit_ble导入广告。做广告。从Adafruit_ble标准导入ProVideServicesAdvertisement。服务。标准。HID从Adafruit_HID导入HIDService。从Adafruit_HID导入键盘。KEYCODE导入KEYCODE AS_ROWS=(P27,P13,P30,P20,P3)COLS=(P26,P31,P29,P28,P5,P4,P24,P25,P23,P22,P14,P15,P16,P17)KEYMAP=(_.。逃生,_。一,_。二,_。三,_。四,_。五,_。六,_。七,_。八,_。九点,_。零,_。减号,_。等于,_。退格键,_。制表符,_。q,_。W,_。e,_。R,_。t,_。Y,_。u,_。我,_。不,_。p,_。左方括号,_。右括号,_。反斜杠,_。CAPS_LOCK,_。a,_。s,_。d,_。F,_。G,_。H,_。J,_。K,_。我,_。分号,_。引用,没有,_。输入,_。Left_Shift,_。z,_。X,_。C,_。v,_。B,_。N,_。m,_。逗号,_。句号,_。正向斜杠、无、_。Right_Shift、None、_。Left_Control,_。LEFT_ALT,_。LEFT_GUI、无、无、_。空格、无、无、_。右_alt,_。Right_GUI,_。应用程序,_。RIGHT_CONTROL,NONE,NONE)类矩阵:def__init__(self__init__(self,row=row,cols=cols):self。行中的端号为ROWS=[]:IO=Digitalio。数字输入输出(插针)Io.。方向=数字。方向。输出io。drive_mode=digitalio。驱动模式。PUSH_PULL IO。值=0自身。排成一排。附加(Io)自己。COLS=[]表示管脚在COLS中:IO=Digitalio。数字输入输出(插针)Io.。方向=数字。方向。输入io。拉=数字。拉。自暴自弃。科尔斯。附加(Io)自己。PRESSED_KEYS=[]定义扫描(自身):NEW_KEYS=[]PRESSED_KEYS=[]RELEASED_KEYS=SELF。范围内r的按下的_KEYS(len(自身。行)):SELF。行[r]。范围内c的值=1(len(自身。COLS)):如果是SELF。cols[c]。值:key=r*len(自身。COLS)+c按下_键。在RELEASED_KEYS:RELEASED_KEYS中追加(Key)if key。REMOVE(KEY)ELSE:NEW_KEYS。附加(关键字)自身。行[r]。值=0自身。PRESSED_KEYS=PRESSED_KEYS返回PRESSED_KEYS,RELEASED_KEYS,NEW_KEYS def main():HID=HIDService()advertisement=ProVideServicesAdvertisement(HID)通告。外观=961 ble=Adafruit_ble。BLERadio()(如果可用)。已连接:在ble中表示c。Connections:C.Disconnect()ble。START_ADVIDATION(ADVID.)ADVALIDATION=True_keyboard=Keyboard(HID.。设备)矩阵=矩阵()USB_键盘=键盘(USB_HID.。设备),而True:PRESSED_KEYS,RELEASED_KEYS,NEW_KEYS=矩阵。Scan()if RELEASED_KEYS:RELEASED_KEYCODES=LIST(map(lambda i:keymap[i],RELEASED_KEYS))打印(';释放的键{}';。format(RELEASED_KEYCODE))USB_键盘。如果ble,则释放(*RELEASED_KEYCODE)。已连接:广告=FALSE BLE_KEARY。释放(*RELEASED_KEYCODES),如果NEW_KEYS:NEW_KEYCODES=LIST(map(lambda i:keymap[i],new_key))print(';new key{}';。format(New_Keycode))USB_键盘。如果可用,请按(*NEW_KEYCODE)。已连接:广告=FALSE BLE_KEARY。如果不可用,请按(*NEW_KEYCODE)。连接而不是广告:ble。START_ADDISTING(广告)ADVALIDATION=真实时间。睡眠(0.001)如果__名称__==';__Main__';:Main()。

如果您有不同的ROW和COLS配置,则必须在代码中更改行和COLS。

正如您可能注意到的,这是一个60%的键盘,它缺少很多键(F1~F12,箭头键)。但是,我们可以添加诸如TMK的层和复合键之类的功能来使小键盘更加强大。受开发更实用的键盘的启发,我们可以对键盘进行优化,使我们的手指保持在主排,这可能会帮助我们提高工作效率。

在这里,我们介绍一个功能,它是按住一个键来激活另一个功能。

要应用导航d,请将keyboard.py、keycodes.py和matrix.py复制到CIRCUITPY,然后修改code.py以导入新键盘