• Skip to main content
  • Shop
  • Learn
  • Blog
  • Forums
  • IO
  • LIVE!
  • AdaBox
Adafruit Logo
0
  • Sign In | Create Account
  • Playground
  • Shop
  • Learn
  • Blog
  • Forums
  • IO
  • LIVE!
  • AdaBox
Sign In
0
Adafruit Logo
  • Learn Categories
    • 3D Printing
    • AdaBox
    • Adafruit Products
    • Arduino Compatibles
    • Breakout Boards
    • Circuit Playground
    • CircuitPython
    • CLUE
    • Community Support
    • Components
    • Crickit
    • Customer & Partner Projects
    • Development Boards
    • Educators
    • EL Wire/Tape/Panel
    • Feather
    • Gaming
    • Hacks
    • Internet of Things - IOT
    • LCDs & Displays
    • LEDs
    • Machine Learning
    • MakeCode
    • Maker Business
    • micro:bit
    • Microcontrollers
    • Programming
    • Raspberry Pi
    • Robotics & CNC
    • Sensors
    • STEMMA
    • Tools
    • Trellis
    • Wearables
    Explore, Groups to get your gears turning
    Explore
    Groups to get your gears turning
    Explore Groups
  • New Guides
  • Playground
melastmohican Notes

melastmohican

u/melastmohican
Badges
1

Getting Started

Adafruit Playground is a wonderful and safe place to share your interests with Adafruit's vibrant community of makers and doers. Have a cool project you are working on? Have a bit of code that you think others will find useful? Want to show off your electronics workbench? You have come to the right place.

The goal of Adafruit Playground is to make it as simple as possible to share your work. On the Adafruit Playground users can create Notes. A note is a single-page space where you can document your topic using Adafruit's easy-to-use editor. Notes are like Guides on the Adafruit Learning System but guides are high-fidelity content curated and maintained by Adafuit. Notes are whatever you want them to be. Have fun and be kind.

