Wireless BLE Kinesis Advantage (Custom Controller)

Replaces the stock controller with an nRF52 BLE SOC and MCP23S17 io expander. BLE Kinesis with great (few months) battery life.

Similar projects worth following
Turns a Kinesis Advantage keyboard into a wireless BLE keyboard by replacing the stock controller with an Arduino running custom firmware.

Comes with my own settings but you can easily change it in the code to your own.
- Custom mapping
- Multiple Layers
- Layer key tap = normal key press

Running off a 3,000 Lipo:

V4 (SPI) = 100-130 days (keyboard only) & 50-70 days (with Power Button LED). Does NOT have RGB button.

V3 (SPI) = Power drain issue from serial chip. Last about 16 - 20 days.

V2 / V1 (i2c) = 25-30 days

Power States
- Keyboard Only = i2C (7mA) / SPI (2mA)
- Battery LED = 0.06mA x 4 = 0.24mA (Turns off after 3 mins)
- Power Button LED = 1ma (on whenever keyboard is on)
- Sleep = 0.05mA to 0.1mA

Other Features
- keyboard LEDs as battery-life indicator and charge status
- Sleep mode after 15 mins of idle time
- Auto wake-up on key press

I previously made my Kinesis wireless using a USB host, Adafruit's Powerboost and a nRF52 Feather but the battery life was terrible (1-2days). As soon as I finished that project, I set out to find a way to make the Kinesis wireless and have battery life that could last months. As the stock controller consumed around 26mA on idle, the controller needed to be replaced.

This is probably my 4th Arduino project, and first time routing a board, so expect it to be a little rough but it's still in development so let me know if you come across any bugs.

Boards were ordered from PCBgogo. I found their service to be great, price was reasonable, shipping and production was blazing fast. I ordered on Saturday night and by Tuesday afternoon the boards arrived in Japan. 

kinesisBLE V2.sch

i2C / TWI

sch - 207.36 kB - 10/06/2018 at 06:39


