https://github.com/jjwbruijn/OpenEPaperLink Skip to content Toggle navigation Sign up * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code Explore + All features + Documentation + GitHub Skills + Blog * Solutions For + Enterprise + Teams + Startups + Education By Solution + CI/CD & Automation + DevOps + DevSecOps Case Studies + Customer Stories + Resources * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Pricing [ ] * # In this repository All GitHub | Jump to | * No suggested jump to results * # In this repository All GitHub | Jump to | * # In this user All GitHub | Jump to | * # In this repository All GitHub | Jump to | Sign in Sign up {{ message }} jjwbruijn / OpenEPaperLink Public * Notifications * Fork 7 * Star 103 103 stars 7 forks Star Notifications * Code * Issues 7 * Pull requests 0 * Actions * Projects 0 * Wiki * Security * Insights More * Code * Issues * Pull requests * Actions * Projects * Wiki * Security * Insights jjwbruijn/OpenEPaperLink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. master Switch branches/tags [ ] Branches Tags Could not load branches Nothing to show {{ refName }} default View all branches Could not load tags Nothing to show {{ refName }} default View all tags Name already in use A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? Cancel Create 4 branches 0 tags Code * Local * Codespaces * Clone HTTPS GitHub CLI [https://github.com/j] Use Git or checkout with SVN using the web URL. [gh repo clone jjwbru] Work fast with our official CLI. Learn more about the CLI. * Open with GitHub Desktop * Download ZIP Sign In Required Please sign in to use Codespaces. Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Launching Xcode If nothing happens, download Xcode and try again. Launching Visual Studio Code Your codespace will open once ready. There was a problem preparing your codespace, please try again. Latest commit @nlimper nlimper fixed wind icons even more ... 0cc7ba4 May 21, 2023 fixed wind icons even more 0cc7ba4 Git stats * 306 commits Files Permalink Failed to load latest commit information. Type Name Latest commit message Commit time .github Update bug_report.md May 21, 2023 19:19 ESP32_AP-Flasher fixed wind icons even more May 21, 2023 21:20 Hardware Create README.md May 17, 2023 01:59 Tags-specs Update troubleshooting.md April 17, 2023 22:47 binaries Removed button option in settings.h, firmware now checks for its pres... May 21, 2023 01:42 fw_dumps added some more binaries February 23, 2023 23:49 zbs243_AP_FW Painter May 16, 2023 15:34 zbs243_Tag_FW Removed button option in settings.h, firmware now checks for its pres... May 21, 2023 01:42 zbs243_shared AP 0014 - Support for messages on segmented AP May 9, 2023 11:27 .gitattributes fresh December 26, 2022 22:33 .gitignore fresh December 26, 2022 22:33 README.md small typos May 16, 2023 22:53 tag_types.h AP 0014 - Support for messages on segmented AP May 9, 2023 11:27 zbs_flasher.py altradio-header support for zbs_flasher March 23, 2023 16:28 View code [ ] OpenEPaperLink [?][?][?][?][?][?]THIS IS NOT PRODUCTION READY![?][?][?][?][?][?] Compatibility Aims The protocol explained Todo: Tags: AP: ESP32: Known issues: Hints and excuses: Credits Large parts of this repo are based on code written by, and wouldn't be possible without the hard work of: Automated Builds README.md OpenEPaperLink [?][?][?][?][?][?]THIS IS NOT PRODUCTION READY![?][?][?][?][?][?] This is not a final, polished codebase. Not by a long shot. You'll need some knowledge on the use of these tags. A very good place to start is here: https://github.com/atc1441/ZBS_Flasher. You'll need to fix issues yourself, troubleshoot stuff. Once again: this is not for everyone. This is an alternative firmware and protocol for the ZBS243-based Electronic Shelf Labels - ESL / price tags by Solum / Samsung. board Compatibility It is currently compatible with the following tags: * 4.2" * 2.9" * 1.54" * Segmented (work in progress) On the 2.9" tags, both the UC8151 and SSD1619 display variants are supported Aims * Low power (currently around 9uA with a minimum of 40 second latency) * Even lower power when there's no AP around * Low latency (tags can check for new data every 40 seconds) * High transfer speeds - It can do about 5kbyte/s in favorable RF conditions. This allows for lower power * RF-friendly - We don't need to acknowledge EVERY packet, and we don't need to transfer data we already have The entire setup requires a few tags, and an ESP32. A tag is used as an 802.15.4 radio for the ESP32. You'll need a ZBS_Flasher in order to flash the tags. Using the 'mac' option on ZBS_Flasher makes sure a tag flashed with a custom firmware has a valid mac address; it used the stock mac address assigned to the tag if it hasn't been flashed before. If you want to set it yourself, you can edit the mac address in the infopage. The AP expects a tag with a mac that starts with 00:00, followed by 6 bytes. You can hook the AP tag up to the ESP32 with mod wires or a flex pcb. The esp will flash the AP firmware to the Tag automatically. In some cases, a power off/on cycle is required. Please check the serial console output for status information. You can access the ESP32 with any web browser after connecting it to your WiFi Network. The file browser is located at /edit. For sending data to tags, you'll need to upload the information in 'data' to the ESP32's filesystem or over HTTP. After uploading, you can access the status screen at /index.html. If everything is working, you should be able to see tags synchronising to the network. After uploading a suitable .jpg file to the filesystem, this file can be sent to the tag by entering it's 6-byte mac address and filename. The protocol explained * The tag checks in with the AP every 40+ seconds. Actual check-in interval is highly dependent on RF conditions * The AP holds a list with tag MAC's that have pending transfers. * If a tag checks in, the AP replies with either no data, or information about a pending transfer * The tag checks if this information is already downloaded to EEPROM, or is already displayed. If this is the case, the transfer is immediately cancelled by issuing a 'transfer complete' packet to the AP. * The tag then proceeds to request data in 'blocks' of 4096 bytes. The AP responds with an ACK on the request, and specifies how long it will spend to gather the data. The tag sleeps until the AP will send the data * The AP requests its block-buffer to be filled by the ESP32, specifying MD5 and blockID * Datablock is sent by the AP, which will take about 42 packets for a full block. The tag will keep track of which blocks it has seen * After a block has been received with missing parts, the tag will request the same block, with a bitmask of blocks that are missing * The AP responds with the parts as requested by the tag. If there aren't too many blocks requested, the AP will fill the block with duplicate parts, to increase the chance of a successful transmission * After a full block has been received, the tag will do a simple checksum over all received data. If the checksum matches, the 4K of data is stored in EEPROM storage for later use * The tag will now either request the next block, or do a full re-request if the checksum failed * If all blocks are received, the tag will send a 'transfer complete'. * The AP will report the completed transfer to the ESP32, and removes the pendingData for this transfer from the queue Todo: * Code cleanup... Splitting into different files, for instance. It's a mess. Tags: * Implement NFC for URL's AP: * Important! The AP needs to be able to tell a tag to try again later if it's already doing comms with another tag. The AP can't handle concurrent checkins/download due to memory constraints! * More reliable serial comms (sometimes bytes are dropped) ESP32: * Do more with status info as sent by the tags Known issues: * Some tags work better as AP's than others. Your range may suck. The boards on these tags are tiny and fragile. For instance, a dab of hot-glue on a board is enough to warp it pretty severely, and will damage the components that are soldered on there. Reportedly, segmented-display Solum tags work well. Hints and excuses: * I'm sorry if reading this spaghetti code makes you lose your mind. ['Of all the things I've lost, I miss my mind the most'] I know it is pretty unreadable. I could blame SDCC for a lot of things, but it's mostly me. * There is no warranty whatsoever. Nothing. Not implied or otherwise suggested. This code isn't fit for anything. Please don't use this code to do nasty things. * Do a make clean between building for different boards. It really helps! * This repo builds on SDCC 4.2.0 for Linux. Different SDCC versions can behave VERY differently. * I am happy and honored to accept pull requests! But please, no code/indent style changes :) Credits Large parts of this repo are based on code written by, and wouldn't be possible without the hard work of: * dmitry.gr * atc1441 Hats off to these legends! Automated Builds * After a PR gets merged to the main branch, the ESP32 code will automatically be compiled. This can take up to 20 minutes. * Information about the latest builds can be found below builds About No description, website, or topics provided. Resources Readme Stars 103 stars Watchers 7 watching Forks 7 forks Report repository Releases No releases published Packages 0 No packages published Contributors 5 * @jjwbruijn * @nlimper * @jonasniesner * @atc1441 * @foorschtbar Languages * HTML 91.5% * C 5.1% * C++ 2.5% * JavaScript 0.4% * Python 0.2% * CSS 0.1% * Other 0.2% Footer (c) 2023 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact GitHub * Pricing * API * Training * Blog * About You can't perform that action at this time. You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.