HC05 - ZS-040 board Firmware v1.0.2

Hi there,
Has anyone stumbled upon the HC05 ZS-040 board, with firmware v1.0.2.
No matter what I do i cannot seem to enter into 'full at mode'. I mean, i can connect to it thru my cellphone (via btooth terminal app).
When I connect to it thru serial monitor, i can only send simple at commands, such as: at, at+name, at+version ... (which returns all ok). But when I try sending AT+PSWD or any other it doesnt respond. BTW, i'm trying to make two arduino boards talk to each other via btooth.

All connections seem fine, using the below tutorial, but everything i searched online has a different firmware (v2 or v3).


How are you putting the module into AT mode?

I've tried several ways.

HC05 pin 34 is soldered and tied thru a voltage divider to a digital pin on arduino. So everything is powered, then pin 34 is set to high via serial monitor. In this way, I can send some AT commands.

Also tried:

  • powering HC05 with pin 34 on high. This way, no AT command works
  • powering HC05, with pin 34 on low, but with switch button pressed down. No AT command works

Any help much appreciated.


I get much the same result running Martyn Currie's code with my HC05 modules version 2.0. A trick that I use is to use a small alligator clip to hold the switch closed then power the module and leave the clip holding the button (I have not connected a wire to pin 34). Then I can, then, read or change any setting on any of the HC05 modules that I have used.

The output that you show is not from the code on the Martyn Currie page that you linked.

True, i've made some modifications on the code.
I believe I tried clipping the switch button down, using a clothespin. I'll try again.
Anyway, the point here is that I never saw this firmware before. Everywhere I searched, either mentions v.2 or v.3.

FYI, code below

#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // RX | TX
// Connect the HC-05 TX to Arduino pin 2 RX.
// Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider.

char c = ' ';
byte ATmodePin=5;

void setup()
// set up the pin used to turn on AT mode
pinMode(ATmodePin, OUTPUT);
digitalWrite(ATmodePin, LOW);

// Start the serial monitor
Serial.println("Arduino is ready");

// HC-05 default serial speed for communication mode is 9600
Serial.println("BTserial started at 9600");
Serial.println("Type # to enter AT mode");

void loop()

// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTserial.available())
c = BTserial.read();

// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available())
c = Serial.read();

if (c=='#') // enter AT mode
digitalWrite(ATmodePin, HIGH);
Serial.print("Entered AT mode. Type $ to exit");

else if (c=='$') // exit AT mode by reseting the HC-05
digitalWrite(ATmodePin, LOW);