View all 15 components

  • V6 Gerbers Pushed

    Mike W03/21/2021 at 13:25 0 comments

    Recently had to swap my mac, and ended up losing the schematic files for V6. Luckily I could still download the gerbers for the first version that was made. Everything's tested to be working, but some of the silkscreen weren't updated, so there may missing labels.

  • V6 coming soon!

    Mike W10/11/2020 at 05:12 1 comment

    Will be releasing a v6 of this board soon that will allow hot-swapping of the feather. This will allow you to re-use a board, and other components if the feather fails.

  • V5 Board - nRF52840 - USB Hot-Switching

    Mike W03/11/2020 at 04:47 1 comment

    Recently required a USB keyboard, so I had to update the PCB (v5) in order to work with the nrf52840 Feather Express. The idea was to enable hot-switching from bluetooth to USB automatically when connected via USB, and back to bluetooth on disconnect. Everything has been updated, and tested to be working.

    You can find the pcb gerber files, and firmware on the github by downloading the latest release 1.x.

    Got a few spare boards, if you'd like one they'll be $30 each including shipping.

  • New Firmware

    Mike W06/09/2019 at 06:15 0 comments

    So after getting tired of messing around with the delay & loop count and running into latency or key chatter, I came across Matt Vilim's Kinesis Controller project. His firmware could handle multiple key state changes, where previously I was sending a HID report per state change.

    After porting his firmware the keyboard latency was fixed without incurring any key chatter.

    However, I was occasionally getting stuck keys due to debouncing. Luckily I found Stapelberg's more recent project, KinX controller and ported the debouncing algorithm and that seems to have fixed it for now.

  • Figured out source of keys getting stuck - Not the keyboard!

    Mike W05/15/2019 at 17:45 0 comments

    Turns out after creating a new board, modifying firmware & hours debugging hardware, firmware, and mac os, the issue was due to (Karabiner)[] and mac os clashing on keyboard control and not the Kinesis BLE's fault at all.

    I've since removed Karabiner and have fixed the issue completely.

    I suppose it wasn't a total waste of time, the debugging revealed that at the previous setting of 7ms delay, I could potentially run into key chatter if I type at upwards of what I assume to be 300wpm+ (me smashing keys as fast as I can). This is something I can't replicate at 2ms delay so I'll stick with 2ms delay and loop debouncing 3 times for now, depending on actual battery life (expecting a drop from 6 to 2+ months).

    Diving back into the firmware also let me fix a bug that resulted in inconsistent rest timer alerts.

  • Eliminate Chatter & Increase Responsiveness

    Mike W05/13/2019 at 06:07 0 comments

    Noticed that I was still getting some key chatter intermittently during intense bursts of typing (130wpm+). Which was rare but still still resulted in stuck keys.

    To fix the issue:

    - Decreased the delay from 7ms -> 4ms per loop.

    - Increased the Debouncing loop count from 2 -> 3

    Resulting in a delay per key event of...

    1 + 4 + 1 + 4  = 10ms

    Where previously it was...

    1 + 7 = 8ms

    The decrease in delay inevitably means we'll see higher power consumption but since I'm running on 6 months without a charge (4,400mA LiPo), losing a few months for more consistent performance doesn't seem like a big deal.

    Estimated increase in power consumption

    1/4 = 0.25, where previously it was 1/8 = 0.125 -> 2x more power consumption.

    3+ months of heavy usage is fine, considering I have to charge my mouse (MX Ergo) every 2 weeks!

  • V4 tested and a note on Adafruit nRF52 Arduino Board Lib Ver

    Mike W05/11/2019 at 16:31 0 comments

    Finally got around to actually building a V4 Board and it works. *master* branch requires no modifications.

    If you're building this board, note that you need the following:

    - nRF52 Feather Express (nRF52832 *not nrf52840*)

    - Install *version 0..8.6* of Adafruit nRF52 board lib for Arduino. Any later version contains API changes and a different bootloader version. So your best bet is 0.8.6.

    *Reason for building a V4*

    My previous V3 board worked flawlessly for 6 months and then decided to randomly start getting stuckkkkkkkkkkkkkkkkk keys. It was infrequent in the beginning, maybe once every 2 days but eventually turned into once every 2-3 hours. That's just  unacceptable. I would clean the PCB and that works for a while but it comes back after a few days.

    To make sure it isn't firmware related I decided to build a fresh board.

  • Newer != Better - Stick with V4 & nRF52832

    Mike W04/28/2019 at 06:38 0 comments

    Just spent 3 hours converting a V3 board to work with the new feather (nRF52840)[]. The conversion worked but it was utterly pointless.

    TL;DR - Stick with V4 board + nrf52832. 840 offers no extra benefit while consuming a ton more power.

    Pin Changes

    - Physical pin location change - A6 to AREF

    - Lost a second 3.3V OUTPUT - Only get one on the 840

    - Can't seem to use designated pins for GPIO - TX/RX, SCL/SDA etc. 

    The differences was enough to require changes in the firmware as well as cutting 4-5 traces and re-wiring the board. Unfortunately after all that, we still don't get extra pins when compared to the 832 because the 840 doesn't let you use all the pins as GPIO.

    At this stage, I invested a good 2 hours of my Sunday, so I may as well finish it and see if there might be any benefits in performance / power consumption.

    nRF52840 Eats A Lot More Current

    The 832 only used about ~2.4mA when powered (ready to type). Whereas the 840 used a mind-boggling ~4.1mA. Over 70% increase in power consumption. Looking at the forums (adafruit, nordic, nrf52 github), it appears that I'm not the only one puzzled (and annoyed) by this surprise.

    In other words...

    I wasted a Sunday morning so you didn't have to. Get your hands on the (old feather)[] if you're trying to build this. 

  • Battery Going on 118 Days + nrf52840 Update Coming Soon

    Mike W04/22/2019 at 10:14 0 comments

    TL;DR -- From this point forward if you are building *master* branch, use V3 board. 

    Keyboard has been working almost flawlessly for the past 6 months. Battery has exceeded expectations and currently going on 118 days since last charge. I've only plugged it in a few times (less than 10) to flash new firmware, without charging it for any extended period of time.

    No issues with key responsiveness / input delay. I can type at 120wpm without any skips. Unfortunately that's the upper limit of my typing speed so if anybody types faster, let me know!

    2 minor issues that have come up:

    • Keyboard pairing issue - Intermittently (once every 3-4 weeks) requires clearing nrf52 paired devices. I haven't had an issue with this since turning off FireVault on my mac. Nonetheless the combo key exists which makes this a 10 second process.
    • Occasionally keys get stuck - Happens maybe once every 2-3 days and I end up typing ssssssssssssssome key. Easily fixed by restarting the keyboard. I suspect it's due to my soldering or the hole in the keyboard (where the cable use to be) allowing air in.

    With those 2 issues in mind I've decided to upgrade to the recently released nrf52840 feather by Adafruit.

    nrf52840 doesn't require a separate USB serial chip so it should result in even better power consumption! This also means we get the TX/RX pins back so we get enough pins to get RGB for the power LED back!

  • 4,400 mAh Battery going on 53 days!

    Mike W02/16/2019 at 08:52 0 comments

    This is currently the longest time I've gone without a charge and so far real life battery consumption is line with expectations.

    Although the battery measurements need to be re-calibrated. Currently it shows the battery losing the first 50% in a week or so but hangs on at over 50% for over a month. But even after calibration, the measurement accuracy would be dependent on too many factors anyway (battery capacity, temperature, make etc.). So the only take-away is that the battery consumption is accurately 1-2mA during usage.

    The keyboard has been under moderate usage (8-12 hours) per day and is currently still going.

