keys finder o buscador de llaves bluetooth

Hola Chicos.
Supongo que conocéis unos pequeños dispositivos bluetooth que enlazados con una app, se comunican entre ellos.
Se suelen vender como keys finder.
Pulsando el botón del keys finder, suena una notificación en el movil. Pulsando el botón llamar de la App, suena un sonido en el mini altavos del keys finder.
Otrá opción es como pulsador para selfies. Si colocas el movil a una distancia no muy grande de tu llavero keyfinder, activas el disparo para hacer selfies.
Si el keys finder y el movil están fuera de cobertura bluetooth, en la app puedes abrir un mapa, donde te indica en qué ubicación estuvieron enlazados por ultima vez. Ello significa que allí es donde dejaste el keyfinder, normalmente con tus llaves o donde lo tengas colocado, como maleta, bolso, maletín, etc, etc.


Se alimenta con una batería de 3V, CR2032.

Quisiera implementar ese dispositivo en otro aparato también pequeño.

En internet solo he encontrado información de como hacerlo, pero con módulos de tipo Hc05 Bluetooth, HC-10 o similares. Demasiado grande, junto con un arduino para incorporarlo a mi dispositivo.
Tampoco me sirve, comprar keys finders comerciales e integrarlos físicamente, ni por precio ni por tamaño.
Tengo que hacerlo desde 0, incluido la parte del modulo bluetooth.

Con lo cual, lo que querría hacer es comprar los componentes sueltos, implementarlos en el pcb de mi aparato y añadir la parte de código y hardware necesaria para la parte keys finder.
Quizás mi pcb tenga que tener un IC exclusivo para la parte keys finder.
Algunos keys finder utilizan un CC2540.
Alguien ha visto por la red el esquema y código para realizar el keys finder sin utilizar los módulos tipo HC-05 ??? O sea, entiendo que sería el esquema y código del HC-05 lo que necesito.

Agradezco cualquier ayuda para este proyecto.
Muchas gracias de antemano.

Hola Dompa!!
Desconocía lo que propones pero resulta interesante.

Buscando un poco di con esto (como tantas otros sitios seguramente) link Digikey

Tal vez conozcas Digikey o tal vez no, es una de tantas grandes shopping de productos electronicos en USA.

Cuando vas a detalles muestra los valores por cantidades

1 4.77000 $ 4.77
10 4.25500 $ 42.55
25 3.82960 $ 95.74
100 3.48920 $348.92

Baja de 4.77 dolares a 3.489 de 1 a 100 unidades. Hasta ahi nada nuevo.

Bien, lo que te sugiero es que por acá debería estar tu enfoque. Olvida el HC05 porque este es BLE o sea BT 4.0 BLE y no el simple 2.0 del HC05.
Este permite conectarte en red.

Es de Texas Instrument, muy bien documentado, con todo tipo de manuales y guias de uso, incluso el DVK Development Kit

Tienes todo para hacerlo.

EDITO: sigo buscando y me encuentro con esto Link o sea ya esta hecho para Arduino o cualquier microcontrolador. Para que hacerlo entonces?

Gracias.
Muy bueno el link de la ultima linea. Por ahí voy a ir.
Casualidad que me acaba de llegar otro keys finder de otra marca y usa otra aplicación. Este incorpora un N51822 que adivino que es lo mismo que NRF51822 con muchas paginas de ayuda.

Creo que lo mejor es que haga un prototipo con un arduino y este AT-09 y luego, cuando funcione para lo que yo quiera, pase el código a un microcontrolador lo más pequeño posible, añada el CC2540 y los componentes secundarios a mi nuevo prototipo miniatura.

Primero practico y optimizo con arduino + AT-09 y luego fabrico todo by myself.

Gracias por la ayuda.

Exacto!

Hola de nuevo.
Mientras me llega el AT-09, leo en la red que es igual que el HM-10. Casualidad, tengo ya un HM-10.
Desde hace 24 horas, estoy peleando para que me obedezca los comandos AT y no hay manera.
He encontadro un sketch que me gusta en:

pagina donde encontré el sketch y explicaciones

En los primeros intentos, conseguí cambiarle el nombre a mi HM-10. Nunca más ha respondido a los diferentes comandos AT.
Bien es cierto que cuando obedeció, lo hizo a través del sketch que ordena modificar varios parametros. Escribiendo AT+VER? o AT solo o AT+BAUD? a mano...nunca respondió ni responde.

