Search
1000 results for “adafruit”
-
Have been spending much of the afternoon and evening reading up on CircuitPython and Adafruit’s various helper libraries. My PyPortal app will have a few different views and I had to go old-school paper model to help me visualize how I should organize the layout with all the different views and component groups.
#CircuitPython #PaperPrototype #IoT #PyPortal #CrazySideProject -
Mis-using CAN Bus to send random-length strings of Emoji from an @adafruit QT Py ESP32-S3 with CAN Bus transceiver to an Adafruit Feather RP2040 with CAN Bus FeatherWing, using @circuitpython 8 (baudrate=500_000, 6 bytes per CAN message)
#microcontrollers #networking #PythonOnHardware #circuitpython
-
Greetings #LTX2023, bringing this @Raspberry_Pi + @timebeatapp + @adafruit + Blinkstick mashup this weekend...
-
Martina of NerdForge Paints a Cyberpunk Cityscape with Glow Paints #cyberpunk #scifisunday https://blog.adafruit.com/2020/12/13/martina-of-nerdforge-paints-a-cyberpunk-cityscape-with-glow-paints-cyberpunk-scifisunday/ #cyberpunk
-
The IEEE Spectrum Top Programming Languages of 2023 #Programming #Python @IEEESpectrum https://blog.adafruit.com/2023/09/12/the-ieee-spectrum-top-programming-languages-of-2023-programming-python-ieeespectrum/ #ieeespectrum #programming #software #program #python #code
-
The IEEE Spectrum Top Programming Languages of 2023 #Programming #Python @IEEESpectrum https://blog.adafruit.com/2023/09/12/the-ieee-spectrum-top-programming-languages-of-2023-programming-python-ieeespectrum/ #ieeespectrum #programming #software #program #python #code
-
The IEEE Spectrum Top Programming Languages of 2023 #Programming #Python @IEEESpectrum https://blog.adafruit.com/2023/09/12/the-ieee-spectrum-top-programming-languages-of-2023-programming-python-ieeespectrum/ #ieeespectrum #programming #software #program #python #code
-
You’re just a stick figure to this camera #PrivacyLens https://blog.adafruit.com/2024/08/10/youre-just-a-stick-figure-to-this-camera-privacylens/?utm_source=dlvr.it&utm_medium=%5Binfosec.exchange%5D
-
Making a Fictional Calendar for You Science Fiction World #SciFiSunday https://blog.adafruit.com/2023/12/23/making-a-fictional-calendar-for-you-science-fiction-world-scifisunday/ #sciencefiction #worldbuilding
-
Making a Fictional Calendar for You Science Fiction World #SciFiSunday https://blog.adafruit.com/2023/12/23/making-a-fictional-calendar-for-you-science-fiction-world-scifisunday/ #sciencefiction #worldbuilding
-
Making a Fictional Calendar for You Science Fiction World #SciFiSunday https://blog.adafruit.com/2023/12/23/making-a-fictional-calendar-for-you-science-fiction-world-scifisunday/ #sciencefiction #worldbuilding
-
The Story Behind Darth Vader’s Star Wars TIE Fighter #SciFiSunday https://blog.adafruit.com/2023/01/08/the-story-behind-darth-vaders-star-wars-tie-fighter-scifisunday/ via @[email protected]
-
Go Hands-On with Mojo Augmented Reality Contact Lens #WearableWednesday https://blog.adafruit.com/2022/07/20/go-hands-on-with-mojo-augmented-reality-contact-lens-wearablewednesday/ #wearablewednesday #augmentedreality #wearables #wearable
-
Episódio 173 – As novas novidades – Parte B
https://retropolis.com.br/2026/04/22/episodio-173-as-novas-novidades-parte-b/
#Podcast #80386 #8086 #8086CPU #Adafruit #AliExpress #Amiga #AppleIIc #Commodore #Commodore64 #CRASHMagazine #EhBASIC #fpga #Harlequin #IbmPc #Intel #Laptop #Lazarustorm #LCD #microdrive #Minimig #MSX #MSX2 #MSXGoauld #MSXMini #Notebook #Omega #OmniDesktop128HQ #OneChipBook #PCBWay #PiStorm #podcast #Retrocomputao #retrogaming #Retrpolis #sinclair #SMX #Sony #Stargate #
-
A new generation of #glassholes coming up.
"Meta Wants to Scan Every Face You Walk Past
#Meta plans to add facial recognition to #RayBan smart glasses. An internal document says they timed launch during political crisis so civil society wouldn't notice."
https://blog.adafruit.com/2026/02/14/meta-wants-to-scan-every-face-you-walk-past/
-
This GPIO Board is full of sensors.
Seven APA102 multicolour LEDs
Four 14-segment alphanumeric displays
HT16K33 display driver chip
Three capacitive touch buttons
Atmel QT1070 capacitive touch driver chip
BMP280 temperature and pressure sensor
Blue, green and red LEDs
Piezo buzzer#Electronics #SBC #ARM #Pie #Raspberry #GPIO #OpenSource #programming #Python #libraries #Adafruit #LEDs #sensors #buttons
-
This GPIO Board packs 28 leds into a tiny shim
The Installation is just a one-liner in Python
https://pinout.xyz/pinout/led_shim
#Electronics #SBC #ARM #Pie #Raspberry #GPIO #OpenSource #programming #Python #libraries #Adafruit
-
I've just seen an interesting gpio board for my Raspberry Pi and it only uses two pins since it communicates with i2c
It is a 16x2 LCD display almost similar to the display that I remembered on the Casio FX700P
#Electronics #SBC #ARM #Pie #Raspberry #GPIO #OpenSource #programming #Python #libraries #Adafruit #Casio #FX700P
-
Pico Touch Board Audio
I wanted to go back to my Pico Touch Board PCB Design and see if there was a way to make it more stand-alone. The original design was to make it a MIDI controller, but that isn’t the only option.
https://makertube.net/w/tADSyrPrUdR1mx7yKRXZTC
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
These are the key Arduino tutorials for the main concepts used in this project:
If you are new to microcontrollers, see the Getting Started pages.
Parts list
- Pico Touch Board PCB – built
- Resistors: 1x 220Ω, 1x 1K
- Capacitor: 1x 100nF ceramic, 1x 22uF electrolytic
- Breadboard and jumper wires
The Circuit
Most of the GPIO are linked out to the touch pads, but the three analog inputs are still available. They are added on to the header on the right hand side of the board at the top, so we can use one of these as an audio output.
Initially, I thought of connecting it to an 8Ω speaker. If I was using an Arduino then I’d use a 220Ω resistor in series to limit the current to less than 20mA. But as I’m using a Pico, the maximum current has to be a lot less. I seem to recall it is a little complicated, and there are some options, but I have a figure of around 4mA that I tend to work to. It is also running at 3.3V, which means that it would need an in series resistor of 3.3 / 0.004 = 825Ω. This would work, but the speaker will be really quiet!
So I ditched that idea (there is a software reason too, but I’ll talk about that in a moment) and went straight to a PWM output with a low-pass filter to try to give me some vaguely useful as a line-out signal.
I’ve not done the calculations, but instead went a bit “hand-wavy”, combing a 1K and 220Ω resistor to drop the voltage, along with a 100nF capacitor. I’ve also added a 22uF capacitor to remove the DC bias.
That seems to give me something useful, but as you can see from the trace below of a square wave PWM output, there is a lot of room for improvement!
Update
Ok, so going back and doing this semi-properly as per my notes from Arduino PWM Output Filter Circuit, I can see that the 1K and 220Ω resistors can be treated as a 180Ω equivalent (take them as two in parallel) for the filter circuit, which means a cut-off of around 8kHz which ought to be pretty good….
But reducing a 3V3 signal to around 20% leaves for quite a low level of audio – around 660mV peak to peak. It would probably be better to aim for a reduction of around a half.
Using a 1K and 500Ω resistor would be an equivalent resistance of 333Ω, so putting that into a low pass filter calculator gives a cut-off frequency of around 5kHz for a 100nF capacitor.
Weirdly the only thing that really seems to improve things is to raise that capacitor value to 1uF. My calculation would suggest a cut-off frequency of around 480Hz which is pretty small for an audio signal. But it seems to work.
The PWM frequency I was seeing was coming in at around 120kHz so should be plenty high enough to get filtered out. In the Circuitpython code, it is apparently chosen to support the number of bits required at the base clock frequency whilst being inaudible. For the RP2040 running at 125MHz, and with the chosen 10 bit resolution (more here) this is:
- 125,000,000 / 1024 = 122,070 Hz
A 5kHz (or even 8kHz) cut-off I thought ought to be fine, but Davide Bucci on Mastodon explained for me:
“120kHz is 25 times 4.7kHz, that is about 1.4 decades and with a first-order filter you have a tad less than 30dB of attenuation, that is not a lot. A signal at 3.3V peak to peak at 120kHz becomes about 100 mV on the output after the filter.”
So switching to 1uF, as Davide explains: “if you put 1µF, you are indeed filtering a decade lower, therefore you gain 20dB in the attenuation and the 100mV become 10mV, much less noticeable.”
The alternative is to repeat the 1K+100nF stage and add a second order filter which also seems to work pretty well.
The final circuit that works fine for me at present, will be on of the following.
The first is less components but assumes that the frequencies won’t go much about ~1KHz or so. That is ok for my current setup but would limit the audio range a fair bit.
This is the output of the two-stage filter. It is so much better!
The Code
I wanted to stick with Circuitpython, so my initial thought was to use simpleio.tone() to generate a tone based on a frequency from an IO pin. However, this has the problem that the code is blocking whilst the tone is playing which isn’t very useful.
Instead I went straight to synthio. It turns out that using synthio was actually a lot easier than the “simple” simpleio…
Here is the basic code to generate an ASR-shaped square wave on a PWM audio output on GPIO 28 based on the touch pads as input.
import board
import touchio
import synthio
import audiopwmio
from adafruit_debouncer import Debouncer, Button
audio = audiopwmio.PWMAudioOut(board.GP28)
synth = synthio.Synthesizer(sample_rate=22050)
audio.play(synth)
synth.envelope = synthio.Envelope(attack_time=0.1, release_time=0.6, sustain_level=1.0)
touchpins = [
board.GP2, board.GP3, board.GP4, board.GP5,
board.GP6, board.GP7, board.GP8, board.GP9,
board.GP10, board.GP11, board.GP12, board.GP13,
board.GP14, board.GP15, board.GP16, board.GP17,
board.GP18, board.GP19, board.GP20, board.GP21, board.GP22
]
THRESHOLD = 1000
touchpads = []
for pin in touchpins:
t = touchio.TouchIn(pin)
t.threshold = t.raw_value + THRESHOLD
touchpads.append(Button(t, value_when_pressed=True))
while True:
for i in range (len(touchpads)):
t = touchpads[i]
t.update()
if t.rose:
synth.press(60+i)
if t.fell:
synth.release(60+i)I did experiment with overclocking the Pico to give double the PWM frequency, using
microcontroller.cpu.frequency = 250_000_000
But although this did double the PWM frequency to around 244kHz, it didn’t seem to make much difference for the filtered signal.
Battery Power
One last thing I wanted to explore was if it was possible to power the touchboard with batteries. I left in a number of power options, so for this one I’m using the 5V/GND pin header. I’ve included a couple of capacitors for smoothing, and need to add the 1N5817 diode as shown below.
This requires the following additional components:
- 1x 1N5817 Schottky diode.
- 1x 100nF ceramic capacitor.
- 1x 47uF electrolytic capacitor.
- Jumper wires.
- 3 or 4 battery box.
The 5V/GND header pins connect to the Raspberry Pi Pico’s VSYS pin via the Schottky diode. The 1N5817 has a typical voltage drop of 0.45V, so combined with the Raspberry Pi’s accepted input voltage of 1.8V to 5.5V this means that ideally two or three AA batteries (at 1.5V each) would work. Four 1.2V rechargeables might be an option too.
It might be possible to get away with four 1.5V AAs, but that would give an input voltage of just over 5.5V, so I think that is probably pushing things too far. It might be a good use for some spent AAs though that are no longer reading a full 1.5V…
One of the downsides of battery power is that the touch works best when your fingers are at the same GND potential as the board. It works best if the GND pin of the (unpopulated) barrel jack is touched when using the board.
Closing Thoughts
With hindsight it would have been useful to have included a simple PWM output stage on the original board, but it is relatively straight forward to add one.
It might even be worth me making an add-on board that will connect to the header pins of the power and analog pins containing the simple passive filter components.
What is pretty impressive though, is how easy it is to use synthio with Circuitpython.
Kevin
-
Arduino and SP0256A-AL2 – Part 4
Having now tried both an Arduino and Raspberry Pi Pico as programmable clocks for the SP0256A-AL2, this post starts to look at some alternative solutions, starting with a HC4046 phase-locked loop, voltage-controlled oscillator clock.
- Part 1 – Basic introduction and getting started
- Part 2 – Arduino programmable clock
- Part 3 – Using a Raspberry Pi Pico as a programmable clock
- Part 4 – Using a HC4046 PLL as the clock
- Part 5 – Using an I2C SI5351 programmable clock
- Part 6 – Adding MIDI
https://makertube.net/w/8eRTaCvqb3bsmZEJFy94E3
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers, see the Getting Started pages.
Some Ideas
Whilst trawling around the Internet (and remembering a comment from my earlier posts), I found two existing projects where changing the frequency was used as a way to add pitch to the SP0256A-AL2:
- The previously mentioned MIDI Narrator: https://rarewaves.net/products/midi-narrator/
- A great blog post on SP0256A-AL2 pitch control: https://www.polaxis.be/2011/11/sp0256-al2-pitch-control/
Both use a VCO approach. The latter using a LTC6903 programmable oscillator; and the former using a CD4046 PLL device.
The LTC6903 looks like it would be a lot more complicated for me to use (especially being SMT), but I have some DIP 4046 devices already in the parts drawer so that is definitely an option for me.
I’ve also found (and now ordered) some breakout boards based on the SI5351 based programmable clock module. They all seem to follow Adafruit’s lead: https://learn.adafruit.com/adafruit-si5351-clock-generator-breakout/overview
One last thought – use a 555. No really! There are some versions that can go up o 3, 4 or even 5MHz apparently, see: https://en.wikipedia.org/wiki/555_timer_IC#Derivatives Of course having that in any way programmable might be a challenge, but it isn’t out of the question.
4046 VCO/PLL
A voltage-controlled oscillator is just what it sounds like. An oscillator whose frequency is related to the level of a control voltage on its input.
Here is a pinout and functional view of the 4046 from the TI 74HC4046/74HCT4046 datasheet. This provides several phase comparators and a voltage-controlled oscillator to create a phased-locked loop controller.
A key statement is the following:
“The VCO requires one external capacitor C1 (between C1A and C1B) and one external resistor R1 (between R1 and GND) or two external resistors R1 and R2 (between R1 and GND, and R2 and GND). Resistor R1 and capacitor C1 determine the frequency range of the VCO. Resistor R2 enables the VCO to have a frequency offset if required.”
The “application information” section describes the “with offset” operation:
There are a lot of graphs of characteristics in the datasheet for the various combinations of R1, R2 and C1 – these are the “figure 27-32” mentioned above. Actually, to cover all options, there are figures 10 through to 43, but most of those cover other situations.
The criteria for selecting R1, R2 and C are:
- R1 Between 3kΩ and 300kΩ
- R2 Between 3kΩ and 300kΩ
- R1 + R2 Parallel Value > 2.7kΩ
- C1 Greater Than 40pF
For the MIDI Narrator, the values being used are as follows:
- R1 = 1.5K to 2.5K (adjustable)
- R2 = 12K
- C1 = 1nF
Which I believe puts it in the following areas of the performance curves, although they aren’t strictly within the state required ranges…:
So without detailed calculations and measurements, I think this puts the (centre) offset frequency at a low-number of MHz (extrapolating for 12K at 5V) and the Max/Min ratio (R2/R1) at something around 4 to 8.
I believe, from looking at the other charts, that a higher R1 or C value gives a lower frequency. There are graphs for the following with the stated approx frequency ranges at 4.5V:
- 1M5, 100nF: 0 < Freq <100Hz
- 150K, 100nF: 0 < Freq < 1kHz
- 5K6, 100nF: 0 < Freq < 20kHz
- 150K, 50pF: 0 < Freq < 1.5MHz
One last thing to note from figure 32 – it states that a Vin of 0.95 VCC will generate the maximum frequency and 0V for the minimum.
It turns out I have some CD4046 in my parts box, not a HC or HCT 4046. On initial inspection, there doesn’t seem to be a lot of difference that would significantly affects my messing around. Some of the pins (that I’m not using) have different functions:
But as I’m not using those pins, that probably won’t matter. But then on closer inspection, I can see a key difference that definitely will affect my messing about – the operating frequency ranges:
- HC/HCT4096: Up to 18MHz at VCC=5V.
- 4096: Up to 1.4MHz at VDD=10V.
And digging into the detailed spec for the CD4046, when running at 5V the maximum is down to just 0.8MHz typical.
So I could use them to test out some general principles but need a HC/HCT version to really achieve what I’d like to do.
At this point my understanding was starting to struggle, and those graphs weren’t helping much. So I just went ahead and built the version of the circuit from the Rarewaves MIDI Narrator. I really wasn’t having much luck with it as is however, so started fiddling about with different components and an oscilloscope to see if I could make any sense from it.
There is a good article about the basics of a 4046 based VCO-driven PLL oscillator output here: https://hackaday.com/2015/08/07/logic-noise-4046-voltage-controlled-oscillator-part-one/
I was finding that the output wasn’t a particularly clean square wave, and at higher frequencies was pretty much triangular. At this stage I don’t know how much of that is my measuring equipment. I have a scope probe with a 10pF capacitance apparently, so a 10K resistor and 10pF capacitor do create a low-pass filter that significantly rounds off the signal.
But more significantly, the peak to peak voltage was greatly reduced to around 1.5Vpp with a significant BC bias. That wasn’t much use as a clock signal for me – from Part 3 I know the SP0256A-AL2 requires <0.6V for a LOW and >2.5V for a HIGH. Basically scope or on scope the output was pretty unreliable for me.
I’d included the 10K resistor between the 4046 and SPA256A-AL2 as per the circuit for the MIDI narrator. But without that resistor, the clock is much cleaner and has much more useful levels, so I removed it. Later experiments show that a 1K resistor seems to work fine too.
I also found that the suggested 1nF capacitor wasn’t giving me a particularly useful range. In the end, 4.7nF seemed to work well for me. Eventually after testing a range of different resistor values, I went back to 12K and 1.5K + 1K pot from the original circuit. This gives me:
- The frequency range set by a combination of 4.7nF and 12K.
- A frequency offset of between 1K and 2.5K is configurable.
I believe this will pull the frequency offset down slightly from the previous values to something between 100kHz and 600kHz, according to the charts, but it gives me a very useful range between around 1MHz and 5MHz once tuned slightly with the trimpot.
When going through the LM358 the usable voltage range for the VCO seems to be between ~2V and 3V for the 1MHz to 5MHz range. 0V is currently giving me 120kHz, tweaking of the offset resistor (R2 = 12K) helps here – 3K3 makes that around 500kHz, making the useful input voltage now around 1.5V to 3V. The issue is that reducing R2 starts to get to the point where the condition that R1||R2 > 2K7 no longer holds true. But either seems fine for some experimenting for now.
My final circuit used for now is as follows:
The CLK output was plugged directly into the SP0256A-AL2 OSC 1 input, with OSC 2 connected to GND.
The control voltage pot goes through a LM358 which might not be strictly necessary in this case, but helps to at least stabilise the input voltage to the VCO. It might also be useful when I switch to programmatically driving the control voltage from a microcontroller.
The usable clock frequency range is adjusted using the trimpot. Eventually, as mentioned, I settled on a range of around 1MHz to 5MHz. It will go lower, but that isn’t so useful for driving the SP0256A-AL2.
Arduino PWM Voltage Control
To get the Arduino to set the control voltage, requires generating a PWM signal which can be pretty simply done with analogWrite().
The default PWM frequency is around 400kHz without messing about directly with Arduino timers. This will need filtering though, but a simple low-pass filter should easily work here, especially as the frequency won’t be changing very often.
I just went back to the MIDI narrator circuit and could see that a 100K/220nF filter was used. Putting these into a low-pass filter calculator gives a cut-off frequency of just under 8Hz. This generates a pretty smooth output.
There is a balance between the frequency range and offset chosen for the 4046 by the selection of R1, R2 and C, and the voltage range sent out of the Arduino. After a fair bit of messing around, I settled on the following:
- R1 = 3K3
- R2 = 10K
- C = 560pF
Then used analogWrite() with values between 60 and 200 to generate voltages and frequencies as follows:
- analogWrite() value range: 60 to 200
- PWM smoothed voltage range: 1.3V to 3.6V
- LM258 output voltage range: 1.3V to 3.3V
- Clock frequency range: 2.2MHz to 5MHz
Setting up the clock via PWM voltage control is done as follows:
#define SP0_CLOCK 10 // D10
void clockSetup () {
pinMode(SP0_CLOCK, OUTPUT);
analogWrite(SP0_CLOCK, 128); // Approx 2.5V output
}
void setClock (int clock) {
analogWrite(SP0_CLOCK, clock);
}Closing Thoughts
This seems to work really well. The control using a pot isn’t particularly reliable, but that is quite different if generating a control voltage from a microcontroller.
I still need to do some calibrations to work out what voltages create which frequencies and then what pitch of voice reproduction that seems to produce, but that can come later. For now it is enough to know it appears to work albeit in still quite a hand-wavy kind of way.
As an aside, whilst trawling around the Internet for this one I stumbled across the CTS256A-AL2 device. This is a microcontroller (I think it is 8051 based, based on a PIC7041) that performs text to allophone conversion for pairing with a SP0256A-AL2 for a complete text to speech system.
There are some details, and an interesting DIY board, here: https://www.smbaker.com/cts256a-al2-text-to-speech-board and an older project here: https://8051bits.com/misc-projects/speech%20-%20music%20synthesizers/speech-mus-syn.html
Unfortunately these seem very hard to come by these days, but there is some interesting emulation code here: https://github.com/GmEsoft/SP0256_CTS256A-AL2
And a pretty thorough discussion about the device and its running code here: https://www.retrobrewcomputers.org/forum/index.php?t=msg&th=816&goto=10847
Kevin
-
Kodlama ile oynamak istiyorum ve mikrodenetleyici tarafında yeni ürünler var mı diye baktım ve içlerinden bir tek bu ilgimi çekti
#RaspberryPiPico için tasarlanmış, ama MicroPython ile çok basit, Atari seviyesinde oyun yapılmayacaksa #C /C++ yâni #Arduino istiyor!
Ne anladım ben bundan?
O zaman Arduino ile çalışacak şekilde tasarlasaydınız
Python ile bir Led Matrix ekranı bile sürülemiyorsa yuh artık!
Sanırım @adafruit 'in CircuitPython'u ile ancak basit Atari oyunları herhâlde yapılabilir!
-
Svenska Dagbladet (i samarbeid med Gøteborgsposten) har en føljetong hvor de undersøker Meta sine AI-briller (i samarbeid med #rayban ) og - ikke overraskende - viser det seg at Meta samler inn store mengder data (som du ikke kan opt ut av?) og en arbeidsstyrke i Kenya har som jobb å se på det.
Ikke overraskende, kanskje, men temmelig stilt i norske mediebilde?
Voldsomme kudos til svd og gp!
#meta #ray_ban_meta #surveillance
#svd #gp
https://blog.adafruit.com/2026/03/04/you-bought-zucks-ray-bans-now-someone-in-nairobi-is-watching-you-poop/ -
Diplo on your Pico! Build a polyphonic multi-sound DJ board on a sheet of paper using CircuitPython and a RaspberryPi Pico! https://bit.ly/pico-dj-board a super fun classroom build for the #CSed fam. @adafruit Adalogger Cowbell allows gigabytes of sound from the @raspberrypi Pico #circuitpython #raspberrypi #RaspberryPiPico #dj
-
#MakerSpace, #makered, STEMed and #csed folks, here's a super-fun challenge lesson I use in class: Build a Baby Groot who talks when his plant is touched. Uses #Adafruit #CircuitPython a Circuit Playground, a 3D printed planter, laser-cut box, but lots of options abound. https://youtu.be/gEmyZ7ZWMIo
-
The latest lesson for my PhysicalComputing course: Create an easy IoT dashboard for your Raspberry Pi Pico W / 2W with CircuitPython and free AdafruitIO. We'll toggle NeoPixel LEDs on/off, change light color, play sounds remotely, and move a servo using a slider. #csed
https://youtu.be/fjysAa3N2OI?si=mMn6cJOWNhgpA500 -
Use a Raspberry Pi Pico W (orig. or 2W) and setup a web page with a toggle to turn NeoPixel lights on and off. MQTT has never been easier to use. CircuitPython and free Adafruit.io makes it happen! An updated lesson I use in my PhysicalComputing course. Hack on! #csed
https://youtu.be/iFwvvEJ_UwA