View all 24 project logs

  • 1
    Get the PCB made

    Eagle files attached to this project. I used PCBGogo to make mine.

  • 2
    Download Firmware

    Clone the repo, open in Arduino. Straight-forward stuff.

  • 3

    I tried to label all the parts on the PCB and everything lines up so it should be pretty easy.

    If you're having trouble soldering the pins on the flex connectors, get a better iron! I upgraded to a fx-888 and my soldering time for the board went from 1 hour to about 15 mins.

View all 3 instructions

Enjoy this project?


Discussions wrote 03/21/2021 at 09:00 point

Well this is amazing. I have a pair of Advantages with the original Stabelberg's controller and was looking to hack in a adafruit nrf52840 to replace the teensy [edit: exactly to enable bluetooth LE].  You solution looks far superior!  If you fancy selling bare or assembled PCBs for the eventual V6 then I'd be down for 2 or 4.

  Are you sure? yes | no

Mike W wrote 03/21/2021 at 13:17 point

Sorry don't have any spares sell. Considering labor costs you'll probably be better off to building one yourself as well.

  Are you sure? yes | no

Kevin Chow wrote 02/18/2021 at 03:39 point

Hey mike, do you have any spare boards as of right now? With pcbgogo how many do I have to buy solo?

  Are you sure? yes | no

jp wrote 02/19/2021 at 20:42 point

I have some of these available: They also work with the Classic in addition to the Advantage.  It's the same schematic but slight layout changes to work with more versions of the Kinesis.

I just started testing a ZMK port.

  Are you sure? yes | no

Mike W wrote 01/21/2021 at 00:48 point

Hey @amitg sorry for the lack of updates. I've finished re-routing the board, but haven't had the time to clean it up, and test it out. If you're looking to make a V6 after I complete testing it (building an actual board) that could be 2-3 weeks  away.

  Are you sure? yes | no

amitg wrote 01/21/2021 at 02:06 point

no worries, I’ll wait for the testing to complete.

  Are you sure? yes | no

amitg wrote 01/20/2021 at 17:31 point

waiting for the v6 board to start my keyboard modding journey!

  Are you sure? yes | no

Mike W wrote 10/11/2020 at 05:09 point

@petreza-github sure can, you'd just need to get another nrf52840 as a receiver. You can probably piece together everything you need from the current firmware. The only thing missing would be the communication between the sender/receiver.

  Are you sure? yes | no

petreza-github wrote 02/14/2021 at 17:32 point

