Skip to content

AlexWoodblock/ArduinoBleKeyboard

Repository files navigation

License

Project logo

Arduino BLE keyboard

This project was born out of curiosity and a certain aversion to buying a Bluetooth keyboard that will sit and collect dust most of the time.

It was also a project to explore how does Swift UI fare on Mac OS (spoiler: quite good, but not without its' problems) and to to work with custom-defined BLE interaction protocol.

Components of the project

  • Client for macOS that sends keypresses to Arduino Nano 33 BLE
  • Firmware for Arduino Nano 33 BLE that takes the data sent by client and emulates keypresses as a Human Interface Device

BLE interactions

BLE specifications in this firmware are pretty simple:

  • Device advertises itself with the name Virtual Keyboard
  • Service 98AD is advertised - let's refer to it as keyboard service
  • Characteristic 98AF is a part of keyboard service. It can only be written to without confirmation. Let's refer to it as RX characteristic.
  • On every write to RX characteristic, a keypress will be generated based on the data written.

Data format for RX characteristic

  • Size: 32 bits
  • First 16 bits are for HID key code (the key itself) as an unsigned integer
  • Second 16 bits are for HID key modifier (Shift, Ctrl, etc.) as an unsigned integer
  • Integers should be big-endian

It's not intended to be used as a keyboard replacement for something serious - if you need a keyboard, just go and buy one. This is mostly for fun and to see what interesting things could be squeezed out of Arduino.

Known problems

  • Sending input while screen is locked will lock up the device, leading to BLE connection loss sometimes.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published