Este es el sketch que uso pero que solo me funcionó una vez y lo he vuelto a intentar de mil maneras y nada:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX

void setup() {
  // put your setup code here, to run once:
  mySerial.begin(9600);
  Serial.begin(9600);

  sendCommand("AT");
  sendCommand("AT+ROLE0");
  sendCommand("AT+UUID0xFFE0");
  sendCommand("AT+CHAR0xFFE1");
  sendCommand("AT+NAMEPEPE_BL2");
    
  
}

void sendCommand(const char * command){
  Serial.print("Command send :");
  Serial.println(command);
  mySerial.println(command);
  //wait some time
  delay(100);
  
  char reply[100];
  int i = 0;
  while (mySerial.available()) {
    reply[i] = mySerial.read();
    i += 1;
  }
  //end the string
  reply[i] = '\0';
  Serial.print(reply);
  Serial.println("Reply end");
}

void loop() {

}

Incluso he invertido varias veces el TX y RX, he puesto el EN del modulo HM-10 a 5V (Lo leí en alguna pagina).

He probado con todas las velocidades desde 300 a 250000 por si accidentalmente hubiera cambiado la velocidad, pero sin resultado.
Uso la opción sin ajuste de linea aunque probé con todas las opciones.

En el serial, solo consigo leer las ordenes que manda el sketch, nunca las respuestas del modulo.
Ese texto en el serial, solo lo leo claramente, si tengo seleccionada la velocidad de 9600 Bd. Con cualquier otra, solo muestra caracteres raros. De todas formas, ese texto lo manda el arduino que en el sketch está configurado para 9600.

Agradecería alguna sugerencia de como resetear electricamente el HM-10 ya que por comandos AT, no obedece.

Gracias

EDITO: En el movil lo detecto con el nombre que le asigné. Por eso sé que lo conseguí cambiar la primera vez.

Hola Chicos/as
Por si a alguien le sirve. Algo he avanzado.
Ahora el modulo BL responde pero solo a comandos via sketch. Si escribo AT en el monitor serial, no hace nada. Pero si le subo un sketch nuevo como este, si responde y cambia los valores que le indico: (Esto es solo una parte del codigo)

sendCommand("AT");
 sendCommand("AT+ROLE0");
 sendCommand("AT+UUID0xFFE0");
 sendCommand("AT+CHAR0xFFE1");
 sendCommand("AT+NAMEDBL2");
 sendCommand("AT+BAUD?");
 sendCommand("AT+NAME?");

Pero cualquiera de esos comando, escrito en el serial, no lo obedece. Porqué ??? Ni idea.
El motivo de porqué no respondía antes a las ordenes via sketch, era porque el modulo estaba configurado a 19200 baudios. Y por más que leordenaba ponerse a 9600 en el sketch, él no lo recibía y no obedecía.
El truco está en ir cambiando en el sketch la velocidad una a una hasta que le des las ordenes en la velocidad en la que está el modulo. Así encontré que en 19200 respondía y se actualizaba a la nueva velocidad ordenada por el sketch. En este caso AT+BAUD0.
Ojo según que paginas miremos, para configurarlo a 9600, en unas es BAUD0, en otras BAAUD1 y en otras incluso BAUD4. Para mi HM-10 original (no chino), 9600 es BAUD0
En el movil se detecta con el nuevo nombre y configuración configurada por sketch.

Ahora me queda conseguir que tambien obedezca comandos AT por serial monitor...
Si alguien sabe como, se agradecerá la ayuda.
Saludos

Como no tengo el módulo no puedo ayudarte y creo que la gran mayoría esta igual que yo.

Poco a poco me voy haciendo con él...
Ahora he leido que cuando no responde a los comandos via serial, es porque está en modo SLEEP. Para que despierte hay varias formas, que por cierto, de momento no me funcionan:

Copio y pego:

