To save power consumption, I tried to connect the HC-06 bluetooth module to a digital pin of my Arduino Nano. (HC-06 +5V <=> pin 11, HC-06 gnd <=> gnd) In that way, I can toggle the bluetooth when I am not using it. However, when I tried to pinMode(11, OUTPUT) and digitalWrite(11, HIGH), the led on HC-06 does not turn on which means it is not powered. I have tried to connect the HC-06 +5V to the 5V output of arduino and the HC-06 can turn on sucessfully. I have also tried to use a multimeter and the digital pin outputs a voltage of 5V. As the digital pins of Arduino can give 40mA while the HC-06 draws 30mA - 40mA, it should have enough power. I have also tried to use other digital pins as well but still the HC-06 cannot be powered. What have I done wrong?
A digital IO pin is only capable of powering an LED or an incredibly low powered device. It is not suitable for powering meaty RF modules.
Instead you need to control the power to your module using a P-channel MOSFET as a High-Side switch.
For instance, assuming a 5V module with built in 3.3V LDO:
/RFEN is active low - set the pin OUTPUT and LOW to turn the module on. M1 should have a threshold of no lower than -4V, better -2V or higher.
Also be sure to set RX and TX to be INPUT when you power down the module or back-powering through the TX/RX pins may occur.
R2/R3 is a simple logic level shifter for the 3.3V logic signal the RX pin expects.
it should have enough power.
Probably not. Debugging is about challenging all assumptions, especially implicit ones.
Put a high side switch there and it should be ok.