To use the recovery example a pin on the Arduino will be used to control the power to the HC-05 module. The image at the top of the exercise shows one method. The warning in the image is important. The current that can be supplied from pin of the 5v Arduino UNO is just adequate to power the HC-05 as long the current draw from other pins is minimal. Additionally, if you are using something other than the UNO version of the Arduino, particularly 3v models, a signal pin may not provide enough current.
This exercise will enter recovery mode by switching the power to the HC05, but if you have access to the 3.3v RESET pin then you can use it instead.
The recovery method is possible because there is a second type of command mode available. This recovery mode puts the HC-05 in command mode and forces the HC-05 serial settings to 38400 Baud, no parity, and one stop bit (38400N1). Access to the recovery mode requires control of the power to the HC-05 or access to the 3.3v RESET pin (#11).
Should that happen to you, all is not lost! The new version of the HC05 Library also includes an example sketch that makes it easy to recover communications with the HC-05.
The HC05 library
Arduino library was written to make it easier to to work with the HC-05. The
library handles the command/data mode switching and provides blocking
Steve Bird contacted me to suggest extending the HC05 library to configure the parity and stop bit settings. He provided sample code to show me how it could be done and then helped test the results. We quickly learned that the Arduino Software Serial port supports fewer baud settings than the HC-05 and the software serial port supports only one stop bit and no parity settings. It was easy to lose communications between the HC-05 and the Arduino. Digging into the datasheets we found another command mode (which I refer to as recovery mode) that always uses 38400N1 serial settings.
Figure 2, below, shows a better way to control power to the HC-05. If your recovery needs are just one-off, then you can probably use the connections in the top image, otherwise Figure 2 is a better choice.
Figure 2: Improved power switching.
Big Warning! In order to demonstrate the recovery sketch, this first step will set the HC-05 serial settings to something that is not compatible with the Arduino Software Serial port. The recovery sketch has worked for me, but if something goes wrong you might end up with an unusable HC-05. Follow this procedure AT YOUR OWN RISK!
Step 1: Load and run the attached script to mess up your HC-05. Use the Arduino Serial Monitor to view the output from the sketch. I will be something like this:
Step 2: Load the recovery sketch from the HC-05 Library Examples and run it. The results should look something like this:
So what happened?
The first sketch sets the HC-05 serial parameters to 9600 Baud, two stop bits, and even parity. It then attempts to find the HC-05 serial settings using
The recover sketch uses recovery mode to set the HC-05 to 19200 Baud, one stop bit, and no parity bits.
The HC-05 recovery mode is entered using the
Next the recover sketch corrects the HC-05 serial settings and then resets the HC-05 and exits recovery mode by setting the cmdPin low (using the
To wrap it up, the recover sketch uses
There are a number of delays in the process which were determined empirically. They may need to be adjusted.