Skip to content


Folders and files

Last commit message
Last commit date

Latest commit



14 Commits

Repository files navigation



elink is a daisy chain of electronic shelf labels (ESL). They are linked together via UART, in such a way that the TX line of a node is connected to the RX line of the next. The first node is special, as it can be connected to via Bluetooth Low Energy (BLE).

The ESLs are Hanshow Stellar-MN2, an e-paper, BLE capable device that uses the Telink TLSR8359 SoC under the hood.

Repository organization

Directory Description
code/ Firmware for the displays - based on atc1441/ATC_TLSR_Paper
clients/python-cli A complete Python command line client for elink
clients/web/ A simple web client for elink. Supports only drawing text via BLE. It is additionally deployed on
case/ Fabrication files for the case - SVGs templates for laser cutting and 3D-printable supports

Building the code

The Dockerfile sets up a Linux Alpine container with all the dependencies and toolchain.

# Build the Docker image.
$ cd code/
$ docker build -t elink-docker .
# Mount the code/ directory inside the container and run `make`
$ docker run -it --rm -v "${PWD}":/app elink-docker
# make

The firmware will be created in ./code/elink.bin.


The Dockerfile.devcontainer defines an image for VSCode's devcontainer, and .c_cpp_properties.json sets up the include path inside the container. Once set up, opening code/ in VSCode should allow you to edit the code with auto-complete and build it with make inside VSCode's built-in terminal, that runs inside the Docker container. The toolchain, SDK and custom linker script should be set up automatically.


The code is released under the MIT license, and fabrication files (STL, SVGs) under CC BY-NC-ND 4.0.


Here's drawing "Hello, world" over BLE with the web client: