Frekvens is a custom ESP32 mod for IKEA Frekvens and Obegränsad LED displays, adding dozens of new display modes, smart-home control, and real-time integrations — all fully open-source and customizable.
The modular firmware is designed for flexibility and can be adapted to third-party or custom display configurations.
- Features
- Hardware
- Getting started
- Upload to the device
- Smart-home integrations
- API
- FAQ
- Troubleshooting
Frekvens replicates all original display modes while introducing a range of new features, including smart-home integration, streaming content, interactive tools, and real-time services.
- Web app
- 47 display modes:
- Animations
- Clocks
- Interactive tools
- Text scroller
- Streaming content
- Weather displays
- 17 extensions, including:
- Smart-home integrations
- Notifications
- Accessories
- API interfaces
- 7 fonts
- Extensive documentation
Frekvens works with most Wi-Fi enabled ESP32 boards that support the Arduino framework, as listed in PlatformIO's board registry.
For new installations, the ESP32-S3 is recommended due to its performance and broad compatibility. Compact boards (such as this or this) are sufficient for most use cases.
Because board layouts vary widely, the documentation refers to pin types rather than fixed pin numbers. For board-specific guidance, see the discussions section — many common configurations are already covered there. Further details are available in the documentation.
If desired, extra hardware can be added:
- IR receiver — lets you control the device with a standard TV-style remote
- Microphone — syncs the display with music
- Photocell — automatic ambient brightness adaption
- RTC clock — keeps accurate time, even without internet
IKEA Frekvens already has a built-in microphone.
Each display model has its own hardware setup guide:
- IKEA Frekvens
- Desolder the
U2chip - Connect power, SPI and
EN - Microphone input available at
U3pin 7 orU2pin 11
- Desolder the
- IKEA Obegränsad
- Desolder the
U1chip - Connect power, SPI and
EN
- Desolder the
For the smoothest setup, we recommend PlatformIO IDE for VS Code. PlatformIO also provides integrations for a wide range of other editors and IDEs — use whichever environment you are most comfortable with.
-
Via Git (recommended) – In your IDE, select Clone Git Repository and enter:
https://github.com/vipnytt/frekvens.git -
From the Releases page – If you prefer a direct download, grab the latest stable
.zipor.tar.gzarchive from the Releases page.
To build the Web UI, Node.js is required. The LTS version is recommended, but any recent version will work.
Specify your board in the platformio.ini file. If your board is not already listed, check the PlatformIO Boards reference.
platformio.ini example:
[env:seeed_xiao_esp32s3]
board = seeed_xiao_esp32s3Configuration is split into shared and firmware-specific settings:
- Shared variables (used by the firmware, web app, and tools) are defined in
.env - Firmware-only settings go in
firmware/include/config/secrets.h
This separation keeps common parameters in one place, while allowing firmware builds to have their own purpose-specific configuration.
Add one if the following to .env:
# IKEA Frekvens
ENV_FREKVENS=''# IKEA Obegränsad
ENV_OBEGRANSAD=''Define pin assignments in secrets.h:
// IKEA Frekvens
#define PIN_CS 1 // LAK
#define PIN_SCLK 2 // CLK
#define PIN_MOSI 3 // DA
#define PIN_OE 4 // EN
#define PIN_SW1 5 // SW1
#define PIN_SW2 6 // SW
#define PIN_MIC 7 // U3 pin 7// IKEA Obegränsad
#define PIN_CS 1 // CLA
#define PIN_SCLK 2 // CLK
#define PIN_MOSI 3 // DI
#define PIN_OE 4 // EN
#define PIN_SW2 5 // SWWi-Fi credentials can be defined in secrets.h or configured through the web UI.
#define WIFI_SSID "name"
#define WIFI_KEY "secret"If no credentials are set, the device enters access point mode on first startup. Holding any button during startup also activates AP mode.
Coordinates are required for weather services:
#define LATITUDE "0.000"
#define LONGITUDE "0.000"Check out the Documentation for more configuration options.
In the PlatformIO menu, there’s a "Upload" button which uploads the firmware, and a "Upload Filesystem Image" button which uploads the Web app. You’ll need to upload both.
To update Over-the-Air, extend your environment:
extends = env:upload_otaSpecify upload details:
upload_protocol = espota
upload_port = example.local
;upload_flags = --auth=passwordAs an alternative, it’s also possible to manually upload the firmware.bin and littlefs.bin/spiffs.bin files via the Web app.
Control power and brightness via Amazon Alexa, using voice, app, or automation.
Home Assistant is deeply integrated and supports full control over power, brightness, modes, extensions, and more.
Four API interfaces are supported:
Refer to the Wiki for supported endpoints and use cases.
Hold any button during startup to activate the Wi-Fi hotspot. Connect to it with your phone or computer, and a configuration portal will open. From there, you can configure new network credentials, and the device will remember multiple networks.
First, ensure that the Web app has been uploaded to the device using the "Upload Filesystem Image" button in the PlatformIO menu. After a successful upload, the device will log its IP address and domain name to the terminal at boot. You can then access the web UI by entering this address into your browser.
Flicker or "snow" usually indicates EMI or poor wiring. Avoid jumper wires and breadboards. Refer to wiring recommendations in the device-specific setup guides.
If display content is otherwise intact, try lowering the frame rate.
If the device is rebooting unexpectedly, this can be a symptom of a software or hardware issue. The ESP32’s USB port is suitable for firmware uploads and testing, but it is not designed to supply the high current levels that a display might draw during continuous operation.
If terminal logs include error messages, please report an issue.