OE stops everything
OE, output enable, switches all sixteen outputs off at once when it is pulled HIGH, whatever the sketch or the bus is doing. A 10 kΩ resistor holds it LOW, so it can be left unconnected. Wired to a GPIO, it is a stop button that works even when the I²C bus does not.
A pin that overrides the bus
OE is the fifth pin on the control header, and the underside prints HIGH - DISABLE beside it. It goes straight to the chip's output-enable pin, which is active LOW: LOW means outputs on.
A 10 kΩ resistor on the board pulls OE to GND. Leave the pin unconnected and the outputs are always on, which is how every build in this book is wired. Pull it HIGH and all sixteen outputs are driven LOW at once: no pulses leave the board.
What it does and does not stop
It stops the pulses. The chip keeps running, keeps answering on I²C, and keeps every channel's setting; drop OE LOW again and the same pulses come back.
It does not cut servo power. V+ stays on the red row. What a servo does with no pulse depends on the servo: many simply stop driving and can be turned by hand, but do not count on a particular one to go limp.
OE is one of the six chained pins, so in a plugged-together chain one OE wire stops every board.
Wiring a stop
Any free GPIO to OE:
const int KILL = 4; // any free GPIO, wired to OE
void setup() {
pinMode(KILL, OUTPUT);
digitalWrite(KILL, LOW); // outputs on
}
void stopAll() { digitalWrite(KILL, HIGH); }
void startAll() { digitalWrite(KILL, LOW); }Because it is one wire and one GPIO, it works when a stuck I²C bus would not let a command through. Until the sketch sets the pin as an output, the board's resistor holds OE LOW and the outputs stay live, unless the microcontroller itself pulls that GPIO up while it boots.
When it does not work
Check OE. If it is wired to 3V3, 5V or a GPIO that sits HIGH, every output is held LOW while the bus carries on normally. Disconnect OE, or drive it LOW, and the pulses return.
That is how it is wired: OE is one of the six chained pins, so every plugged-in board shares it. To stop boards separately, join them with jumper wires and give each board's OE its own GPIO.
They are wired from VCC to the channel pins, so they light when a pin is LOW, and OE HIGH drives every pin LOW. Servos on the same board get no pulse at that moment; the LEDs simply work the other way round.
One servo on channel 0, from an ESP32-S3 or an Arduino Uno, with a sketch that says what it is doing.
The first servo →Edit this page — content/books/pca9685/oe-stops-everything.mdx
Questions about this product
See what other owners have asked, and read their solutions.
PCA9685 16-Channel Servo Driver Board, USB-C Powered
Loading discussions…
Discuss this article
Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.