Skip to content

Building an Access Point

butch708 edited this page Apr 7, 2026 · 48 revisions

Access Points (AP) Overview

See openepaperlink.org/aps for a quick summary of AP options.

Important

Release 2.75 was the last release that supported ESP32-S2 based APs or ESP32-S3 APs with less than 16MB flash and 8MB RAM.

An OpenEPaperLink installation consists of different epaper tags wirelessly connected to one or more Access Points. An access point is made of an ESP32-family MCU and some device that can talk IEEE 802.15.4. This can be a ZBS243-based tag, or better, an ESP32-C6.

You can build one of the different access point models yourself, or you can order a kit or even a ready-made one.

If you want to ONLY use BLE-based displays, you can use a single ESP32S3-N16R8 (Note: Hanshow displays are NOT compatible with BLE-only APs at the moment).

Table of Contents


AP Comparison Table

The following build environments are available. If you build one of these APs, you can easily upload the firmware via install.openepaperlink.de and update new releases OTA via the web interface. You don't have to install PlatformIO or VSCode. Binaries are also in the Releases folder.

Name BLE only AP Mini AP v2 Nano AP Nano AP V2 Yellow AP Mini AP v3 / v4 AP & Flasher LilyGo T-Panel S3
Based on esp32-s3 esp32-s2 esp32-s2 esp32-s3 esp32-s3 esp32-s3 esp32-s3 esp32-s3
Radio built in Segmented tag 1.54″ tag esp32-c6 esp32-c6 esp32-c6 1.54″ tag esp32-h2
PSRAM 8MB 2MB 2MB 8MB 8MB 8MB 8MB 8MB
Flash size 16MB 4MB 4MB 16MB 16MB 16MB 16MB 16MB
Extras no display segmented display 1.54″ display no display TFT display TFT display 1.54″ display 4″ display
Max Tags a few hundred ~30 ~30 a few hundred a few hundred a few hundred a few hundred a few hundred
Max Tag Size all BLE sizes any size any size any size any size any size any size any size
BLE Support yes, only no no yes yes yes yes yes
Design by jelmer atc1441 atc1441 atc1441 nic jelmer LilyGo
Designs Link Link Link Case / PCB Case / PCB Link Link Link
Note BLE-based tags only Not recommended, last supported by 2.75 Not recommended, last supported by 2.75 v4 includes interface to flash tags Includes interface to flash tags Off the shelf commercial product

General AP Information

"Spaghetti AP" (DIY clone of the Yellow AP)

See AP Beginners Guide aka "Spaghetti AP" for details.

Designing your own AP

If you design your own AP, keep the following in mind:

  • Try to use the same pinout as an existing AP if you want to have OTA updates.
  • When using an ESP32-C6 as a radio, copy the pinout of the Mini AP v3 or Yellow AP to be able to flash the C6 via the other ESP.
  • Use a 16MB flash and 8MB RAM ESP32-S3 module. Other configurations are hard to get working and won't support OTA. For the ESP32-C6, 4MB flash will do.
  • The pinouts for the different build environments are listed on this page.

Hardware Questions

Can I use an ESP-S2?
We have come a long way. The ESP-S2 used by the Nano-AP-V2 and similar APs is no longer supported.

Why do I need an ESP32-S3 and an ESP32-C6?
You would think the ESP32-C6 can do IEEE 802.15.4 as well as WiFi, but not at the same time! Because the AP has to receive unsolicited messages from the tags, it needs to listen in IEEE 802.15.4 mode continuously. There's no way to do WiFi communication in parallel. (Note: This does not apply to the BLE-only AP).

Can I use a Raspberry Pi and a CC2530 module?
In theory, yes. But you will miss out on most of the cool features built into the ESP32-based APs (like Zero-config Multi-APs or JSON templates). A rudimentary implementation of the protocol is here, but using an ESP32 is highly recommended.


Developer & Build Guide

Primary ESP32 AP PlatformIO Build Configurations

It is essential that the correct environment be selected when building and flashing the ESP32 code.

Name Platform IO Environment Based on PSRAM Flash size
Mini AP v2 OpenEPaperLink_Mini_AP esp32-s2 2MB 4 MB
Nano AP OpenEPaperLink_Nano_AP esp32-s2 2MB 4 MB
Yellow AP ESP32_S3_16_8_YELLOW_AP esp32-s3 8MB 16 MB
Mini AP v3 ESP32_S3_16_8_YELLOW_AP esp32-s3 8MB 16 MB
Mini AP v4 OpenEPaperLink_Mini_AP_v4 esp32-s3 8MB 16 MB
AP and flasher OpenEPaperLink_AP_and_Flasher esp32-s3 8MB 16 MB

