SPI or I2C I/O Expander that has PWM function

Hi All

Anyone has any idea if there is an I/O expander that has the capability or doing transmitting (analogwrite) and receiving (analogread) analog values?

Hi @leeway

There are a lot of PWM output SPI and i^2 chips for driving LEDs. Here’s a sample breakout board with 12 output channels, but 24 channel boards are also available:

For the analog read side, things are available but it is hard to know what kind of specs you are looking for. How many channels and what sampling rate are the key questions. For slow rates you can get many channels like this 8-channel, 75 kS/s SPI IC:

1 Like

Hi @bko ,

I am also looking for a way to control as many individual LEDs as possible in the simplest possible way.
My current requirement is for an 80-LED status visualization panel.

It’s strange that I can’t find anything in this forum about the different PWM drivers.

The chip with the highest number of channels I found is the TLC5947.

Has anybody already used the Adafruit_TLC5947 library for their 24 channel PWM LED driver?


Have you looked at the Neopixel type parts or the SPI versions? These are serial data devices that can be daisy-changed so that you can have hundreds controlled by two wires.

1 Like

Yes @bko but I have not found one using a library which has been ported to our beloved Particles.

And the Adafruit libraries focus on controlling only RGB LEDs: 3 channels at once.

I want to be able to control individual LEDs

Hi @FiDel

Our own @BDub ported and optimized a Neopixel library that is discussed here:

I believe there are two version, one for Core and one for Photon.

For the SPI version of these LEDs, which Adafruit calls DotStart, you don’t need a library per se. You can just use the built-in SPI (Wire) library.

This type of LED is individually addressable so for each LED you can control the RGB values individually.

Try looking here for ideas:


1 Like

Wow @bko !
You really opened my eyes!
Thanks for this GREAT tip!

Of course, I knew the “NeoPixel” products, but was never interested in them as I thought this is only for fun and flashy ornaments and effects. But I did not understand the possibilities it creates also for professional applications. Now I do…

FYI: Below is the summary table I made during my research about up-to-date LED drivers:

Maybe this can be useful for somebody…

I have ordered various types of individually addressable “smart LEDs” and I believe this will simplify some of my projects a lot.

Just for your interest, here is one of the status control panels I am producing for some projects:



Still, for some other applications where I need many extra PWM channels, I would be interested to get some help to make the WS2803D work with Particles!

Anybody has tips?


For one the WS2803 should be compatible with the already ported WS2301 WS2801 library.
But in order to use the SPI capability of the chip, you could have a look at this lib (should be easy to port)

1 Like

Hey @ScruffR , I assume you mean “WS2801” instead of “WS2301”, right?
( WS2301 seems to exist also: LINK)

Correct, sorry for that :blush:

1 Like