Click here to learn more about Adafruit Playground and how to get started.

  • By melastmohican

    epdsi on the Feather ThinkInk: From One Panel to Seven, One Socket

    Back in my earlier post, I wrote about bringing up a single JD79661 panel on this board with a driver built from scratch. That driver has since grown into epdsi, a published no_std, embedded-hal 1.0 Rust crate. I went back to the same ThinkInk Feather to see how far it reaches now.

    Answer: seven panels, five controller ICs, one 24-pin FPC socket, no wiring changes. Swap the panel, reflash, done. All seven verified working on the first attempt:

    Panel Controller Full refresh Partial/fast
    1.54" Tri-Color SSD1681 17,881 ms 17,881 ms (windowed, no saving)
    2.13" Mono SSD1680 3,893 ms 1,017 ms (differential)
    2.13" Quad-Color JD79661 20,041 ms —
    2.66" Tri-Color SSD1680 20,044 ms 16,176 ms (FastFull)
    3.52" Tri-Color UC8253 17,366 ms —
    3.7" Mono UC8253 2,615 ms 410 ms (FastPartial)
    4.26" Mono SSD1677 3,744 ms 500 ms

    Two things worth calling out. Colour panels have no fast path: narrowing the RAM window reduces what's redrawn, not what it costs, so a partial refresh on a Tri-Color panel takes exactly as long as a full one. Both UC8253 panels work fine here too, which is notable because an earlier bring-up on a different ESP32-C3 board logged them as non-functional. That module later turned out to be faulty hardware, and these clean first-try runs on the ThinkInk are the evidence the driver was never the problem.

    Full code, wiring notes, and measurement methodology: adafruit-feather-thinkink-discovery.

    Conclusion

    If you're on this board, epdsi is worth a look regardless of which panel you're holding. One driver, one socket.

    One thing I'd change on the hardware side, though. The 24-pin FPC connector is genuinely great: seven panels, zero wiring, swap and reflash. But this board ships with no SWD connector, so there's no RTT logging, the easy path everyone else on rp-rs gets by default.

    The workaround: route defmt over USB CDC instead, via defmt-bbq. epd.refresh() blocks for seconds at a time and USB needs polling every few milliseconds to stay alive, so that meant splitting the two cores. Core1 services USB and drains the defmt-bbq buffer; core0 runs the actual panel logic. It works, and every example in this repo uses it. But it's real plumbing I shouldn't have had to build just to see a log line mid-refresh.

    If there's a next revision of the ThinkInk Feather, please bring back SWD. RTT logging is the only sane way to see what's happening while a refresh is in flight, on a board that spends most of its time in long, blocking e-paper refreshes. Otherwise you're stuck inventing a second communication channel just to debug.

    Save
  • By melastmohican

    Rust on Adafruit ESP32-C6 Feather: Plug-and-Play I2C with 12 Arduino Modulino Modules

    Following my previous exploration with the Adafruit RP2040 Feather and custom ThinkInk e-paper drivers, I wanted to take the next logical step in embedded Rust: building cross-platform, hardware-agnostic drivers that can jump between entirely different architectures without breaking a sweat.

    I recently received the Adafruit ESP32-C6 Feather (PID 5933), featuring a single-core RISC-V SoC. To pair with it, I developed the modulino Rust library—a pure no_std driver that currently supports all 12 modules in the Arduino Modulino family.

    Thanks to the Feather's built-in STEMMA QT / Qwiic connector, getting this setup running requires absolutely zero soldering. You can hardware-verify your embedded apps by simply daisy-chaining the modules together over a standard 100kHz I2C bus.

    1. Setting Up the RISC-V Environment

    Unlike ARM Cortex-M or RP2040 targets, the ESP32-C6 utilizes a 32-bit RISC-V core. We can easily configure our environment using standard Rust toolchains and espflash:

    Make sure your project's .cargo/config.toml is configured to leverage espflash for seamless flashing and serial monitoring over the built-in USB-JTAG connection:

    Save
  • By melastmohican

    Rust on Adafruit RP2040 Feather ThinkInk (JD79661 E-Paper)

    I wanted to share my experience experimenting with Rust on the Adafruit RP2040 Feather ThinkInk board, specifically using a bare E-Paper display.

    Hardware:

    • Adafruit RP2040 Feather ThinkInk (https://www.adafruit.com/product/5727)
    • Bare EPD display (JD79661 chipset): {https://www.adafruit.com/product/6373)

    Background

    I went through all the official tutorials for the ThinkInk Feather: https://learn.adafruit.com/adafruit-rp2040-feather-thinkink

    The provided examples are excellent, but they currently focus on CircuitPython and Arduino. Adafruit already provides solid drivers for the JD79661 chipset, and the display is also well supported in the Arduino ecosystem via the GxEPD2 library: https://github.com/ZinggJM/GxEPD2

    This made me curious: can I do the same thing in Rust?

    Rust on RP2040

    The RP2040 has very good Rust support thanks to the rp-rs ecosystem. A great starting point is the RP2040 project template: https://github.com/rp-rs/rp2040-project-template

    There is also an existing HAL board definition for the Adafruit Feather RP2040 here: https://github.com/rp-rs/rp-hal-boards/tree/main/boards/adafruit-feather-rp2040

    While it’s not an exact match for the ThinkInk Feather, it’s close enough to serve as a solid base, with only minor adjustments needed.

    Driver work

    At the moment, there is no native Rust driver for the JD79661 E-Paper controller. To move forward, I implemented a custom Rust driver, based directly on the source code from Adafruit’s CircuitPython and Arduino implementations.

    Once the low-level driver was in place, everything integrated nicely with the Embedded Graphics framework. Rendering text and images worked as expected.

    As a proof of concept, I was able to:

    • Convert a JPG image to BMP
    • Render and display it correctly on the E-Paper display

    Results & Code

    All of my experiments and findings are documented here: https://github.com/melastmohican/adafruit-feather-thinkink-discovery

    The repository includes:

    • Project setup for Rust on the ThinkInk Feather
    • A custom JD79661 driver
    • Examples using Embedded Graphics
    • Notes on differences between the standard Feather RP2040 and the ThinkInk variant

    Closing thoughts

    Overall, Rust works very well on the RP2040, and bringing up an E-Paper display was quite feasible even without an existing driver. Hopefully this helps others who want to explore Rust + E-Paper + Adafruit hardware.

    Save
Search

Getting Started

Adafruit Playground is a wonderful and safe place to share your interests with Adafruit's vibrant community of makers and doers. Have a cool project you are working on? Have a bit of code that you think others will find useful? Want to show off your electronics workbench? You have come to the right place.

The goal of Adafruit Playground is to make it as simple as possible to share your work. On the Adafruit Playground users can create Notes. A note is a single-page space where you can document your topic using Adafruit's easy-to-use editor. Notes are like Guides on the Adafruit Learning System but guides are high-fidelity content curated and maintained by Adafuit. Notes are whatever you want them to be. Have fun and be kind.

Click here to learn more about Adafruit Playground and how to get started.

    • Contact Us
    • Tech Support Forums
    • FAQs
    • Shipping & Returns
    • Freebies
    • Terms of Service
    • Privacy & Legal
    • Website Accessibility
    • LLMs.txt
    • About Us
    • Press
    • Educators
    • Distributors
    • Jobs
    • Gift Cards
    "I am one of the people who love the why of things"
    Catherine the Great
    Adafruit Logo
    A Minority and Woman-owned Business Enterprise (M/WBE)