code.py
 1  # SPDX-FileCopyrightText: 2020 John Park for Adafruit Industries
 2  #
 3  # SPDX-License-Identifier: MIT
 4  
 5  """
 6  This example acts as a BLE HID keyboard to peer devices.
 7  Attach five buttons with pullup resistors to Feather nRF52840
 8    each button will send a configurable keycode to mobile device or computer
 9  """
10  import time
11  import board
12  from digitalio import DigitalInOut, Direction
13  
14  import adafruit_ble
15  from adafruit_ble.advertising import Advertisement
16  from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
17  from adafruit_ble.services.standard.hid import HIDService
18  from adafruit_ble.services.standard.device_info import DeviceInfoService
19  from adafruit_hid.keyboard import Keyboard
20  from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
21  from adafruit_hid.keycode import Keycode
22  
23  button_1 = DigitalInOut(board.D11)
24  button_2 = DigitalInOut(board.D10)
25  button_3 = DigitalInOut(board.D9)
26  button_4 = DigitalInOut(board.D6)
27  button_5 = DigitalInOut(board.D5)
28  
29  button_1.direction = Direction.INPUT
30  button_2.direction = Direction.INPUT
31  button_3.direction = Direction.INPUT
32  button_4.direction = Direction.INPUT
33  button_5.direction = Direction.INPUT
34  
35  hid = HIDService()
36  
37  device_info = DeviceInfoService(software_revision=adafruit_ble.__version__,
38                                  manufacturer="Adafruit Industries")
39  advertisement = ProvideServicesAdvertisement(hid)
40  advertisement.appearance = 961
41  scan_response = Advertisement()
42  scan_response.complete_name = "CircuitPython HID"
43  
44  ble = adafruit_ble.BLERadio()
45  if not ble.connected:
46      print("advertising")
47      ble.start_advertising(advertisement, scan_response)
48  else:
49      print("already connected")
50      print(ble.connections)
51  
52  k = Keyboard(hid.devices)
53  kl = KeyboardLayoutUS(k)
54  while True:
55      while not ble.connected:
56          pass
57      print("Start typing:")
58  
59      while ble.connected:
60          if not button_1.value:  # pull up logic means button low when pressed
61              #print("back")  # for debug in REPL
62              k.send(Keycode.BACKSPACE)
63              time.sleep(0.1)
64  
65          if not button_2.value:
66              kl.write("Bluefruit")  # use keyboard_layout for words
67              time.sleep(0.4)
68  
69          if not button_3.value:
70              k.send(Keycode.SHIFT, Keycode.L)  # add shift modifier
71              time.sleep(0.4)
72  
73          if not button_4.value:
74              kl.write("e")
75              time.sleep(0.4)
76  
77          if not button_5.value:
78              k.send(Keycode.ENTER)
79              time.sleep(0.4)
80  
81      ble.start_advertising(advertisement)