My Journey: Bringing Freenove Experiments to Ada on the Raspberry Pi Pico #
I have always been drawn to Ada because of its focus on safety, reliability and catching mistakes early. So I
thought — why not take the brilliant Freenove Ultimate Starter Kit for Raspberry Pi
Pico and rewrite every single experiment in Ada instead of the
usual Python or C?
The kit is fantastic value: you get 220+ components and 119 guided projects covering GPIO, sensors, displays, motors,
keypads — just about everything you need to really understand the Pico. You can still pick it up for under $50 from
places like AliExpress.
I’m working through the lessons one by one, writing clean, idiomatic Ada code (and using Ravenscar where real-time
behaviour matters). Along the way I share build notes, little ZShell helpers for flashing, things that tripped me up,
and the occasional extra experiment that felt fun or useful.
If you want to follow along — or just borrow bits for your own projects — everything lives in the Pi Ada Tutorial
repository.
How the Project is Organised #
I follow the structure of the official Freenove C tutorial quite closely so you can easily compare the two
languages.
Each chapter gets its own Alire crate. The name usually starts with the chapter number followed by a short description —
for example:
pico_ada_c01_led → Chapter 1 experiments with LEDs
pico_ada_c05_button → Chapter 5 button & debounce work
Some chapters in the original kit contain several small programs (e.g. Chapter 1 has both the internal Pico LED and an
external LED). In those cases I usually create multiple executables inside the same crate.
Occasionally I also borrow well-known working examples from Ada on the Raspberry Pi Pico
— the very first “Blink” program from Jeremy Grosser was my sanity check before I started changing things. And sometimes
I add my own variations, especially when I want to try Ravenscar tasks for proper real-time blinking or timed sequences.
My Development Directory Setup #
One thing that makes my life much easier is git worktrees — I wish I had discovered them years ago!
I keep the main clone in a folder called develop:
Pi-Ada-Tutorial/
└── develop/ ← git clone here (my active development branch)
From there I create extra worktrees whenever I need them:
Pi-Ada-Tutorial/
├── develop/ ← main working copy
├── release/ ← worktree for polished, stable versions
└── feature-ravenscar-led/ ← worktree for experimenting with Ravenscar
This way I can switch contexts very quickly without constantly stashing or switching branches.
For quick reference I also cloned two very helpful external repositories inside the same parent folder:
Freenove_Ultimate_Starter_Kit_for_Raspberry_Pi_Pico/ → the official C/MicroPython code
pico_examples/ → Jeremy Grosser’s Ada examples
Having them side-by-side means I can glance at the original C or a known-good Ada version while I’m writing.
Chapters #
These are the hands-on Ada ports of the Freenove experiments I’ve completed so far. I’m calling the core tutorial
sequence the Main Quest — the straight path through the kit’s lessons, rewritten in Ada with my notes and
improvements.
Main Quest – Core Freenove Experiments in Ada #
Side Quests – Handy Hardware & Setup Tips #
The Side Quests are the little detours and hardware/setup improvements that made my life easier (or saved me from
losing buttons in the grass). They’re not tied to a specific Freenove chapter but are very useful in practice.
Useful Resources #
Here are the sites I keep open almost all the time:
That’s the current lay of the land. Next posts will dive into individual chapters with code, photos of the breadboard,
and notes on what surprised me when moving from C to Ada.
Happy hacking — and do get in touch if you spot anything confusing or have suggestions!