Open-source IKEA Bekant controller board
Alternatives To Megadesk
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
2 days ago100lgpl-2.1C++
Arduino generic menu/interactivity system
Esp Dash771
a month ago12gpl-3.0C++
Blazing fast library to create a functional dashboard for ESP8266 and ESP32
a year ago7otherC++
An Arduino library for using a single button for multiple purpose input.
5 days agogpl-3.0HTML
Open-source IKEA Bekant controller board
2 years ago1gpl-3.0C++
Arduino library to debounce button switches, detect presses, releases, and long presses
4 days agomitC++
An adjustable, compact, event-driven button library for Arduino that debounces and dispatches events to a user-defined event handler.
a year ago13mitC++
Arduino library for debouncing momentary contact switches, detect press, release, long press and sequences with event definitions and callbacks.
3 years ago20gpl-3.0C++
This is a library for creating a MIDI controller using an Arduino or Teensy board.
8 months ago40gpl-3.0C++
Maslow Firmware
3 years ago9apache-2.0Java
Retro watch is open source smart watch project using Arduino and Android.
Alternatives To Megadesk
Select To Compare

Alternative Project Comparisons

Firmware build


Do you wish your IKEA Bekant had memory buttons? I sure did. So I made megadesk. Design goals were to have it fit in the original housing and use as many stock parts as possible, be completely independant of the existing controller, as well as store any number of memory positions.

For sale on Tindie - Plug and Play!

I've setup a store on Tindie for those who wish to order a ready to go, plug and play version. It comes with a fully assembled PCB as well as the cable you will need to connect it. No soldering or assembly required!



The factory recalibration routine has been implemented. The original BEKANT controller is no longer needed to recalibrate motors. This will cause the desk to move to the lowest possible extremity. Please exercise caution and be prepared to unplug the power if needed. Any interruption to this procedure requires a power-cycle.

Serial control

Enables serial input/output for what the megadesk is doing and to send commands. Some people wanted to have a smart/connected megadesk, but due to the size limitations of the space inside the case, an external module is the best solution. A lot of discussion in PR #12 and PR #58.

More information in There's also specific details on esphome.

Custom MIN/MAX

Enabled by default, no limits.

This allows you to specify custom values for the minimum and maximum height of your desk. This is useful if you have things stored underneath, or maximum height limitations (shelf on the wall).

  • Memory 11 will use the current desk height to set the minimum limit. If already set, it will clear it.
  • Memory 12 will use the current desk height to set the maximum limit. If already set, it will clear it.

Audio Feedback

Disabled by default.

Adds extra audio feedback when pushing buttons or using functions.

Dual-button memory

Disabled by default.

This allows storing unique memory positions against each button. When enabled, you could save a double-click position for the up button as well a double-click position for the down button.

Disassembly of the existing control unit

I now have a video with a few tips on disassembling the IKEA Bekant controller and installing megadesk. Due to popular request, I now have a second video with live surgery of a brand new, unopened control unit.

NOTE: While the recalibration feature has been added to megadesk, it is recommended to keep your original board.


Unfortunately the beeps aren't captured well in the video unless you turn up the volume.

Quick Commands

UP pushes Function Audio Feedback
2-10 Memory positions # of beeps + high tone (saving), # of beeps (recall), # of beeps + sad tone (recall, no memory saved at that location)
11 Set the lowest/minimum height to current position, or, reset back to default (toggles) 4 low beeps when setting a limit. Single low beep - disabled.
12 Set the highest/maximum height to current position, or, reset back to default (toggles) 4 high beeps when setting a limit. Single high beep - disabled.
14 Recalibration procedure, desk will lower down to the lowest limits (Will begin moving)
15 Reset Fanfare
16 Newer units, no operation. Units before Feb 2021 - toggle different variants.
17 Toggle audio-feedback mode double beep enabled. single beep disabled.
18 Toggle both-button mode double beep enabled. single beep disabled.

Setting and Recalling memory slots


To set assign a memory slot you press the up button two or more times. On the final button press you hold until you hear a tone that indicates what slot you have assigned (2 beeps, 3 beeps, etc).


To recall a memory slot you push the up button the number of times for that memory slot (2 for first slot, 3 for second slot, etc). If you try to recall a memory slot that has not been saved you will hear an "error" chime indicating that no height information could be recalled.


  1. Have you tried turning it off again? :)
    • Seriously - from testing many of these units, about 1 out of 20 times the handshake seems to fail as it does contain some random elements. A simple power cycle will provide a new handshake and the unit will power up.
    • Try unplugging the desk from the wall and plugging it back in (With megadesk connected)
    • Alternatively, try powering on the desk with NO controller attached, and then plugging in the megadesk after the desk is powered on.
    • Note that the power supply that comes with the BEKANT can store a charge for quite some time. It might be necessary to leave it unplugged for 60-120 seconds for it to lose that charge.
  2. Is the safety key inserted? It is still required for the motors to engage. You will not hear any beeps when using buttons if it is removed.
  3. Try different variant modes described above by pushing UP 16 times. (Pre Feb-2021 units only)
  4. Test the buttons
    • Holding DOWN while powering on will wipe the EEPROM and enter a button test mode, where the up/down buttons can be held to test that they are working - a power cycle is required to exit this mode.
    • If they don't work
      • Ensure the safety key is fully inserted
      • Ensure the ribbon cable is seated far enough
      • If the FPC connector has a latch, ensure it is latched
      • You can clean the ribbon cable gently with a swab and rubbing alcohol which has been reported to help with intermittent issues
  5. Factory Reset
    • Holding DOWN while powering on will wipe the EEPROM and enter a button test mode (see above) - a power cycle is required to exit this mode.
  6. Recalibrate/reset the motors
    1. Factory controller
      • This step must be done with the ORIGINAL BEKANT controller.
      • Hold the UP and DOWN buttons for 8 seconds, after that let go of up while maintaining the pressure on the down button.
      • The desk will lower until it stops on its own.
      • Let go of all buttons, and test regular desk functionality with the original controller.
      • Once functionality is confirmed, replace with megadesk.
    2. Megadesk
      • Push the UP button 14 times.

Hacking, contributing and DIY

This has been moved to

esphome configuration

esphome example configuration avalible at, and other sample configurations in esphome folder

Popular Arduino Projects
Popular Button Projects
Popular Hardware Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.