Home New Help Edit

1キーキーボード

Suns & Moon Laboratory
2020-05-28


Seeeduino XIAO+CircuitPython
LEDは未実装



動画

写真






固定はホットメルト







作り方


Seeeduino XIAO

自作PCB(白い基板)

ケースは3Dプリンタで作成 Flashforge Adventurer3

Arduinoで作ろうかと思ったのですが、XIAOのArduinoはHID対応していないっぽい
(keyboardのファーム焼くと、USB認識で失敗する)

なのでCircuitPythonを使いました。

CircuitPythonはこちらを参考にしました。
Build a simple USB HID Macropad using Seeeduino Xiao & CircuitPython

  1. CircuitPythonを落とす https://circuitpython.org/board/seeeduino_xiao/ 今回は5.3.0
  2. CircuitPythonをXIAOのドライブに書き込む
  3. ライブラリを落とす https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases 今回はadafruit-circuitpython-bundle-5.x-mpy-20200528.zip
  4. zip展開してadafruit_hidの中の__init__.mpy,keyboard_layout_us.mpy,keyboard.mpy,keycode.mpyをCUIRCUITPYドライブのlibへコピーする。この時lib\afafruit_hidに入れる。libに直接入れて動かなくてはまった。
  5. CUIRCUITPYドライブのルートにmain.pyをコピーする。
# Import the libraries import time import board from digitalio import DigitalInOut, Direction, Pull from adafruit_hid.keyboard import Keyboard from adafruit_hid.keycode import Keycode from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS import usb_hid # define output LED led = DigitalInOut(board.D13) led.direction = Direction.OUTPUT # flash the LED when booting for x in range(0, 5): led.value = False time.sleep(0.2) led.value = True time.sleep(0.2) # configure device as keyboard kbd = Keyboard(usb_hid.devices) layout = KeyboardLayoutUS(kbd) d2 = DigitalInOut(board.D2) d2.direction = Direction.INPUT d2.pull = Pull.UP # loop forever while True: if not d2.value: # mute video on bluejeans led.value = False # led on #kbd.send(Keycode.V) layout.write('Hello!') time.sleep(0.3) # debounce delay led.value = True # led off

neopixel

neopixel光らせるのにちょっと苦労しました
  1. libに入れるファイル
  2. 半田不良
で、問題なのがlibに入れるファイルなんですが、neopixel.mpyだけ入れていたんですが、どうもimportで失敗してうごいていないっぽい。
teratermでPEPLモードで1行づつ実行してみるとエラーが出る。
ので、それを見ながら足りないファイルをlibに追加していきました。

今回PEPLでわかったのはこれ
lib/adafruit_pypixelbuf.mpy
それ以外にも入れる必要あれば適宜入れていく。


半田不良は情けない話で、部品が後で入手できたので、コネクタとかよけてはんだ付けしたらいも半田でしたorz
久しぶりに、オシロのプローブあてると動く???んんん???という事やりました。

光らせるソース
元はこちらを改造Adafruit CircuitPython NeoPixel
# Import the libraries import time import board from digitalio import DigitalInOut, Direction, Pull import neopixel # define output LED led = DigitalInOut(board.D13) led.direction = Direction.OUTPUT # flash the LED when booting for x in range(0, 5): led.value = False time.sleep(0.2) led.value = True time.sleep(0.2) num_pixels = 1 #pixels = neopixel.NeoPixel(board.D0, num_pixels, brightness=0.3, auto_write=False, pixel_order=(1, 0, 2, 3)) pixels = neopixel.NeoPixel(board.D0, 1) RED = (255, 0, 0) pixels[0] = (255, 255, 0) def wheel(pos): # Input a value 0 to 255 to get a color value. # The colours are a transition r - g - b - back to r. if pos < 0 or pos > 255: return (0, 0, 0) if pos < 85: return (255 - pos * 3, pos * 3, 0) if pos < 170: pos -= 85 return (0, 255 - pos * 3, pos * 3) pos -= 170 return (pos * 3, 0, 255 - pos * 3) def rainbow_cycle(wait): for j in range(255): rc_index = 256 + j pixels[0] = wheel(rc_index & 255) pixels.show() time.sleep(wait) while True: rainbow_cycle(0)
end.

Home New Help Edit
2020-06-14 20:51:56 32400