/ CPB_Keybutton_BLE / code.py
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)