Building the Primary ESP32 Firmware from Source

Note

It is only necessary to build the firmware from source if you want to modify it. Otherwise install.openepaperlink.de is the way to go!

The code for an AP's ESP32 processor is located in the ESP32_AP-Flasher/ subdirectory. It is a PlatformIO project.

Warning

If you run Ubuntu, do NOT install PlatformIO using apt-get. A prehistoric version will be installed, and nothing good will happen.

Build the desired image by running:

pio run -e <environment>

(Note: This command is run automatically by the upload target).

Building and Flashing the Primary ESP32 File System

If you have not previously flashed your AP using the web installer, you will need to flash both the file system and the firmware image. Once flashed, you should NOT flash it again unless you want to clear the data.

Build and flash the file system:

pio run -e <environment> -t uploadfs

NB: If you modify files under .../ESP32_AP-Flasher/wwwroot, you must run gzip_wwwfiles.py prior to uploading the filesystem to update the compressed versions in the data subdirectory:

skip@Dell-7040:~/esl/OpenEPaperLink/ESP32_AP-Flasher$ python gzip_wwwfiles.py
Gzipping: upload-demo.html
Gzipping: index.html
Gzipping: edit.html
Gzipping: ota.js
Gzipping: favicon.ico
Gzipping: flash.js
Gzipping: setup.html
Gzipping: main.js
Gzipping: main.css
Gzipping: setup.js
Gzipping: painter.js
Gzipping: variables-demo.html
Gzipping: content_cards.json
Gzipping: jsontemplate-demo.html
skip@Dell-7040:~/esl/OpenEPaperLink/ESP32_AP-Flasher$

Flashing the Primary ESP32 Firmware

You can build and flash the Primary ESP32 firmware by running:

pio run -e <environment> -t upload

Building the ESP32-C6 Radio Firmware from Source

Some APs use an ESP32-C6 for a radio instead of a segmented tag. There are two versions of the C6 radio firmware:

  1. ESP-IDF based: Located in ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP
  2. Arduino based: Located in ARM_Tag_FW/Arduino_OpenEPaperLink_C6_AP

ESP-IDF Firmware

If you use the ESP-IDF version, make sure to select the esp32c6 processor when running the install script (see ESP-IDF Get Started Guide). Build the code by running:

idf.py build

Flashing the ESP32-C6

If your AP does not have a separate serial port for the C6, it must be flashed using the Web GUI's firmware update tab (see flashing the esp32-c6).

Otherwise, flash it via serial port:

idf.py -p <Serial_Port> flash

Tip: Save flashing time during development by using app-flash instead of flash.

You can monitor the debug serial port:

idf.py -p <Serial_Port> monitor

Commands can be combined. Example: build, flash, and monitor:

skip@Dell-7040:~/esl/OpenEPaperLink/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP$ idf.py -p /dev/ttyACM0 build app-flash monitor
Executing action: all (aliases: build)
Running ninja in directory /home/skip/esl/OpenEPaperLink/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/build
Executing "ninja all"...

[deleted]

Bootloader binary size 0x5830 bytes. 0x27d0 bytes (31%) free.
Executing action: app-flash

[deleted]

Executing action: monitor
Running idf_monitor in directory /home/skip/esl/OpenEPaperLink/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP
Executing "/home/skip/.espressif/python_env/idf5.3_py3.8_env/bin/python /home/skip/esp/esp-idf/tools/idf_monitor.py -p /dev/ttyACM0 -b 115200 --toolchain-prefix riscv32-esp-elf- --target esp32c6 --revision 0 --decode-panic backtrace /home/skip/esl/OpenEPaperLink/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/build/OpenEPaperLink_esp32_C6.elf -m '/home/skip/.espressif/python_env/idf5.3_py3.8_env/bin/python' '/home/skip/esp/esp-idf/tools/idf.py' '-p' '/dev/ttyACM0'"...
--- esp-idf-monitor 1.3.4 on /dev/ttyACM0 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
2mI ESP-ROM:esp32c6-20220919
Build:Sep 19 2022
rst:0x15 (USB_UART_HPSYS),boot:0x4c (SPI_FAST_FLASH_BOOT)
Saved PC:0x40022d86
0x40022d86: uart_tx_one_char3 in ROM
...

Clone this wiki locally