While working on my last project, I wanted a way to manually trigger a hardware reset on a Raspberry Pi using a microcontroller such as a Raspberry Pi Pico or Arduino. All recent versions of Raspberry Pi boards have a RUN pin (separate from the GPIO header) that can be used to either reset the device or wake it up from a halt state. The official documentation mentions "Connect to GND to reset" for this specific pin. Using this information, I came up with a very simple schematic that can be used with both 5V and 3.3V logic microcontrollers, utilizing a common NPN bipolar junction transistor (2N3904).
Warning:
This circuit does not provide electrical isolation. When using this circuit, be aware that there is a direct connection between the microcontroller and the Raspberry Pi, which could lead to unintended electrical interactions.
Schematic
How it works
When the GPIO pin of the microcontroller goes high, it turns on the 2N3904 transistor, allowing current to flow from the collector to the emitter, effectively connecting the RUN pin to ground through the 330Ω resistor. The 2N3904 requires roughly 0.2mA for reliable switching. Using a 2.2kΩ resistor, the base current will be enough to turn the transistor on effectively for both a 3.3V microcontroller (Raspberry Pi Pico) and a 5V microcontroller (Arduino), making the circuit versatile and universal.
Specifically for Base-Emitter Voltage: (V_{be}
) ≈ 0.7 V (2N3904 NPN transistor)
For a 3.3V Microcontroller, Base Voltage: (V_b
) = 3.3V, the resulting Base Current (I_b
) should be:
I_b = \frac{V_b - V_{be}}{R} = \frac{3.3V - 0.7V}{2.2k\Omega} = \frac{2.6V}{2200\Omega} \approx 1.18mA
For a 5V Microcontroller, Base Voltage (V_b
) = 5V, the resulting Base Current (I_b
) should be:
I_b = \frac{V_b - V_{be}}{R} = \frac{5V - 0.7V}{2.2k\Omega} = \frac{4.3V}{2200\Omega} \approx 1.95mA