HM Bluetooth module datasheet
-------------------------------------------------------Last Version V524 2014-03-08 16
7. System function
How to wake up module from sleep mode?
There are two ways to wake up module from sleep mode.
7.1 Send “I am iron man, I am iron man, I am iron man I am iron…..” string.
Yes, that is a joke, in sleep mode, you can send a long string (Length >
80 or more), that string can made module wake up, and you will receive
“OK+WAKE” string through UART. That string can’t include any AT commands.
7.2 Long press system KEY >=1000 ms.
After wake up module, you can send and receive AT commands.
How to let module into sleep mode?
In discoverable mode, send “AT+SLEEP” string through UART, if all is okay,
module will return “OK+SLEEP” string and into sleep mode.
System KEY function (PIO0)
Press if Low > 1000ms:
7.3.1 If Module is in sleep mode
Module will wake up immediately, if AT+NOTI value is “1”, module will
send “OK+WAKE” string through UART.
7.3.2 If Module has already connected to remote device
Module will disconnect from remote device.
7.3.3 If Module is standby mode
Module will reset to default configuration. Then restart.
System LED function (PIO1)
In sleep mode, LED has turned off.
If AT+PIO10 is setup
Unconnected status: Output High 500 ms, Low 500 ms
Connected status: Output High
If AT+PIO11 is setup
Unconnected status: Output Low.
Connected status: Output High.

Como novato, entiendo que donde dice:

you can send a long string (Length >
80 or more), that string can made module wake up, and you will receive
“OK+WAKE” string through UART. That string can’t include any AT commands. "

Esto significa que le envíe por sketch una traba de más de 80 digitos para que despierte ???
Lo he hecho incluyendo en el codigo una linea así: (Ojo aquí no pongo los 80 digitos, en el codigo si)

sendCommand("ggggggggggggggggggddddddddddddddddhhhhhhhhhhhhhhhh");

No ha funcionado.

Otra opción qyue dice el datasheet es:

Long press system KEY >=1000 ms.
After wake up module, you can send and receive AT commands.

No tengo ni la más remota idea de lo que significa. Este modulo no tiene ningún botón, para pulsar más de 1 segundo.

Buscando, buscando y probando y probando, encontré en otra web, esta sugerencia para el HM-10:

To wake up the device, send it a
long line of random alphabetic characters which is 80 characters or more. It will
wake up and respond with OK+WAKE. If you want to work with the device for a
while, send it an AT+PWRM1 command so it does not sleep on you. You can then
send it an AT+PWRM0 when you are done to reduce power consumption. Have fun with your new iBeacon.

Inserté en el codigo, una linea sendCommand("AT+PWRM0") y no solo ya no contesta a los comandos via serial ni por sketch que además a apagado la luz intermitente que demostraba que estaba funcionando.

No funciona niel PWRM0 ni el PWRM1, bueno el 0 parece que lo ha dormido del todo...
A ver si alguien le ha pasado y me sugiere alguna salida.

Gracias

Hola Chicos/as

Viendo que poca gente conoce este nuevo dispositivo y seguro que alguien pasará por el mismo camino que yo.
Supongo que alguno se encontrará con los mismos problemas que yo.

Después del bloqueo total, por usar el comando AT+PWRM0 que coloca el modulo en SLEEP, Llevo 4 horas incapaz de darle una sola orden ni por sketch ni por comandos escritos en el serial y que además se quedara en OFF el led que indica que funciona.

Despues de probar todas las posibilidades más absurdas, he conectado un cable al PIN "EN" del modulo HM-10 y a GND del arduino. Eureka....Ya se enciende el led intermitente de nuevo y además se vuelve a dejar configurar via sketch....

Ahora vuelvo al punto casi de partida, resolver porque no me obedece escribiendo los comandos AT en la linea del monitor serie. (Solo obedece si son parte del código).

Suerte a quien se encuentre con este problema.
Agradeceré sugerencias.

Seria bueno que cuando encuentres algo, pongas los links para poder leerlo de primera mano y no tu versión parcializada. Siempre mas ojos ven mas que dos.

Hi,
Yo se que pueda ser que sea ya tarde pero en caso que no puedas resolver tu problema adjunto un link que explica como hacerlo y el sketch usando un modleo deblue tooth.Puedes usarlo como tutoriao ejemplo.
https://create.arduino.cc/projecthub/Niranjan_niru/find-me-deb4a8?f=1

Buenos días.

Efectivamnete, podría incluir las url pero no quería cargar demasiado el mensaje. Lo haré a partir de ahora.

La mayor parte de los comandos AT están en el datasheet:

Datasheet HM-10

tauro0221, ese link ya lo conocía, pero utiliza un HC-06 que no es de bajo consumo como el HM-10. Además este ultimo es BL 4.0 No soy experto, pero por lo que voy leyendo, para usos con baterias, se recomienda este tipo de modulos BLE.

Estoy todavía en pañales....Empieza un nuevo día y mi prioridad es que el modulo responda a los comandos tecleados en el serial monitor. Los que le llegan del arduino via sketch los obedece, pero si escribes en la linea de comandos, esos no los recibe ni obedece.