I was able to connect my Kinesis Freestyle 2 Blue (don't have Advantage yet) to one of my KVM (TESmart 4-port 4K 60Hz) switch's high speed USB ports using RaspiKey ( on a Raspberry Pi Zero W. It did not work on the slow port, so there I still use my Logitech keyboard for the <Left-CTRL><Left-CTRL> + < 1,2,3,4> to switch the KVM Ports. Was also able to put an un-powered USB hub between the KVM and the Pi to have it share a long USB cable with a wireless mouse receiver and thumb drives. Everything runs on the USB power from the KVM.

Seems to work fine without any configuration adjustment. If anyone can test RaspiKey with a modded Advantage, I would much appreciate it.

  Are you sure? yes | no

Strczynsky wrote 10/09/2020 at 09:36 point

I need 2 boards v5 and offer to group buy.  If you are about to place an order and are willing to share, please announce.

  Are you sure? yes | no

petreza-github wrote 09/25/2020 at 05:36 point

Can this project be modified/extended so that there is a USB connected bluetooth receiver which converts the bluetooth to regular USB HID device - similar to how Logitech Unifying Receivers show up just like regular keyboard (and mouse) - no need for pairing at the OS level.

I want to connect a Kinesis Advantage (Advantage 2?) keyboard wirelessly to a KVM switch, which in turn would connect to various computers running various OSes - bluetooth pairing will not be even possible in some cases. Thanks!

  Are you sure? yes | no

Mike W wrote 09/01/2020 at 12:43 point

 @voidmain, my last flash was with 0.18.5 -- works great!

@Jeff Stern sorry for the late reply. I do have spare v5 boards if you're still interested.

  Are you sure? yes | no

voidmain wrote 08/30/2020 at 22:47 point

Hi Mike,

Can I know what BSP version did you use on the v5 board with the 52840? Thanks.

  Are you sure? yes | no

Jeff Stern wrote 08/10/2020 at 21:46 point

Mike - Love this! How is V5 going?  And still have a spare board (V4+) lying around? (Just asking before I have one made..) Thx!

  Are you sure? yes | no

Mehmet S. wrote 10/04/2019 at 17:59 point

Hi Mike,

This is a fantastic project and could really help my workflow out. I'm a total PCB ordering novice, however, so I wanted to request some help. It seems that most PCB manufacturers want a Gerber file to make an order. Your EAGLE files can be converted with some online tools, but I'm not sure how much I trust the conversion. Is there any chance you could upload a Gerber file for easier ordering?

Thank you for this fantastic project! really looking forward to getting it going. Thanks.

  Are you sure? yes | no

Mike W wrote 10/09/2019 at 13:15 point

Sorry for the lateness. The gerber's are included in the github repo:, enjoy!

I've got a spare V4 board lying around, so if you're keen I can ship it provided you pay for shipping. Shipping will be from Japan though.

Also when I get my hands on a nrf52840, I'll be trying to release V5 which would allow the keyboard to switch between bluetooth, and USB drivers, so you might want to hold out depending on how important that is for you.

  Are you sure? yes | no

Mehmet S. wrote 10/09/2019 at 14:20 point

that would be amazing! I’ll message you on GitHub. I’ll hold off on v5 for now as I’m not sure I’ll need that feature any time soon, but it’s good to know that’s around the bend. Plus that just sounds like more opportunities to tinker in the future... :) 

thanks again! 

  Are you sure? yes | no

Mehmet S. wrote 10/09/2019 at 15:08 point

Actually, apparently GitHub doesn't allow for PMs anymore. I messaged you through here. 

  Are you sure? yes | no

Mike W wrote 07/23/2019 at 06:00 point

Hi, sorry for the late reply. Sure, the one I'm currently using is this one.

Anything around 3,000 - 4,000 mAh would be ideal in terms of charge time (6-8 hours) and usage (~ 6 months). I once tried a 20,000 mAh lipo and it took forever to charge.

Since you're new to working with batteries. Just buy pre-made ones. Do NOT join batteries together creating larger packs yourself.

  Are you sure? yes | no

David Balatero wrote 06/25/2019 at 22:29 point

Hi Mike - can you recommend a battery for this project? As someone new to ordering batteries and working with them (and not clear on the dimensions internally or any other "gotcha" specs that I might need to know about) it's really helpful to just have a sample link alongside the battery part with "you can just buy this one and it'll work pretty good." Thanks!!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates