3.3v output for more than one pin at a time

I have noticed that if more than one pin is set to output-HIGH, the most recent pin output request provides 3.3v out while the others are sacraficed (1.5v, .5v, etc). I am using the Adafruit_BBIO.GPIO library to control the pins. I am building a “climate control” system, and using the BBB and a DHT22 temperature/humidity sensor to operate relays to supply 120vAC to components (lights, heater, water pump).

I have: a door switch SPDT(P9_11) for safety override, a DPDT(P8_10 and P8_12) for automatic and manual operation, and a 3-24vDC/0-240vAC relay for suppling power to a lamp.

The P8_12 and P9_11 always have power. If the door switch is activated(P9_11) it activates the relay and bypasses the DPDT switch. If the DPDT switch is set to “manual”(P8_12) the relay is activated. Otherwise if the temperature from the DHT22 is above or below a set limit, and the DPDT switch is in “automatic”(P8_10), the relay is activated accordingly.

Pseudo code:
import libraries

Set pins P8_12 and P9_11 to output 3.3v


while 1:
read temperature

Decide to turn P8_10 on/off based on temperature

if temp<28:

Loop indefinately

Here is the problem:
If I run a test program with only the door switch the light turn on/off as expected. If I execute the above code the DPDT switch and auto/manual control works as expected however the door switch will not supply enough power to activate the relay. When the above code is running and P8_10 turn on, or if the DPDT switch is set to manual(P8_12) the voltage across the door switch(P9_11) drops to ~1.5v and is less than the required 3v to activate the relay.

Can the BBB supply 3.3v out for more than one pin simultaneously, or will i need to add an amplifier circuit to each output?

I can attach full code and schematic if it would be helpful. In the end there will be 8 relays, of which up to 5 will be activated simultaneously.

how are you driving the relays ?

i hope you are using a relay driver IC

As Wulf man said: Which relay driver are you using?

What happens if you detach the relay driver and sense the outputs directly with a multimeter?
Most GPIO are capable of currents between 4mA and 8mA (see buffer strength table 4.1. am3352.pdf).
Drawing more current can kill the µC !!


One other thing not related to your problem (don’t know if you fixed it in the real code)
According your pseudo code your output P8-10 will behave stange when the temperature is almost 28 and the ADC toggles between 28 and the next lower value.
To avoid it you should always use a hysteresis:

const HYSTERSIS = 0.2

if temp < 28-HYSTERESIS
if temp >= 28

It depends on your system which hysteresis makes sense.