diff --git a/CPB_Keybutton_BLE/cpb_keybutton_ble.py b/CPB_Keybutton_BLE/cpb_keybutton_ble.py new file mode 100644 index 000000000..bee66db19 --- /dev/null +++ b/CPB_Keybutton_BLE/cpb_keybutton_ble.py @@ -0,0 +1,77 @@ +""" +This example acts as a BLE HID keyboard to peer devices. +Attach five buttons with pullup resistors to Feather nRF52840 + each button will send a configurable keycode to mobile device or computer +""" +import time +import board +from digitalio import DigitalInOut, Direction + +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_ble.services.standard.device_info import DeviceInfoService +from adafruit_hid.keyboard import Keyboard +from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS +from adafruit_hid.keycode import Keycode + +button_1 = DigitalInOut(board.D11) +button_2 = DigitalInOut(board.D10) +button_3 = DigitalInOut(board.D9) +button_4 = DigitalInOut(board.D6) +button_5 = DigitalInOut(board.D5) + +button_1.direction = Direction.INPUT +button_2.direction = Direction.INPUT +button_3.direction = Direction.INPUT +button_4.direction = Direction.INPUT +button_5.direction = Direction.INPUT + +hid = HIDService() + +device_info = DeviceInfoService(software_revision=adafruit_ble.__version__, + manufacturer="Adafruit Industries") +advertisement = ProvideServicesAdvertisement(hid) +advertisement.appearance = 961 +scan_response = Advertisement() +scan_response.complete_name = "CircuitPython HID" + +ble = adafruit_ble.BLERadio() +if not ble.connected: + print("advertising") + ble.start_advertising(advertisement, scan_response) +else: + print("already connected") + print(ble.connections) + +k = Keyboard(hid.devices) +kl = KeyboardLayoutUS(k) +while True: + while not ble.connected: + pass + print("Start typing:") + + while ble.connected: + if not button_1.value: # pull up logic means button low when pressed + #print("back") # for debug in REPL + k.send(Keycode.BACKSPACE) + time.sleep(0.1) + + if not button_2.value: + kl.write("Bluefruit") # use keyboard_layout for words + time.sleep(0.4) + + if not button_3.value: + k.send(Keycode.SHIFT, Keycode.L) # add shift modifier + time.sleep(0.4) + + if not button_4.value: + kl.write("e") + time.sleep(0.4) + + if not button_5.value: + k.send(Keycode.ENTER) + time.sleep(0.4) + + ble.start_advertising(advertisement)