Sign in

adafruit-playground.com

@adafruit-playground.com
147 followers 3 following 49 posts
PostsRepliesMedia
adafruit-playground.com @adafruit-playground.com · 29/09/2026
Electronic Cowbell
adafruit-playground.com
Electronic Cowbell
One day I thought it'd be fun to take something ordinary that isn't electronic, and make it so, just for fun.  Enter the Electronic Cowbell.  It's a simple electronic motion-activated cowbell that when you turn it on and gently shake it, it responds to your movement and jingles like a real cowbell. It's a wholly unnecessary object to have, but it's all for fun. The Electronic Cowbell uses an Adafruit RP2040 Prop-Maker Feather with built-in LIS3DH accelerometer to detect movement, and a built-in I2S amp that plays a WAV file through an attached speaker. This project is also coded using CircuitPython. Required Parts The following parts are needed for the project. In addition to the parts below, you will need to 3D print the cowbell enclosure. The cowbell enclosure is available for download on Thingiverse: Electronic Cowbell
000
adafruit-playground.com @adafruit-playground.com · 08/07/2026
Micro:bit wifi security system
adafruit-playground.com
Micro:bit wifi security system
This project is for kids do you need a cookie watcher or a make sure your hidden stash of candy is safe? well WSS:bit is here for the job!           items you need: and tape or twisty ties
000
adafruit-playground.com @adafruit-playground.com · 22/05/2026
Page Playground: Using Web Serial in Firefox
adafruit-playground.com
Page Playground: Using Web Serial in Firefox
Firefox's browser engine, Gecko, added support for Web Serial in release 151. This opens up a fun new path for hardware-to-web experiments and experiences. To try it out, I built Page Playground: a device featuring a variety of novel input methods that allows me to point at elements on a web page and alter their colors, layout, text properties, and transforms in real time. It reveals the potential for powerful and intuitive user experiences integrating hardware with the web. Idea As seen in the video, the Page Playground can alter various properties of elements on a webpage. It creates a new and fun way to interact with a page, but you can imagine a lot of professional use cases for such a tool, too (like web development, style tweaking, etc). Assembly Adafruit stocks a great set of essentially plug-n-play parts, so getting this off the ground didn't take much time at all! I decided to use the MACROPAD RP2040 as the base of the device functionality, since it has a nice screen, rotary encoder, and 12 keys with RGB LEDs. This was plenty to work with already, but I also added: two more rotary encoders, an IMU (BNO085), a color/proximity sensor (APDS-9960), a joystick, and a slide potentiometer. All of these provide fun and different ways to interact with the webpage. The joystick and potentiometer are simple analog devices, so I needed to get another board to access those over I2C (because the MACROPAD doesn't expose anything other than I2C over a STEMMA QT port). Conveniently, my order was large enough that Adafruit provided a KB2040 for free :) MACROPAD The MACROPAD was very easy to assemble; I just had to add the key switches and caps, and a rotary encoder top (I didn't realize the bare bones kit didn't come with one, so I came up short one top, whoops).
000
adafruit-playground.com @adafruit-playground.com · 27/03/2026
Homebridge Plugin for Adafruit IO Feeds
adafruit-playground.com
Homebridge Plugin for Adafruit IO Feeds
Recently I wanted to try setting up Homebridge to interface with our Apple Home setup. What is Homebridge? Homebridge is a lightweight Node.js server you can run on your home network that emulates the iOS HomeKit API. It basically lets you connect non-Apple HomeKit supported devices to Apple Home. There are plugins that you install within Homebridge that can expose more features or let you customize how a device appears within the Apple Home app. I decided that I wanted to try creating a plugin for Adafruit IO to send data from Adafruit IO feeds to Apple Home.  This was inspired by the work that Trevor did a little while ago with the itsaSNAP app. That iOS app lets you interface with Adafruit IO feeds within iOS. We wrote a lot of fun guides experimenting with the use of Apple Shortcuts combined with Adafruit IO. One piece that was missing was the ability to have data go from IO to Apple Home. We could control devices already in Apple Home (usually Matter devices) with Shortcuts that integrated with itsaSNAP, but we couldn't send, for example, temperature sensor data from a feed to Apple Home and have it show up in a Room.
000
adafruit-playground.com @adafruit-playground.com · 23/03/2026
How to Repair Maschine Mikro Mk3 Pads
adafruit-playground.com
How to Repair Maschine Mikro Mk3 Pads
I've had the Maschine Mikro Mk3 since August 2023 and have been finger drumming with it ever since. This morning, I found PAD# 8 wasn't triggering properly. It didn't feel stuck or sticky and the MIDI input signal in the Control Editor app showed it was getting triggered but sporadically. After adjusting velocity values and trying different pressure settings, I accepted this was a hardware issue that needed to be repaired. There's a few videos on YouTube showing how to repair the Maschine MK3, but couldn't find a tutorial or guide on repairing the Maschine Mikro MK3. Non-responsive Pads Repairing Native Instruments Maschine Mikro MK3 pads involved opening the enclosure to clean the contact traces on the PCB, sensor pad and rubber elastomers with isopropyl alcohol and a Q-tip to remove debris (mostly cat hair). This playground note will walk through the device teardown and cleaning the contacts and rubber elastomer pads.
000
adafruit-playground.com @adafruit-playground.com · 20/02/2026
Bringing My Godzilla Collectible To Life
adafruit-playground.com
Bringing My Godzilla Collectible To Life
So this all started right after Thanksgiving 2025 when it was time to put up the Christmas tree. Normally, we put the old Lionel train in a boring circle around the tree. That is about all the room I have for it. So I decided to get some N-scale trains so I could be more ambitious with a train layout. So what kind of scene do we build? Sleepy Christmas village? Nah, Godzilla smashing things up, of course. So I had the idea of taking an 8" Bandai Godzilla Minus 1 Ichibansho Figure Godzilla and building a diorama around him. But then I had the idea of making his dorsal fins light up with a NeoPixel strip. This meant learning how to use a microcontroller and making the lights do the atomic breath pattern. And I was hooked. So the trains are now put away, and I have been working on a system for putting action figures on a stepper motor controlled turntable. That system has a dedicated esp32-s3 with a tmc2209 stepper driver and a basic NEMA 17 stepper motor that is accurately positioned using an AS5600 magnetic encoder. Using WiFi, I control the turntable with a built-in web app or via Python software running on my Mac or Raspberry Pi 5. The software can choreograph mock battles, or silly dance routines. It also allows me to use a PS4 Dual Shock controller to manually control the turntable. 
010
adafruit-playground.com @adafruit-playground.com · 20/02/2026
Planck V7 mount for Apple IIe Fruit Jam Enclosure
adafruit-playground.com
Planck V7 mount for Apple IIe Fruit Jam Enclosure
I recently came across the absolutely amazing Apple IIe enclosure for the Fruit Jam designed by the Ruiz Brothers. Since I did not have a KPR BM43 on hand and didn't want to spend $43, I did a deep dive into AutoDesk Fusion and I have created a mount for the Planck v7 keyboard PCB for the Apple IIe enclosure. Thanks to everyone in the Adafruit Discord server for the helpful pointers and banter while I worked on this! You will also need the updated keyboard case, because the USB-C port is in a different place on the Planck v7.
000
adafruit-playground.com @adafruit-playground.com · 30/01/2026
Getting my Fruit Jam Clock to Speak
adafruit-playground.com
Getting my Fruit Jam Clock to Speak
The Idea The Fruit Jam, with its built‑in audio, Wi‑Fi, HSTX display, SD card, generous memory, and other little goodies, is a fantastic platform for mixing creativity with a bit of technical magic. Add CircuitPython to the mix and you’ve got a wonderfully flexible development environment. With one of my Fruit Jams, I built a display that shows an analog clock face, rotates through an album of photos of my grandkids as the background, and pulls weather data from Adafruit IO that I can scroll through using an IR remote. With the built‑in TLV320 DAC, I also wanted it to sound like a clock — a really big clock. I wrote functions to synthesize polyphonic tones that mimic the classic Westminster Quarters every fifteen minutes, and at the top of each hour it plays a WAV file of a single church‑bell toll, repeated once for each hour. It turned into a great little project that let me explore different elements of CircuitPython and many parts of the Fruit Jam board. It’s been running for months now and has become a charming addition to my office. And the best part is that I can keep extending it whenever a new idea strikes. I Discovered Copilot Audio Expression The other day, while playing with Copilot, I noticed a link to Labs at the top of the screen. Clicking through, I found Copilot Audio Expression, described as “an experimental tool designed for effortless audio creation using Copilot’s latest voice‑generation models.” You simply type a word or phrase, and it “speaks” it for you — then you can download the result as an MP3. A few quick prompts and some experimenting with the different settings sparked an idea: Why not make my Fruit Jam clock talk? Everything old is new again... Stringing together audio samples to form phrases is nothing new — people have been doing it for decades, long before digital audio. One of my earliest Learn Guide projects, the Titano Weather Station, used prerecorded samples as alarms (“time for bed”). But once you go beyond a handful of words, the challenge grows quickly. A talking clock or calendar needs nearly a hundred different clips: dates, day names, months, ordinals, and more. Gathering, recording, editing, and normalizing all of that becomes a real chore. That’s where this new AI tool shines. I can generate clean, consistent audio samples for every word or phrase I need in just a few minutes. So let’s build a Fruit Jam clock that can announce the time and date. Step by Step This article focuses specifically on adding the talking capability to my existing Fruit Jam clock project. The display, weather integration, IR remote navigation, and Westminster chimes are all already in place — and I can cover those in a future article if there’s interest. For now, we’ll walk through the audio‑generation workflow that makes the clock speak. The overall process breaks down into four main steps: 1.     Generate all the required words and phrases using Copilot Audio Expression 2.     Convert the MP3 files to WAV format using FFmpeg 3.     Organize the files on the SD card and create logical CircuitPython lists 4.     Write functions that assemble and play the spoken phrases Generating the samples For my project, I needed the Fruit Jam to be able to speak: The time (hours, minutes, AM, PM, noon, midnight) The date (day name, month name, ordinal date, year) The quarter hours (“quarter past”, “half past”, “quarter til”) And as a bonus: holidays, special days, and fun extras  Copilot Audio Expression made this surprisingly easy. Before we dive in, note that Copilot Audio Expression is part of Copilot AI Labs and is marked as experimental. It may change or disappear at any time. The site I used is: Copilot Audio Expression Website. Copilot Audio Expression Website
020
adafruit-playground.com @adafruit-playground.com · 30/01/2026
Moon Miner Arcade Game for the Adafruit Fruit Jam
adafruit-playground.com
Moon Miner Arcade Game for the Adafruit Fruit Jam
Moon Miner is a retro-styled arcade game reminiscent of the Lunar Lander arcade game from the 1980s. Your mission is to retrieve minerals from various moons around the solar system. It is a physics-based game, where you must navigate your rocket ship based on gravity and thrust to make a safe landing for retrieving minerals. Achieve a successful landing by reducing speed to near zero and keeping the lander upright on designated flat areas. It is available to play on the Adafruit Fruit Jam. Features The game employs physics to maneuver based on gravity. The game takes into account each moon has different gravitational properties. A heads-up display shows mission flight data in real-time. Complete the mission of collecting gems and your best time to complete the mission is saved. Play again to beat your best time. There are several ways you can die. Make sure you land on a horizontal surface at a safe velocity (and watch out for volcanos). Use fuel locations when running low on fuel. Some locations can be revisited again for additional fuel. Four missions are included. Written entirely in CircuitPython for the Adafruit Fruit Jam. The full learn guide, including download and installation instructions can be found at the author's web site at https://danthegeek.com/2025/12/28/moon-miner-learn-guide/  
000
adafruit-playground.com @adafruit-playground.com · 30/01/2026
Christmas Tree & Star Lights with Node-Red
adafruit-playground.com
Christmas Tree & Star Lights with Node-Red
Introduction We have a 1960's era aluminum Christmas tree. For the time that we've had it we've relied on newer and slightly less dangerous color wheels, then stage lighting. When we moved we didn't bring any of the lighting with us. I decided to string the poles of the tree with LEDs. The prior year I made a star topper which used a Bluefruit for lighting. This year I added 24 LEDs for the star that plug into the highest string on the poles. Design The current design is written in CircuitPython. For communication it relies on MQTT and Node-Red. Everything worked great, however, after I worked on a different LED project that used WLED, I think I'll convert this project to WLED. I'm not going to delete this code base, I think it has some interesting implementation features and is worth preserving. Infrastructure-wise with either implmentation you will need: MQTT - you can use AdafruitIO or build your own. In my implementation I set up a broker on a RaspberryPi 4 Model B running Debian Bookworm and Mosquitto. Node-Red - my Node-Red journey is chronicled here. Parts Code Tree & Star The code can be found on Github As I was coding this project, I found myself thinking I was going to be reusing a lot of it. So I repurposed an old project and replaced what was there with new helper classes. I did run into an issue where I could not get the LED Animation library to play nicely with MQTT. I tried a few things, including asyncio, and ended up posting on the forums. mikeysklar came to the rescue and you'll see his contribution in the code. The tree has 196 LEDs and the star has 24. data = { 'tree_animations': ['multi_chase'] ,'star_animations': ['rainbow_sparkle'] ,'num_pixels' : 220 ,'tree_pixel_subset': [0, 195] ,'star_pixel_subset': [196, 24] ... } Libraries Needed import json import board import time import os import neopixel import adafruit_logging import wifi import supervisor import adafruit_connection_manager import adafruit_minimqtt.adafruit_minimqtt from adafruit_led_animation.group import AnimationGroup from adafruit_minimqtt.adafruit_minimqtt import MMQTTException from adafruit_led_animation.sequence import AnimationSequence from adafruit_led_animation.helper import PixelSubset from circuitpy_helpers.led_animations import animationBuilder from circuitpy_helpers.led_animations import controlLights from circuitpy_helpers.led_animations import updateAnimationData from circuitpy_helpers.file_helpers import updateFiles from circuitpy_helpers.calendar_time_helpers import timeHelper from circuitpy_helpers.network_helpers import wanChecker Featured Highlights The tree subscribes to the following MQTT feeds: tree.lights - listens for events from Node-Red to update animation, start time, stop time home.time - listens for events from home hub in order to know when to stop or start the lights home.sunset - listens for events from home hub in order to know current sunset, uses this for start time In order to take events from tree.lights and actually change the running animation and colors, I needed to be able to do a couple of things: Have a list of supported animations - this is done via the animations.json file Be able to override the default values for animations Be able to on-the-fly update the data file to implement the new animation/colors choice When the code first starts it will check if there are overrides for the chosen animation and do an in-line replacement of those values. It will then check to see what the color selection is. Color choice is specified in the animations.json file and can be: random - a random color will be selected data - in the data file, for each animation is an entry for color. A string representation of the color can be provided or a the name of a color_palette. Once up and running, about every 30 seconds, the animations will pause long enough for the code to query MQTT for any updates. If a new message arrives the code will update the data file with the appropriate information and perform a supervisor.reload(). You can also change the start and stop times or disable them so that the lights will run continually. When using start and stop times; when the criteria is met to do either, the code will light sleep until the alarm is met. Case I used OpenSCAD and the YAPP Box (Yet Another Parametric Project Box Generator) library from mrWheel for the Feather case. This library is well documented and has a lot of features. I found a star on Thingiverse years ago and downloaded the SCAD file. I re-mixed it for my own needs. Unfortunatly now I cannot find the Thing anymore. If you recognize the code as yours please let me know so I can give you proper credit.
000
adafruit-playground.com @adafruit-playground.com · 22/12/2025
Rust on Adafruit RP2040 Feather ThinkInk (JD79661 E-Paper)
adafruit-playground.com
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.
000
adafruit-playground.com @adafruit-playground.com · 09/12/2025
LoRa Wireless Greenhouse Monitor
adafruit-playground.com
LoRa Wireless Greenhouse Monitor
Overview This project uses 900 MHz RFM95W LoRa FeatherWing modules to transmit temperature measurements from greenhouses and receive them at a base station about half a kilometer away. The base station hardware outputs sensor reports over USB serial, an optional 2x16 Character LCD, and an optional ESP-NOW gateway. The LoRa radio settings are tuned for extended battery life at a range of up to 500m in suburban or rural conditions (non line of sight with limited obstructions). With a fully charged 400 mAh LiPo battery and a 9 minute reporting interval, typical sensor runtime should be about 4 weeks (~22µA deep sleep current, ~2667ms of time per wake cycle, ~0.222 coulombs of charge per wake cycle). To optimize the transmitter for running on a small LiPo cell, I used a Nordic nRF-PPK2 power analyzer to tune the firmware. Some of the power saving tricks I used include reducing the cpu frequency, putting the RFM95W radio in sleep mode, putting the MAX17048 fuel gauge in hibernate mode, and using ESP32-S3 deep sleep. To compare the impact of different changes, I took extensive measurements using Nordic's Power Profiler app with the PPK2 connected to the Feather board's battery jack and GPIO outputs. Transparency note: Adafruit provided some of the parts I used for this guide (Thanks Adafruit!). Related Projects For logging, charting, and IRC status notifications, check out my related projects: serial-sensor-hub irc-display-bot.
000
adafruit-playground.com @adafruit-playground.com · 09/12/2025
NeoKey TOTP Token
adafruit-playground.com
NeoKey TOTP Token
Overview This is a two factor authentication token to generate TOTP login codes for up to four accounts. You can select which account by pressing a key on the 4-key NeoKey keypad. The design is intended for desktop use in a safe location (wall power + no worries of physical tampering) but where you do want to prevent secrets from leaking over the network due to mis-configured cloud-sync backup features or whatever. Design Goals and Features: Make the codes really easy to read and type, even in low light, by using a dimmable backlit TFT display with a relatively large font. Support 4 TOTP account slots (one for each key of a 4-key NeoKey keypad). The NeoPixel under the key for the currently selected account slot lights up. Pressing a different key switches the selected account. Pressing the selected key a second time puts the token in standby mode (backlight and NeoPixels off). Store secrets in an I2C EEPROM rather than in the CLUE board's flash. This makes it so the secrets aren't trivially accessible to a connected computer as USB mass storage files. This way, they won't get accidentally sucked into backups, and malware would have to work harder to access them. Set DS3231 RTC time from the USB serial console by opening the REPL, importing the util module, then calling util.set_time(). Add and manage TOTP accounts in the EEPROM's database of account slots by using similar REPL functions (import util then util.menu()). Use the token fully airgapped after initial setup by powering it from a phone charger and reading codes off the TFT display.
010
adafruit-playground.com @adafruit-playground.com · 09/12/2025
Building a Sci-Fi Movie Prop
adafruit-playground.com
Building a Sci-Fi Movie Prop
Overview A local production company is working on filming the first of a three-part sci-fi movie and needed a piece of scientific equipment for a laboratory scene. The executive producer/director found an obsolete flow cytometer analyzer in a government surplus sale, winning the bid for US$12. The device had the potential to look like a working DNA synthesizer with the addition of lighting and a bit of animation. In its day, the analyzer was a high-quality device that was robustly built to provide exceptional mechanical stability for its sensitive optical components. It was therefore quite heavy in spite of its size, requiring at least two persons to lift and position, which would increase the challenge to modify for use in the film. It was not a typical theatrical prop made from foam and balsa wood, for certain. I was tasked with installing color lighting to enhance the device’s operational appearance for its brief appearance on-screen. To achieve this, I devised a plan to incorporate several NeoPixel LED strips, which would be controlled by a CircuitPython-based microcontroller, such as the Adafruit M4 Express Feather. The multi-colored NeoPixel LEDs could be strategically positioned both within and outside the device, thereby providing ambient illumination and symbolizing various functions, including sample loading and the incubation process. Given that the initial device employed industrial-grade servos (specifically, three IMS MDI-17 Drive Plus Motion Control motors) for sample positioning and operating the sample fluid “sipper” needle, there was a preliminary aspiration to incorporate robotic physical movements beyond the lighting sequence. However, this objective was deferred due to the imminent project deadline, so a short puppetry cable would likely be attached to the sample positioning cam to animate movement of the test tube rack.
010
adafruit-playground.com @adafruit-playground.com · 09/12/2025
LoRa Touchscreen Pager and Tracker for Private Off-Grid Messaging
adafruit-playground.com
LoRa Touchscreen Pager and Tracker for Private Off-Grid Messaging
About this Pager You can build this touchscreen off-grid pager that uses LoRa and optionally GPS for location and tracking. This device lets you create (or join) a group of up to 90 devices in a private mesh network where you can send/receive messages, share location, and more. You never know when you're going to need to be able to send messages between nearby family or friends, where cell phones don't work. You can also use these in combination with other devices (T-Deck, T-Beam, etc) and figure out where different devices are - even without having phones/internet/data. That can be really handy if you're hiking or camping in a far-out location. How it's Built I designed a very simple PCB that accepts a few Adafruit components, that when combined with specialized firmware, become an off-grid communication device ready to be dropped into a 3D printed enclosure You can make the PCB (gerber files are included in this project) or order it from PCBWay The Adafruit parts are listed further down, but include Adafruit's RFM95W LoRa, 2.8" TFT Touchscreen with EYESPI & SD, Realtime Clock,  FRAM, and a few other things After assembling these things, you'll need to flash it with firmware, which takes only a minute or so Assembling the Pager Here's a video demo of assembling the pager. Full detailed instructions are also available at my website: Full DIY Instructions
000
adafruit-playground.com @adafruit-playground.com · 14/11/2025
Pyboom - A game for the Fruit Jam
adafruit-playground.com
Pyboom - A game for the Fruit Jam
Py-Boom Py-Boom is a fast-paced, 8-bit-style arcade game written in CircuitPython for the Adafruit Fruit Jam and other compatible display boards. This game is a modern take on a classic "catcher" formula, featuring both a single-player mode against an AI and a competitive two-player versus mode. Game Modes At the title screen, you can select your game mode: 1-Player Mode: You control the Bucket (P1) at the bottom of the screen. An AI-controlled Bomber moves at the top, dropping bombs at an increasing rate. Your goal is to catch as many bombs as possible to survive the level. 2-Player Mode: Player 1 controls the Bucket, and Player 2 controls the Bomber. P1's goal is to survive, while P2's goal is to drop bombs strategically to make P1 miss. How to Play P1 (Bucket) - The Catcher Goal: Catch every bomb that is dropped. If you miss a bomb, you lose one of your buckets (lives). If you lose all three, the game is over. Winning: If you (P1) successfully catch all bombs in a level (e.g., 10 bombs in Level 1), you win the round and advance to the next, more difficult level. P2 (Bomber) - The Attacker Goal: Make P1 miss! You have a limited number of bombs per level. Use your movement and timing to drop bombs where P1 isn't. Winning: If you (P2) successfully make P1 lose all three of their buckets, you win the game! Controls Action Player 1 (Bucket) Player 2 (Bomber) Move Left A key Left Arrow key Move Right D key Right Arrow key Drop Bomb N/A Down Arrow key Start / Ready Space bar Enter key Other Controls Select Mode: On the title screen, press the 1 or 2 key. Restart Game: On the "Game Over" screen, press the R key to return to the title screen. Required Files To run this game, you will need the following files on your CircuitPython device: code.py: The main game code. The Fruit Jam OS library package.  pyboom.bmp: The title screen logo. bomb_icon.bmp: The bomb sprite icon (used in development). Download at: Pyboom Git Hub     Background This project was started on Microsoft Make Code for my Pygamer and was called Prison Break. With the introduction of the Fruit Jam I wanted to port this over to Circuit Python. The graphics in Make Code (MC) are saved in a TypeScript file so I had to copy the codes for the sprites over to my Circuit Python. I used the AI tools that are part of Visual Studio Code (VS) the develop functions to map the sprites maps into bitmaps and tile grids. I continued to use the AI tools to help convert the Python code from MC. I mostly used Gemini as I have 3 months of premium from purchasing my phone. Though there were times where Gemini would get stuck on fixing issues it was making so I would switch to the free tokens in VS and use Claude or Chat-GPT. I ran out of free tokens in VS and moved on to Gemini for versions 2 and 3 of the game. I am in the process of uploading my prompts that I still have access to (I lost my VS conversations :( ) and hope to have them done in the next week. I also hope to get controllers setup and maybe make paddle controllers in the future. I found this a fun project to learn Circuit Python and coding with AI. I'm still learning the concepts of using classes and learned a lot while looking at the errors the AI was coming up with.
000
adafruit-playground.com @adafruit-playground.com · 24/10/2025
Fizzgig
adafruit-playground.com
Fizzgig
I built Fizzgig and would like to share a few notes on my build (made in October 2025). I hope that this is helpful to anyone attempting to build it as well. I had a lot of fun building it! Speaker I tried using an external speaker connected with the headphone jack cable. It turned out that this speaker is not deactivated when no sound is played, and it produces very loud white noise (this happens with any speaker connected via this connection). Thankfully, the Adafruit support team reproduced this, and it seems that this behaviour cannot be resolved. So I went along with the oval mini speaker that is connected to the board via PicoBlade. To improve its sound a little, I attached the speaker to a Tic Tac box as a resonator, which worked quite well. Servo / Jaw I used lots of hot glue to attach all the hair, so the jaw became rather heavy. I attached some cardboard to the jaw to stabilise it, but this was not enough to support the weight. As a result, the jaw would not close properly. To resolve this, I stabilised the jaw with ice cream sticks. I also extended the servo horn with a piece of carbon tube. I could securely fix this to the servo horn using heat shrink tube with hot glue. My extended servo horn ends in a grommet made out of another piece of carbon tube with a larger diameter that I glued to the jaw. This makes the placement of the servo a lot easier and the connection more stable. I thought about also adding a spring taken out of a retractable pen to the servo horn extension to help the servo along. In my build, this was not possible to integrate, but there may be setups where adding a spring is possible and makes sense. Since I could not use a spring, I added a counterweight in the part where the servo horn ends. I glued in a screw and added two nuts for added weight. This helps the servo along. Code I used the UF2 file provided in the instruction. I would have liked to change the code to reduce the jaw opening angle (this would have enabled me to use a spring). Adafruit support pointed me to the code, and I was able to identify the place where the servo angles are defined. In my current Arduino IDE, the code would compile successfully, and the IDE even told me that the code had been successfully transferred to the board. However, CIRCUITPY was still visible as a drive after this supposedly successful transfer, and I had to re-upload the original UF2 file to go back to that version. I re-tried with several different methods, but I was not able to make the compiled code transfer to the board successfully. This may be due to my inability, since I am not very experienced using microcontrollers at all. If you are planning to alter the code, do check if it works for you before making your build. Wig It makes a lot of sense to buy a wig with really long hair. The instructions advise to cut off the hair along the longest section. I did this, but it would have made more sense to plan ahead to first check where the nose will go. Most hair under the nose will not be needed, as that's where the mouth goes. Depending what your particular wig looks like, it may be better to keep the long hair in the back and trim under the nose.  Also, the hair will be all over the place when you're done. I styled my Fizzgig's hair with transparent lacquer from a spray can. This was necessary especially around the eyes and the nose. Frame I built a wooden frame for my Fizzgig. I had originally used a cardboard box, but for more stability I replaced it with a wooden frame that basically had the same dimensions. My frame is about 31 x 18 x 10 cm. The required dimensions very much depend on the size of the wig and the length of the hair.
000
adafruit-playground.com @adafruit-playground.com · 16/10/2025
Your own TTS engine for the Fruit Jam Spell Jam app
adafruit-playground.com
Your own TTS engine for the Fruit Jam Spell Jam app
Overview The Spell Jam app on the Fruit Jam is a twist on a classic electronic toy. Check out the Spell Jam learn guide to learn all about it. By default, Spell Jam uses the Amazon Polly Text-to-Speech (TTS) service to create audio from the entered text. While Amazon's service can be used for free during a trial period, it does require an AWS account. If you'd prefer not to create an Amazon AWS account, you can instead run a local TTS server on your home network using open-source models like KittenTTS or Kani-TTS. This playground will walk you through the steps required to run a local TTS server on your network and configure Spell Jam on your Fruit Jam to use that server instead of AWS. Installing a Text-to-Speech Model There are two TTS AI models that the Spell Jam local backend currently works with: KittenTTS - lightweight, will run on a Raspberry Pi 4/5 Kani-TTS  - newer, but may require an Nvidia GPU.
000
adafruit-playground.com @adafruit-playground.com · 16/10/2025
Magnetometer - MMC5603 to measure gas usage inside your home with home assistant
adafruit-playground.com
Magnetometer - MMC5603 to measure gas usage inside your home with home assistant
I wanted to measure the gas usage inside my home and push the data into Home Assistant. To collect the data, I wanted to use the MMC5603 magnetometer + ESP32 Feather V2. The MMC5603 had a great price point and the ESP32 Feather V2 was able to connect to my Home Assistant server via WiFi. Requirements ESPHome 2025.8.3 The Adafruit Products above (MMC5603 + ESP32 Feather V2 or similar board that can connect via WiFi) Ethernet Cable (Cat 5 and later is fine) USB Power Adapter (e.g. like this one , 5V 1A) A short USB-A to USB-C connector (e.g. like this one, data isn't important here - so any cable will do) M2.5 screws (lengths and materials will be up to you, I used nylon M2.5 screws to attach the bracket to the gas meter and metal M2.5 screws for the MMC5603 to the bracket). If you end up using any earlier version of ESPHome and you'll run into issues like I did where the MMC5603 wasn't being registered properly. I connected everything like this diagram:   Assembly
000
adafruit-playground.com @adafruit-playground.com · 16/09/2025
Busy Buttons - noisy glowy buttons for babies and toddlers
adafruit-playground.com
Busy Buttons - noisy glowy buttons for babies and toddlers
I had a collection of spare parts from Adafruit laying around. My toddler loves mashing buttons, particularly ones that make noise, so I decided to turn those spare parts into something they'd enjoy. As for my own sanity, it'll diminish as the sounds play relentlessly, but I built in a secret "mute" cheat code. I used Adafruit's arcade buttons which can withstand a lot of toddler smashing and used a massive battery so it'll almost never need charging. You can view more about the project on Printables and see the source code and instructions on GitHub to make your own. The enclosure is 3D printed and the software runs on an ESP32-S2 Feather with CircuitPython. As a much more advanced project, I also created BabyPod: an interface to Baby Buddy written in a lot of CircuitPython.
000
adafruit-playground.com @adafruit-playground.com · 02/09/2025
A Neopixel Floor Lamp with a Twist
adafruit-playground.com
A Neopixel Floor Lamp with a Twist
This is probably the coolest thing I have built with Adafruit electronics!  When I viewed the learn guide describing the Floor Lamp with NeoPixels and WLED Custom Animations by Erin St Blaine I knew that I just had to build this work of art.  I tend to like building things with wood, so my adaption of Erin's design for the most part replaces some elements with wood structures.  I was pleasantly surprised with the results! Many of the instructions that I provide below leverage Erin's design and construction.  You will need to refer to Erin's learn guide frequently as you follow the instructions below.
000
adafruit-playground.com @adafruit-playground.com · 01/08/2025
Reviving My Netduino 2 (without the .Net MF)
adafruit-playground.com
Reviving My Netduino 2 (without the .Net MF)
The Netduino series of boards have been around for several decades and saw a limited level of success for the first decade or so. However, as a development ecosystem they haven't stood the test of time. The original development toolchain has gone into abandonment and been archived. But as a hardware platform, they are a still great boards, especially the Netduino 2 and later, with fully supported mainstream processors. You might not be able to use .Net or C#, but with toolsets from Arduino and STMicroelectronics you can still create amazing things with these easy-to-use Arduino compatible boards. Don't throw them away! The notes below describe how I rediscovered their usefulness, albeit with a different set of tools. Some History I've had two Netduino 2's sitting in my electronics box for years, more years than I'm willing to admit. During that time, I'd done very little with them. When I originally bought them, Visual Studio was my daily development environment, and I knew my way around it quite well. I'd tinkered for a bit with an Arduino, but I was eager to use .Net and Visual Studio on this new device. I did build a few things with them, but frankly they didn't grab my interest and at the time, the much more powerful Raspberry Pi was drawing my attention away. So, these boards were relegated to the back of my toolbox. They seemed to be pretty content there, and I kept them cool and dry, so we were all happy for the time being.
000
adafruit-playground.com @adafruit-playground.com · 11/07/2025
AIO-Connected Workshop Thermal Camera
adafruit-playground.com
AIO-Connected Workshop Thermal Camera
An Adafruit IO - connected, CircuitPython remote thermal camera. Project Objective To observe thermal conditions out in my remote laboratory (i.e., the workshop bench in the detached garage), I previously installed an Adafruit IO (AIO) connected corrosion monitoring system that watches conditions inside and outside of the garage. The corrosion monitor consists of an interior temperature/humidity sensor and, thanks to AIO Plus, correlates with exterior weather conditions. However, from the temperature/humidity sensor's perspective, if a door or window is left open it takes far too long to detect the issue. It would be ideal to be able to "see" if a relatively small area inside the workshop has experienced a temperature change relative to the bulk of the air in the space. An added benefit would be to detect human motion in the workshop area or to discover if the soldering iron was accidentally left on. Requirements Periodically capture and upload a thermal image of a critical portion of the workshop. Monitor for temperature extremes and upload an image when exceeded. Detect human motion and upload an image. Provide a local color display with automatic brightness control. Continuously update the local display image at least twice a second to quickly detect motion and respond to thermal events. Upload the captured thermal image on a remotely accessible AIO dashboard page via the local WiFi network. Upload bitmap image payload to AIO in less than 10 seconds. Power from a USB 5-volt wall wart. Future and Nice-to-Have Blank the screen when motion has not been detected for a preset amount of time (screen saver). SD Card storage of images and temperature statistics with historical view UI. Trigger AIO notification events related to motion or alarm settings. Upload minimum, average, maximum temperature values with image; display on dashboard. Interface to Apple HomeKit. Capture local audio. Live MEMENTO photo overlay. To speed up prototyping and algorithm development, CircuitPython was the choice for the software side of things. Besides, the code needed for creating images with a thermal camera and for reliable communication with AIO already exists in other projects that I've recently developed.
010
adafruit-playground.com @adafruit-playground.com · 11/07/2025
GPS Tracker Coding in CircuitPython - Going Down the AI Rabbit Hole
adafruit-playground.com
GPS Tracker Coding in CircuitPython - Going Down the AI Rabbit Hole
The Idea I've lately been dabbling with AI coding assistance and have been impressed with what it can do. So, I thought I'd do a whole project from scratch using several boards I have been meaning to do something with. I thought I'd also take you all on the journey and maybe you will find this useful. I will use this Playground article to document the process. I will go through the components and assembly, list the prompts I used with the AI tool to build the code, and share what value this new tool gives me.  The Build The project is a GPS tracker. In a nutshell a GPS module, an OLED display and an AdaLogger board. Here are the components I used: Design Choices I chose these components for simplicity. Choosing an AdaLogger for the microprocessor gives me an SD card to log the output and gives me one Neopixel, a separate LED I can use as an indicator and an extra input button with board.BUTTON. The OLED display, although small (128x32), can convey a lot of information if done well, plus it gives me three input buttons for controls. The GPS board just works well with little effort.   Assembly Since the Feather ecosystem is perfectly modular, assembly was simple: Solder headers on to the microprocessor, GPS FeatherWing and the OLED FeatherWing Solder the sockets on to the Feather Tripler Prepare the AdaLogger by inserting a formatted SD card and attach the LiPo battery to the connector.  Insert a coin cell into the GPS module Plug the three boards into the Tripler - I used a couple of rubber bands and a small piece of foam on the bottom to hold it all together That's all there is to it! With that - we are (almost) ready to code.
020
adafruit-playground.com @adafruit-playground.com · 27/06/2025
Sword of Shannara on Microbit
adafruit-playground.com
Sword of Shannara on Microbit
I enjoy programming little projects on the Microbit and CircuitPlayground because I find it easy to work on them "on the go"! This project meant I was able to start working on a computer, then continue the initial Makecode work using the iOS Makecode app - saving work to Github when switching from PC to phone and back. It came about because I recently was reading through the Shannara stories, and that lead me to come up with some Microbit programs for this simple "Sword of Shannara" game in python and Makecode. This is a vastly (!) simplified version of the classic fantasy "The Sword of Shannara." Github Repository Here Screen above shows "you," representing the hero, Shea Ohmsford, who is searching for the Sword of Shannara. You move left/right through a scrolling landscape (100 cells wide) displayed on the 5x5 LED micro:bit screen. Overhead are dots that represent the "Skull Bearers" (think Tolkien's Nazgul). If you delay when one is overhead, it will attack and you can lose one of your five lives. So either move past quickly, or hit A+B to unleash the Elfstones to eliminate the Skull Bearer. Faint dots along the bottom of the "screen" represent landscape and serve to show your movement left/right. Somewhere in the middle of the 100-element landscape is the "Sword" represented by three lit pixels.
000
adafruit-playground.com @adafruit-playground.com · 01/05/2025
Countdown Complete: It's finally here! 🎉 Upgraded Actions on IO - How to do Math(ematics)
adafruit-playground.com
Countdown Complete: It's finally here! 🎉 Upgraded Actions on IO - How to do Math(ematics)
Blockly has been slowly worming it's way into Adafruit IO, with a first edition replicating the old Action forms. Now the latest release brings the wealth of features we've been dreaming of, allowing great complexity! Will you be the first to bring down the house of cards/servers? Let us know in the forums if you do (or run into other issues)! Let's start off with something simple, how to subtract one from a feed value (as a countdown)... We'll explore a quick yet complex multi-action example, changing LED colour based on air quality, and additionally a Utility Light mode using the onboard button to request 30seconds of Bright White Light (useful in a kitchen). Setup a Wippersnapper device Adafruit IO has a devices page, which shows the special "Wippersnapper" devices, these run the arduino firmware that allows wifi connected boards to easily connect and configure components (inputs/outputs/sensors) with no code. Each component then has associated feeds for interacting with, so using the on board button becomes child's play. Install wippersnapper, you're best off finding the learn guide for your board and then locate the Wippersnapper pages. Alternatively there is a quick start guide, or just do the usual hacky thing and have a go with no prior knowledge... Visit this link (https://io.adafruit.com/devices/new) when signed in to be taken to the New Device setup page, then select your board and follow the onscreen instructions. (You need an IO page open when the board first connects to accept the registration request).
000
adafruit-playground.com @adafruit-playground.com · 21/04/2025
The Many Possibilities of Adafruit IO Actions and an Arcade Button
adafruit-playground.com
The Many Possibilities of Adafruit IO Actions and an Arcade Button
Overview As we get closer to launching the new Adafruit IO Actions, it has been fun thinking of the many fun ways it can be used. Here is a really simple project that has a ton of potential without writing a single line of code. With this project, I simply added a NeoPixel to a simple arcade button (using the below Learn guide), and then use that LED and button to communicate information in different ways. The more I play around with this project, the more ideas I come up with. So be sure to check back here often as I will post more ideas as I come up with them. Parts Used I used the NeoPixel Mini Button as shown in the guide above, but used the QT Py ESP32-S3 board with the NeoPixel BFF to drive the NeoPixel, then just soldered one side of the button to 3V on the QT Py, and the other side of the button to A2. You could also simply skip modifying the arcade button, and just use the built in NeoPixel on the QT Py. You could even just use the built in pushbutton on the QT Py and skip the Arcade Button all together. This guide isn't so much about the specific project, as it is about the possibilities of the new Adafruit IO Actions. You can set this up with any NeoPixel and button. With that in mind, here are the products I used:
000
adafruit-playground.com @adafruit-playground.com · 03/04/2025
Adafruit Memento Time-lapse w/ online upload & email notification
adafruit-playground.com
Adafruit Memento Time-lapse w/ online upload & email notification
Adafruit Memento Time-lapse Camera with Online Upload and Email Notification This guide shows how to turn your Adafruit Memento (ESP32-S3) board into a time-lapse camera that: - Captures images on a schedule or with a button press - Uploads them to Adafruit IO over Wi-Fi - Triggers email notifications using a feed - All using CircuitPython and the PyCamera library! What You Need - Adafruit Memento Board: https://www.adafruit.com/product/5843 - microSD card (optional, for GIF recording) - USB-C cable - Wi-Fi network - Adafruit IO account: https://io.adafruit.com - CircuitPython is installed on the Memento Setup 1. Installing CircuitPython To install CircuitPython on the Adafruit Memento, I followed this official guide by Anne Barela and John Park: 🔗 [Memento Camera Quick Start Guide – Install CircuitPython](https://learn.adafruit.com/memento-camera-quick-start-guide/install-circuitpython) That page walks you through how to: - Put the board into bootloader mode (double-tap reset) - Drag the `.uf2` file onto the board - Verify that the **CIRCUITPY** drive appears Make sure you use **CircuitPython 9.0.0 or later** to avoid filesystem corruption issues. 2. Install Libraries - adafruit_io  - adafruit_requests.mpy   - adafruit_ntp.mpy - adafruit_logging.mpy  - adafruit_pycamera   - adafruit_ov5640   - adafruit_connection_manager.mpy   - gifio.mpy   - bitmaptools.mpy   - ulab (folder) 3. Create settings.toml file on CIRCUITPY with this: CIRCUITPY_WIFI_SSID = "YourNetworkName" CIRCUITPY_WIFI_PASSWORD = "YourNetworkPassword" ADAFRUIT_AIO_USERNAME = "your_username" ADAFRUIT_AIO_KEY = "your_aio_key" 4. Main Code Paste the following into code.py on your CIRCUITPY drive: What I did - I used the fancy camera CircuitPython code by Anne Barela and John Park, and the Doorbell Camera code by Brent Rubell to help create the code above.  - My main focus was to get photos uploaded to Adafruit IO with the timelapse and camera shutter options. How It Works - The camera connects to Wi-Fi and Adafruit IO - Takes snapshots using the shutter button or on a time-lapse interval - Encodes image data as base64 and uploads to Adafruit IO feed - Sends a "trigger" signal to another feed to notify you via email 5. Set up Feeds on Adafruit IO - Go to io.adafruit.com - Click on the tab 'IO' - Go to Feeds and create two. I set up a 'camera' feed and a 'camera-trigger' feed. - The "camera" feed will take photo uploads, and the "camera-trigger" feed gets a 1 or 0; this is used to trigger an automated email action.
000
adafruit-playground.com @adafruit-playground.com · 01/04/2025
🎵️ Media hub 2.0: Media control w/opt Bluetooth
adafruit-playground.com
🎵️ Media hub 2.0: Media control w/opt Bluetooth
Overview Physical controls for a more enjoyable media playback experience. Features Responsive volume knob & mute button. Transport controls (play/pause, stop, FF/REW, skip tracks). Pair up with your favourite Bluetooth® speakers. Quick, physical connection (don't have to go through menu system to pair with keypad & speakers). Customizable controls/scheme. This project tries to improve over the original "Media hub" presented here. More compact design Bigger volume knob - not interfering with macropad keys. 🛒️List of main material/hardware (See section "More tools/materials/hardware" near the end of this note for extras)
010
adafruit-playground.com @adafruit-playground.com · 28/03/2025
Zephyr Quest: IoT Toggle Switch for Feather TFT
adafruit-playground.com
Zephyr Quest: IoT Toggle Switch for Feather TFT
Overview This guide shows how to make an IoT toggle switch with an Adafruit Feather TFT ESP32-S3, Zephyr, and Adafruit IO. Key features include: GPIO input for Boot button, LVGL graphics, MQTT over WiFi with TLSv1.2, and USB serial shell commands for saving WiFi and MQTT configuration settings to NVM flash. This guide is intended for people who want to learn how to write applications in C using Zephyr APIs. Demo video: IoT toggle switch: Zephyr + Feather TFT + Adafruit IO
000
adafruit-playground.com @adafruit-playground.com · 25/03/2025
No-Code Easy Ambient Smart Lights
adafruit-playground.com
No-Code Easy Ambient Smart Lights
Overview With all the newest features of Adafruit IO, WipperSnapper firmware, and the new Blockly Actions, you can create really complex projects without writing a single line of code. I've been working on a couple versions of smart lights to notify me of different things using NeoPixels. This project will focus on a super easy smart ambient lighting system that you can stick to the back of your computer monitor. Components Using just a few Adafruit components is all you need to create a really simple, but pretty powerful little notification system. We are gonna use a QT Py ESP32-S2 WiFi Dev Board to talk to Adafruit IO, a NeoPixel BFF for the QT Py, and finally a short NeoPixel strip with a JST connector pre-attached (so you can connect right up to the BFF board. The only soldering you will need to do is to attach the boards together. You can solder the boards together with the included pins, or pick up some female headers so you can detach the boards and use them on any future projects.
000
adafruit-playground.com @adafruit-playground.com · 19/03/2025
A Node Based CAD Add-in for Fusion 360
adafruit-playground.com
A Node Based CAD Add-in for Fusion 360
Gradient is a node-based editor designed for use with Autodesk Fusion 360.  I started working on Gradient after playing with the node based geometry in Blender. The nodes in Blender are fantastic (frankly they work much better than mine do right now) but I wanted  to create algorithmically defined geometry right in Fusion 360 using solids and surfaces which are better suited to making 3D models for technical and engineering parts. I wanted to be able to make algorithemic structures that are user defined but and can be finely controlled and tuned to the design needs. Models like this would be very time consuming to model by hand. However they can be quickly generated and re-generated with different parameters or random seeds. If you are interested in trying Gradient for yourself you can download it from the github repository below. Please be aware currently Gradient is in an early development stage, meaning only a small fraction of its functionality has been implemented, and there are likely a few bugs to sort through. Gradient github
010
adafruit-playground.com @adafruit-playground.com · 03/03/2025
Zephyr Quest: ST7789 Display with Feather RP2350
adafruit-playground.com
Zephyr Quest: ST7789 Display with Feather RP2350
Overview As part of a series on Zephyr with Adafruit hardware, this guide shows how to configure Zephyr to use an ST7789 TFT display with a Feather RP2350. By connecting the display with a breadboard, we can use a logic analyzer to verify that the Zephyr display driver pin configuration agrees with the CircuitPython display driver. This guide is meant for people interested in adding support for Adafruit displays to Zephyr.
000
adafruit-playground.com @adafruit-playground.com · 18/02/2025
Zephyr Quest: SWD Pogo Adapter for CLUE
adafruit-playground.com
Zephyr Quest: SWD Pogo Adapter for CLUE
Overview
000
adafruit-playground.com @adafruit-playground.com · 18/02/2025
Media hub: Media control w/opt Bluetooth
adafruit-playground.com
Media hub: Media control w/opt Bluetooth
Overview Direct physical control for a more enjoyable media playback experience. Features Responsive volume knob & mute button. Transport controls (play/pause, stop, FF/REW, skip tracks). Pair up with your favourite Bluetooth® speakers. Quick, physical connection (don't have to go through menu system to pair with keypad & speakers). Customizable controls/scheme. Customizable setup: Optionally connect USB hub/dock for added features, for example: mirror phone to TV w/HDMI out: Watch videos on a bigger screen add keyboard: Better typing experience for texts/emails. Solderless project. Main hardware
000
adafruit-playground.com @adafruit-playground.com · 11/02/2025
Zephyr Quest: Feather RP2350 Board Def
adafruit-playground.com
Zephyr Quest: Feather RP2350 Board Def
Overview
030
adafruit-playground.com @adafruit-playground.com · 10/02/2025
Weather Display Using Open-Meteo's API
adafruit-playground.com
Weather Display Using Open-Meteo's API
Overview This desktop local weather monitor is the next in the continuing quest to update John Park's original openweathermap-based PyPortal weather station project with a free weather information service that doesn't need a credit card paywall account. Thanks to some investigative work done by @DJDevon3, this latest version uses the free non-commercial Open-Meteo (OM) API service. Bonus: No account or key is required to access the API if used for non-commercial projects.
010
adafruit-playground.com @adafruit-playground.com · 09/02/2025
Guide: Build a 'MiniMarquee' WiFi Text Scroller
adafruit-playground.com
Guide: Build a 'MiniMarquee' WiFi Text Scroller
In the last few years that I've been hacking on microelectronics, one of my favorite types of project has been the humble text scroller. While these devices are usually simple to build, I've found that the process of actually getting the text onto the devices can be anything but simple! Often, it requires the user perform one or more of the following: Connecting the device to a computer and editing/compiling/reinstalling firmware source code Connecting the device to your main Wi-Fi network Using an custom-built application on your phone, or something like Adafruit's Bluefruit Connect Making an account with some sort of IoT service (such as Adafruit IO) and/or use an MQTT server Opening the browser and typing a strange URL in the address bar (such as an IP address) That's a lot of work just to get some text to scroll across a screen! Especially if the text scrolling gadget is intended as a gift for a friend or family member who may not be tech savvy. It's no fun giving a gift to someone who can't figure out how to use it!
000
adafruit-playground.com @adafruit-playground.com · 07/02/2025
Digital Clock with WiFi and Weather (Huzzah & 128x64OLED)
adafruit-playground.com
Digital Clock with WiFi and Weather (Huzzah & 128x64OLED)
I had an Adafruit Huzzah and an OLED FeatherWing 128 x 64 in my box of goodies and decided to make a smart digital clock for my study. The clock is connected to internet via WiFi, synchronises the time and via an api displays the temperature in my area. It is set to update every 5 minutes. Also displays an icon of the current weather.  These are parsed from the api response: {"coord":{"lon":yyyyyy,"lat":xxxxx},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"base":"stations","main":{"temp":1.03,"feels_like":-1.33,"temp_min":0.57,"temp_max":2.64,"pressure":1039,"humidity":76,"sea_level":1039,"grnd_level":1034},"visibility":10000,"wind":{"speed":2.06,"deg":170},"clouds":{"all":0},"dt":1738790391,"sys":{"type":1,"id":1440,"country":"GB","sunrise":1738742403,"sunset":1738773892},"timezone":0,"id":3333224,"name":"xxxxxx City","cod":200}
010
adafruit-playground.com @adafruit-playground.com · 07/02/2025
CNC Rotary Encoder Internals
adafruit-playground.com
CNC Rotary Encoder Internals
I was working with one of Adafruit's CNC Rotary Encoders and made a mistake wiring. Well, long story short, I killed it. I am not sure exactly what I did, but I suspect I accidentally drove its outputs with an improper voltage. To prevent the experience from being a total loss, I took the time to partially disassemble it.
010
adafruit-playground.com @adafruit-playground.com · 13/01/2025
Getting Started with Zephyr on Linux
adafruit-playground.com
Getting Started with Zephyr on Linux
This is for folks interested in learning about Zephyr. The first section shows, step by step, how to work through the Zephyr Getting Started Guide to install Zephyr on Linux, build the hello world sample, and run it on an Adafruit QT Py ESP32-S3. The second part has notes for tuning the default settings to use fewer resources for faster CI builds.
010
adafruit-playground.com @adafruit-playground.com · 08/01/2025
Remix: Cedar Grove Weather Architecture v2.0
adafruit-playground.com
Remix: Cedar Grove Weather Architecture v2.0
(AIO Throttling for the Win) Project Objective The object of this project is to refactor the CircuitPython code in the existing devices to accommodate AIO transaction throttling and to convert the Workshop Corrosion Monitor and Matrix Weather Display to become display-only devices, ultimately combining both into a single device. Overview The first version of the weather system architecture (Display AIO Local Weather Conditions: MatrixWeather System) worked nicely, but reliability suffered when the multiple transmitter and receiver devices competed to access the Adafruit IO (AIO) feeds. To prevent access collisions using the first architecture, each independent device was designed to only transmit or receive at fixed rates well below the AIO+ subscription rate limit of 60 data point transactions per minute. However, since each device operated autonomously, there were occasions when two transactions would heterodyne and stress the limit and cause feed failures. To remedy the reliability issue, the new architecture design was switched from using MQTT to the HTTP protocol. Even though MQTT makes it relatively easy to "subscribe" to AIO feeds, HTTP provides more control granularity that includes a relatively new feature for independent devices to monitor feed access activity. Collisions can be avoided by watching how many data point transactions remain and waiting until enough are available for the queued transaction event. The primary change to the architecture was to incorporate throttling.  A secondary goal was to reduce the number of devices in the system by combining the existing Corrosion Monitor sensor with the REPEATER device, creating the new Weather SOURCE device. The Weather SOURCE extracts local weather conditions from AIO+ Weather and combines it with the local sensor's temperature, humidity, dew point, and corrosion detection data. Weather SOURCE then publishes the information to a collection of standard AIO feeds. The other devices in the system are displays that extract data stored in the AIO feeds. One display replaces the existing Workshop Corrosion LCARS Monitor (PyPortal M4) that lives in the workshop and now is named Workshop Corrosion Monitor Display. The second is our living room MatrixWeather Display (upgraded from a Matrix Portal M4 to the S3 version). Since AIO feed access rates are monitored, it will be possible to create additional task-customized displays, perhaps for the studio or kitchen. An advantage of the new architecture is that some display devices will not require large PSRAM for retaining the huge JSON file that AIO+ Weather provides, with the exception of a Matrix Portal. The single Source device with a large PSRAM extracts only the essential information needed by the displays -- and stores the extraction into the AIO feeds.
000
adafruit-playground.com @adafruit-playground.com · 08/01/2025
GFFA - Aurebesh!
adafruit-playground.com
GFFA - Aurebesh!
I really enjoy coming up with new ways to combine my appreciation for Science Fiction linguistics with Adafruit products (especially the neotrinkey!) and CircuitPython. For this project I combined a classic tool "FIGlet" with the Aurebesh, the alphabet from the Galaxy Far, Far Away... (GFFA). I started with FIGlet, the  computer program that generates text banners, in a variety of typefaces, composed of letters made up of conglomerations of smaller ASCII characters. I modified an existing font file (standard.flf), replacing the letters a-z with my handmade versions of the letters seen above (note: anyone know of a good editor for FIGlet fonts? I'd love to improve the above). That file was rather big for the neotrinkey - so I just extracted the Aurebesh and made it into an array for aure.py, a module to convert alphabetic English into Aurebesh. Then I made a program, aurebesh.py which could call aure.py's function doAure() for displaying different sayings or the alphabet, character by character - a useful training tool to become familiar with the alphabet. That's an important skill if you come across warnings like this:      
010
adafruit-playground.com @adafruit-playground.com · 30/12/2024
Build patterns: IR receiver variants
adafruit-playground.com
Build patterns: IR receiver variants
Overview This note presents a few different ways of building an microcontroller-based IR receiver. It is meant as a complement to the "PC media remote" note. The idea is to somewhat parallel "Software design patterns" -- only for physical hardware builds. The note provides a variety of implementation examples for an IR receiver project. These examples try to make use of different mechanical/mounting systems to provide structure, associated with some practical connectivity solutions. Hopefully these options will make builds feel a bit more approachable. Regarding the overall design philosophy: Attempts were made not to solder everything together in one monolithic block. Design often involves making mistakes, so having a way to easily re-configure your solution as it develops really helps.  More specifically, I find that building "blocks" in a somewhat modular/generic fashion is preferable to building something that is completely "application-specific".  As a bonus, if your blocks don't quite work out the way you want, they can more likely be re-purposed in later projects.
010
adafruit-playground.com @adafruit-playground.com · 24/12/2024
Option Map: Microcontroller form factors
adafruit-playground.com
Option Map: Microcontroller form factors
Overview This page gives an overview of microcontroller form factors typically used by the maker community (at a beginner/intermediate-level). The intention is to assist in finding the right fit for your projects. To achieve this, a high-level introduction of said form factors, and simple feature/property matrices will be presented. Naturally, coverage will be limited by the author's personal knowledge of available options (even if popular in other circles). The focus is primarily on Adafruit products (tends be available in these popular form factors), but also makes associations to names used by other companies (aliases). Common form factors (FF) The following sections present common form factors in decreasing order of size. A few different feature/property matrices will follow (Sorry. Not sure how to link to a lower section). FF: Mega/Grand Central
010
adafruit-playground.com @adafruit-playground.com · 24/12/2024
CircuitPython "Ring Oscillator" RNG with SN74AHCT14
adafruit-playground.com
CircuitPython "Ring Oscillator" RNG with SN74AHCT14
I've long had an interest in random number generation. In fact, a very early PCB I designed and built was exactly for this purpose: Arduino Random Number Generator. That project used a property of transistors called "avalanche noise". Inconveniently, it required a supply of +-10V to work properly. Avalanche noise is sometimes explained as being a "quantum effect" and thus is supposed to be a source of true randomness. There are other types of physical randomness. One actually exists inside the RP2040 chip already: It has a Ring Oscillator peripheral built in. However, this project shows how to build a Ring Oscillator from a simple "78*14" chip and process it into an infinite unguessable string of bytes using CircuitPython. I built this project with a QT Py RP2040. It's very simple; the only other required parts are the 74*14 chip, a breadboard, and some wire. This is not a truly robust RNG and you shouldn't use it for anything serious. For example, someone could tamper with it and just remove the connection between the RP2040 and the ring oscillator; the code wouldn't notice, but its outputs would be exactly the same each time it was powered on. Real RNG products will have part of the software that verifies that the random source is behaving like a random source and is not fixed at a single value, or otherwise trivially predictable.
010
adafruit-playground.com @adafruit-playground.com · 22/12/2024
EPS32 V2 eInk / ePaper Daily Calendar and Clock
adafruit-playground.com
EPS32 V2 eInk / ePaper Daily Calendar and Clock
I oh so wanted to build Liz Clark's QTPy CH32V203 eInk / ePaper Daily Calendar & Clock but I didn't have much luck with booting and programming the CH32V203 board.  I am no expert on how to do this. So I reversed engineered the code to Circuit Python and put in on the Huz/zah ESP32 V2 board.  I also wanted some color and used the 1.54" 3 color e-ink display. I don't have a 3-D printer so I cut a strip of plexiglass and used a heat gun to put a 45-degree bend so it looks like a paper calendar.   Below is my parts list I used to make this calendar.   The code is fairly simple, and I just pieced it together from Adafruit web pages.  Granted I could have used WiFi to pull the time down and I may but for now I wanted to get used to playing around with DS3231 board. I used a wire wrap pen which you can get off of Amazon fairly cheap.  I've added the code here as well.  I am just a NOOB to programming and mostly hack at it to get it working.  If you find this helpful, great.  It was a fun little project. Huz/zah ESP32 V2 Feather ID 5400 Adafruit EYSSPI Flex Cable 50mm ID 5462 Adafruit EYESPI Breakout Board 18 Pin Connector ID 5613 Adafruit 1.54" Tri-Color eInk / ePaper Display 200x200 with EYESPI ID 4868 Adafruit DS3231 Precision RCT Breakout Board ID 3013 STEMMA QT / Qwiic JST SH 4 pin Cable 50MM  ID 4399 Rainbow Wire Wrap ID 4730 Black Nylon Machine Screws and Stand offs M2.5 ID 3299   Wire connection table EYESPI connector   -->  ESP32 V2 VIN        --->    3v Gnd       --->    Gnd SCK       --->    SCK MOSI     --->   MOSI MISO     --->   MISO DC         --->   TX TCS       --->   RX SDCS    --->   Pin 33 * SDCS    --->   Pin 27 * Note: *  I will comment, and maybe someone could tell why but Pin 22 and 37 are not in the code but without them the display would not update.  So I am guessing the pins are either floating or pulled to ground.    
020
adafruit-playground.com @adafruit-playground.com · 16/12/2024
Option Map: Powering your circuit
adafruit-playground.com
Option Map: Powering your circuit
Overview This page gives an overview of available options to power your projects: alternatives that go beyond the development board's built-in USB connector. Broad categories, and simple product matrices will be presented. The intention is to make it easier to find the right product/solution without having to continuously re-read all product description pages. My interpretation of these pages might not be fully accurate. Unfortunately, there appears to be no way for others to inform me of such mistakes. I am hoping a similar document in "Explore & Learn" section will eventually replace this one. Regulation: Linear/Buck/Boost
010
adafruit-playground.com @adafruit-playground.com · 13/12/2024
Calibrate Your 3D Printer for Dimensional Accuracy
adafruit-playground.com
Calibrate Your 3D Printer for Dimensional Accuracy
If you want to 3D print press-fit or snap-fit project enclosures, there are a few tricks you can use to get better dimensional accuracy. Unless you print in an extremely dry climate, it helps to dry your filament. You can also calibrate your printer's motion system, filament extrusion, and X-Y hole/contour compensation.
032