Sigo buscando

Hi,
Perdona que posiblemente estoy molestandote pero adjunto un link que explica paso por paso como hacer trabajar el HM-10.Si ya lo viste pues ignoralo. Explica paso por paso como programarlo.

http://www.martyncurrey.com/hm-10-bluetooth-4ble-modules/

Gracias.

De molestia nada.. Precisamente lo que necesito son sugerencias e ideas.
Sin abrirlo, ya te digo que lo he visto y repasado letra a letra.
He probado su sketch y otros...
Al final el que estoy utilizando es el que publiqué en mi primer post. Ese me permite enviarle comandos AT al HM-10 via sketch ya que por linea de comandos no obedece. Bueno...al menos no contesta.
Se me acaba de ocurrir que quizás oiga, obedezca y simplemente por linea de comandos no conteste... Lo probaré al terminar esta respuesta.

He probado casi todos los comandos AT y no he conseguido que via linea de comandos, obedezca... Solo si le ordeno por código.

Ahora estoy probando con otro modulo HM-10 copia que me ha llegado hoy... Con otro arduino y usaré otro código...Es muy extraño. Llevo 4 días con este atasco.

Gracias igualmente.

Nada, con otro arduino, con otro HM-10 (copia), con varios códigos y nada.
Responden por sketch pero no responden por linea de comandos.

He hecho otra prueba que es enviarle AT+NAMEJUAN y aunque no me conteste, comprobar si realmente lo cambió.
Compruebo mediante código con AT+NAME? y me devuelve el nombre anterior. O sea, no lo cambió.

Me faltan solo unas horas para tirar todo a la basura y dedicarme al huerto.

Saludos,

Hola Chicos/as.

He tenido que hacer, copiar, modificar varios sketch encontrados por aquí y por allá. El problema no está resuelto, pero no hay mal que por bien no venga:
Para las pruebas que estoy haciendo, he tenido que hacerme un pequeño código que interroga a mi modulo bluetooth HM-10. Es la unica vía para comunicarme con él.

Ya que lo tengo para mí, he pensado que a quien esté jugando con este modelo, le puede venir bien.

El mío es el original, el que pone HM-10 en la placa e incorpora el cristal de cuarzo, que la copia no tiene.
Se puede adaptar facil este codigo para el AT-09 o HM-10/copia.

Si es un HM-10, funcionará a la primera. Si no es original, basta con eliminar el punto de interrogación de cada pregunta. Mirad la diferencia:

sendCommand("AT+ROLE?");
  sendCommand("AT+ROLE");

Aquí está el código completo:

//Info sacada de http://fab.cba.mit.edu/classes/863.15/doc/tutorials/programming/bluetooth/bluetooth40_en.pdf
//Alimentar el HM-10 con 5V y GND de arduino.
//Si no salen resultados, probar cambiando las dos velocidades desde 9600 tanto en este codigo como en el monitor serie e ir subiendo el sketch.
//Al encontrar la velocidad donde responde, activar la linea "sendCommand("AT+BAUD0");" Si ya estaba en 9600, no es necesario activar esa linea.
//Ambos NL&CR
//Para saber el significado de cada comando AT y como cambiar la configuración, ir a:
//http://fab.cba.mit.edu/classes/863.15/doc/tutorials/programming/bluetooth/bluetooth40_en.pdf

  #include <SoftwareSerial.h>
  SoftwareSerial mySerial(2, 3); // RX del HM-10 al D3, TX del HM-10 al D2


void setup() {
  
  mySerial.begin(9600);
  Serial.begin(9600);

  //sendCommand("AT+BAUD0");
  sendCommand("AT");
  sendCommand("AT+ROLE?");
  sendCommand("AT+UUID?");
  sendCommand("AT+CHAR?");
  sendCommand("AT+NAME?");
  sendCommand("AT+BAUD?");
  sendCommand("AT+VERR?");
  sendCommand("AT+VERS?");
  sendCommand("AT+ADDR?"); 
  sendCommand("AT+BATT?");
  sendCommand("AT+NOTI?");
  sendCommand("AT+PASS?");
  sendCommand("AT+ADDR?");
  sendCommand("AT+POWE?"); 
  sendCommand("AT+TYPE?"); 
  sendCommand("AT+MODE?"); 
  sendCommand("AT+PIO1?");   
}
    
    


