Repository navigation
Building an Access Point
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).
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 |
See AP Beginners Guide aka "Spaghetti AP" for details.
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.
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.
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 |
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).
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 uploadfsNB: 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$You can build and flash the Primary ESP32 firmware by running:
pio run -e <environment> -t uploadSome APs use an ESP32-C6 for a radio instead of a segmented tag. There are two versions of the C6 radio firmware:
-
ESP-IDF based: Located in
ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP -
Arduino based: Located in
ARM_Tag_FW/Arduino_OpenEPaperLink_C6_AP
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 buildIf 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> flashTip: Save flashing time during development by using app-flash instead of flash.
You can monitor the debug serial port:
idf.py -p <Serial_Port> monitorCommands 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
...