void sendCommand(const char * command){
  Serial.print("Pregunta: ");
  Serial.println(command);
  Serial.print("Respuesta: ");
  mySerial.println(command);
  //wait some time
  delay(100);
  
  char reply[100];
  int i = 0;
  while (mySerial.available()) {
    reply[i] = mySerial.read();
    i += 1;
  }
  //end the string
  reply[i] = '\0';
  Serial.print(reply);
  Serial.println("---");
  
}
  
void loop() {

}

En absoluto soy experto ni en Arduino ni en Bluetooth. Solo es una pequeña contribución de un novato que ya ha pasado por ese camino.

Saludos.

Hola Chicos/as.

Buscando, buscando por la red he encontrado una información importante para mis dudas.
Resulta que el modulo HM-10 puede estar en modo AT o no. Por eso hasta hoy, no me obedecía cuando le enviaba algún comando por la linea de comandos del monitor serie.

Con un código que he encontrado en esta web,Activar modo AT he hecho unas pequeñas modificaciones y he conseguido que ahora me obedezca y me responda desde esa vía.
Bien es cierto que al activar el modo AT de esta manera, ahora los comandos enviados por codigo, no los reconoce, no obedece ni responde.
O bien mi mezcla de mi código con el encontrado está mal, o efectivamente las dos formas no son compatibles a la vez. Quizás el modulo acepte ordenes AT solo de una manera o de otra a la vez.

Este es el código encontrado en la citada url y modificado los pines ligeramente:

/*
This code is in the public domain.
written by Damian Glinojecki
*/

#include <SoftwareSerial.h>

#define bt_power 7
#define bt_key_power 8
#define indication_led 13

SoftwareSerial BT(2, 3); // RX | TX

void setup()
{
  // set the pins to OUTPUT
  pinMode(bt_power, OUTPUT);  
  pinMode(bt_key_power, OUTPUT);
  pinMode(indication_led, OUTPUT);
  
  // set the pins to LOW
  digitalWrite(bt_power, LOW);
  digitalWrite(bt_key_power, LOW);
  digitalWrite(indication_led, LOW);
  
  /************************************************
  Setting the pins to low is important because 
  in order for us to get into AT mode the key pin
  has to be set to Ground FIRST. Many tutorials out
  there fail to mention this important fact and 
  therefore many people have problems with getting 
  into the AT mode of the HC-05
  ************************************************/
  
  // make sure the key has been LOW for a bit
  delay(100);
  
  // set the key pin to High
  digitalWrite(bt_key_power, HIGH);
  
  // small delay
  delay(100);
  
  // now power on the BT
  digitalWrite(bt_power, HIGH);
  
  // start our serial so we can send and recieve
  // information from the BT module
  Serial.begin(9600);
  // initiate the BT serial at 38400 which is the default 
  // speed at which the BT AT mode operates at
  BT.begin(9600);
  
  // self explanatory
  Serial.write("For a list of commands, visit: \n");
  Serial.write("Type AT commands  \n\n");
  
  // process complete turn on led 13
  digitalWrite(indication_led, HIGH);
  
  // Send an "AT" command to the AT (without quotes)
  // if response is OK, then we are connected
  // and ready to program the BT module
 }

void loop()
{

  // listen for a response from the HC-05 and write it to the serial monitor
  if (BT.available())
    Serial.write(BT.read());

  // listen for user input and send it to the HC-05
  if (Serial.available())
    BT.write(Serial.read());
    
}

He mezclado mi codigo original que me permitía ordenes AT por sketch con este que permite ordenes desde la linea de comandos del monitor seria. Es este:

//Conexiones del HM-10/ARDUINO GND/GND, RX/D3, TX/D2, VCC/D7, EN/D8=(BRK/D8) 

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX

#define bt_power 7 
#define bt_key_power 8 
#define indication_led 13 

void setup() {
  
  // set the pins to OUTPUT 
  pinMode(bt_power, OUTPUT);  
  pinMode(bt_key_power, OUTPUT); 
  pinMode(indication_led, OUTPUT); 
  
  // set the pins to LOW 
  digitalWrite(bt_power, LOW); 
  digitalWrite(bt_key_power, LOW); 
  digitalWrite(indication_led, LOW); 

  /************************************************
  Setting the pins to low is important because 
  in order for us to get into AT mode the key pin
  has to be set to Ground FIRST. Many tutorials out
  there fail to mention this important fact and 
  therefore many people have problems with getting 
  into the AT mode of the HM-10
  ************************************************/
  // make sure the key has been LOW for a bit  
  delay(100); 
  
  // set the key pin to High  
  digitalWrite(bt_key_power, HIGH); 
  
  // small delay  
  delay(100); 
  
  // now power on the BT  
  digitalWrite(bt_power, HIGH);  
  
    mySerial.begin(9600);
  Serial.begin(9600);

  sendCommand("AT");
  sendCommand("AT+NAME?");
  
  }

void sendCommand(const char * command){
  Serial.print("Comando enviado: ");
  Serial.println(command);
  Serial.print("Respuesta: ");
  mySerial.println(command);
  //wait some time
  delay(100);
  
  char reply[100];
  int i = 0;
  while (mySerial.available()) {
    reply[i] = mySerial.read();
    i += 1;
  }
  //end the string
  reply[i] = '\0';
  Serial.print(reply);
  Serial.println("    ");
  //Serial.println("Fin Respuesta");
}

void loop() {

// listen for a response from the HM-10 and write it to the serial monitor
  if (mySerial.available())
    Serial.write(mySerial.read());

  // listen for user input and send it to the HM-10
  if (Serial.available())
    mySerial.write(Serial.read());
}

Con este ultimo, solo puedo enviar comandos via linea de comandos AT. Con el anterior, solo via sketch.

Alguien ve algún error que motive esa situación ? O simplemente las dos formas son incomaptibles ???

Gracias

Hola Chicos/as.

Tengo listo parte del buscador de llaves. Después de muchos cambios en el código, lo pego aquí por a alguien le apetece hacer esta parte. Con este código, podemos llamar desde la App al modulo HM-10 y otros similares y el buzzer sonará hasta que volvamos a llamarlo.
Ahora me falta lo opuesto, implementar un botón en el arduino para llamar al movil. Por cierto uso Iphone y App BLE TERMINAL

Para android supongo que habrá App similares. Un par de amigos se han bajado esta misma App para Android y no les funciona con mi dispositivo.. No les deja enlazarse con el HM-10. Como no tengo Android, no lo puedo probar.

El dispositivo terminado, deberá:
-Responder a la llamada de la App.
-Con el botón, llamar a la App y esta contestar con un sonido / notificación.
-Tras elegir la opción selfie en la App, pulsamos el botón del dispositivo y debería activar la foto.

  • Si ambos están fuera de cobertura Bluetooth, la app debería mostrar un mapa, indicando donde estuvieron enlazados por ultima vez.

Como veis, casi no falta nada......
Este es el código actual:

#include <SoftwareSerial.h>  
        

  SoftwareSerial mySerial(2, 3);  // pin 3 a RXdeHM-10, pin 2 a TXdeHM-10
  // GND HM-10 a GND Arduino.
  char DATO = 0;      // variable para almacenar caracter recibido
  int BUZZ = 4;   // + Buzzer a pin digital numero 4. GND buzzer a GND ARDUINO.
  int bt_power = 7; // D7 a VCC de HM-10
  int bt_key_power = 8; //D8 a EN o BRK de HM-10
  int activo =0;
      

void setup(){
  
   pinMode(BUZZ, OUTPUT);  // pin 4 como salida buzzer.
   pinMode(bt_power, OUTPUT);  //salida VCC para HM-10.
   pinMode(bt_key_power, OUTPUT); // HIGH para EN del HM-10.

   // set the pins to LOW
   digitalWrite(bt_power, LOW);
   digitalWrite(bt_key_power, LOW);
  
   // make sure the key has been LOW for a bit
   delay(100);
   // set the key pin to High
   digitalWrite(bt_key_power, HIGH);
   // small delay
   delay(100);
   // now power on the BT
   digitalWrite(bt_power, HIGH);
  
   mySerial.begin(9600);
   Serial.begin(9600);
}

void loop(){
        
  if (mySerial.available())       // si hay informacion disponible desde modulo
    DATO = mySerial.read();
  
  if ( DATO == '1' )   // si el caracter recibido es el numero 1 activo pasa de 1 a 0 o viceversa
    activo ^=1;
  //Los valores de los tonos podrán ser cambiados más adelante.
  if (activo==1)
  {
    tone(BUZZ,1000,200); //hará sonidos hasta que yo lo detenga con otro "1"
    delay(200);
    tone(BUZZ,600,100);
    delay(100);
    tone(BUZZ,100,100);
    delay(200);
  }
  DATO=' ';
}

No soy experto ni de lejos, todo está siendo con ayudas de otros. Pero aún así si teneis alguna duda, me encantaría poder devolver parte de la ayuda que este foro me presta.

Saludos