Como Resetear mi Mod. Bluetooth HC05 desde mi Arduino {SOLUCIONADO}

Hola Buenos Días

Disculpame que te moleste; pero mira que me pasó. Trabajando con mi módulo Bluetooth hc05 se me planteó una inquietud que no logro resolver.

Cuando salgo de mi aplicación Android el módulo vuelve a parpadear rápidamente en espera de ser conectado nuevamente. Hasta ahí todo Ok.

Pero la duda que me surgió es: ¿Cómo hago para Resetear/Terminar/Finalizar la conexión desde mi placa de Arduino. En lugar de cerrar mi aplicación del SmartPhone?

En otras palabras hacer lo mismo que hace desde “configuración AT” el comando (AT+RESET) pero desde mi sketch de Arduino.

Gracias por cualquier comentario que me ayude.

entonces quieres terminar la comunicacion del arduino con tu android mandando algo al arduino por bluetooth???

Hola blandeta

Si Exacto, Correcto, eso mismo... Pero no encuentro el modo para resetearlo desde Arduino.

ya, mira este esquema puede servir usa un optoacoplador (4N35). entonces por ejemplo si mandas una "R" el pin 2 sera HIGH y activara el opto. lo que resetiaria el arduino

Hola y Muchas gracias por tu voluntad en darme esta mano.

Es una aplicación muy útil e interesante; pero lo que yo necesito "resetear" no es mi placa arduino sino mi Módulo Bluetooth.

Insisto esta excelente saberlo y tener en cuenta; pero como decía no este el caso.

En otras palabras necesito hacer lo que en modo AT es el comando "AT+RESET" del Bluetooth, pero desde mi programa grabado en el Arduino.

Gracias.

a entonces no se... solo conozco el reseteo por comandos at.

Hola no se cual es el objetivo de realizar este reinicio, primeramente si no me equivoco el comando "AT+RESET" hace un reinicio del módulo no de arduino, ahora la solución que da @blandeta no se si sea las más adecuada ya que no se controla el tiempo mínimo para un reinicio lo que podría causar problemas, hace un tiempo se me presentó la misma inquietud por lo que buscando en este foro me encontre este post Reset desde el programa el cual explica el problema que puede causar lo que propuso @blandeta y algo que podría ser una posible solución a lo que quieres hacer, lo cito pero te recomiendo que leas el post:

Hola,

Puedes hacer un reset software usando ensamblador ( asm("jmp 0x0000"); ). Ésto salta tu programa a la zona de memoria "reset vector".
Es similar a lo que ha puesto Jose Francisco, que en su caso es usando un puntero a funciones y que está apuntando a reset vector (0x0).

Pongo un ejemplo:

unsigned int tstart;

void setup()
{
Serial.begin(9600);
Serial.println("EMPEZANDO....");
tstart=millis();
}

void loop()
{

if ( (millis()-tstart)>1000 )
  {
    Serial.println("Un segundo! Reseteando"); 
    asm("jmp 0x0000");
  }

}







La salida es:

EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....


Para hacerlo más "user friendly" puedes declarar al principio del código:
#define RESTART asm("jmp 0x0000")
y ahora puede usar el macro RESTART; en tu código.

Ésto no es un "power cycle" del micro, pero me imagino que te hará un "apaño" para lo que quieras hacer. Me refiero, que cuando reseteas hardware, todas las entradas/salidas vuelves a sus valores iniciales y luego el programa empieza desde dicha dirección (Reset Vector). Con ésta instrucción lo que haces es saltar por software otra vez a dicha dirección, pero no pasa por el estado en que todas las entradas i/o del micro pasan por estado inicial del micro.

Saludos!!


Igor R.

Gracias por vuestra colaboración. Pero nos estamos desviando. No necesito RESETEAR la placa Arduino.

Necesito resetear a voluntad solamente el módulo Bluetooth desde Arduino.

pensé en la siguiente alternativa. A ver que les parece:

por medio de un PnP le doy alimentación al Módulo arduino y cuando quiero que se resetee corto la señal al PnP, espero con un delay(1500); y luego le vuelvo a dar alimentación por medio de ese PnP.

esa señal que le da movimiento al PnP sería por medio de un Pin X.

Esta sería el modo que estoy pensando en salir de este pozo.

Lo que deberías comandar con el transistor es la alimentación del módulo Bluetooth. Con un NPN en el negativo del hc05 en emisor común desconectás el módulo quitándole la alimentación simplemente con un cero en su base enviado desde cualquier salida digital del arduino. Para reencenderlo, simplemente enviás un HIGH por el mismo pin.

Buenos Días para todos.

Gracias Pablo, vos le diste la forma a la idea que "pareciera" resuelve el problema.

Sinceramente no encuentro otra, intente por los pines que comunmente no se usan, pero no encontré nada de todo lo leído; es por eso que pensé en esta alternativa.

Espero en la semana intentar probarlo en protoboard y si funciona comentaré esperando poner "SOLUCIONADO".

Un cordial saludo para todos desde Gualeguaychú. E. Rios

No he comentado porque no terminaba de entender lo que se buscaba aunque estaba bien explicado, pero no daba con la respuesta que busca Humberto.
Creo que lo que quiere es algo asi
Supongamos que tu objeto se llama BTserial

BTserial.write("AT+RMAAD\r\n");    // remueve lista de pares autenticados
BTserial.write("AT+DISC\r\n");       // para desconectarse
BTserial.write("AT+INQC\r\n");       // cancela el modo de consulta cancel inquiry mode

a pesar de esto, veras que es posible que a los pocos segundos se intenten reconectar

entonces debes usar de nuevo

BTserial.write("AT+RMAAD\r\n"); para borrar la lista de dispositivos remotos. Intentar linkearse y hacerlo con MAC Address 0000,00,000000 y eso prevendrá la reconexión.

No lo he ensayado, es mi resumen luego de una buena investigación!!

Buenos Días y gracias a todos por acompañarme en esta etapa.

Les quiero compartir mis experiencias (en la ilusión que les puedan servir a Uds. para algo).

siempre (no sé porque) me ha gustado llevar al limite en las comunicaciones a Arduino; que tanto me responde ante interferencias; por ejemplo. Y he logrado que todo ande muy bien.

No es lo mismo (en comunicación) hacerlo en protoboard que en una placa de pcb, basta que un cable no haga bien contacto para que te haga perder una tarde buscando un error de funcionamiento.

Bien entre los módulos nRF24L01, Control Remoto RF433Mhz y el Módulo Bluetooth específicamente; las respuestas han sido óptimas. CONVIVEN muy bien en una misma placa.

Pero el que se lleva la mejor parte es el módulo Bluetooth. Es el mejor de todos. Les cuento todo lo que he probado.

Atraviesa varias paredes sin problemas.
Desde un Primer piso responde muy bien.
pero, siempre hay un pero, No admite una pequeña Red de conexión. porque esta diseñado para la comunicación Punto a Punto.

He visto por ahí que hablan de comunicación con y HASTA 3 Esclavos (sinceramente no logré hacerlo).

Pero creo que esta podría ser una buena propuesta (que pienso probar en estos días).

Propuesta: Una vez que un Arduino Esclavo envía una Temperatura y el Maestro la Recibe. El esclavo se desconecta, para dejar que otro Arduino pueda enviar también su información.

El problema que todos los que experimentamos con bluetooth sabemos que volverán a "aparearse" entre sí e impediría un apareamiento con otro Arduino. Es así que junté el comentario de Pablo y la solución propuesta de Surbyte y lograría:

Menor consumo (Envío DATO, desconecto y apago el Bluetooth Esclavo) de este modo dejo libre al Master para recibir de otro que se "encienda y se aparee". de este modo logro que siempre estén DOS apareados.

La pregunta sería y Humberto ¿Por qué tanto trabajo si tenes el nRF24L01 que te permite hacer todo sin dar tantas vueltas?.

porque es mucho más débil en comparación del Bluetooth. Yo no necesito enviar una señal a 1 Km necesito atravesar paredes sin problemas.

*En muchos casos para vincularse bien exige que este encendido previamente y si no lo esta se pierde la comunicación, (en otras palabras) tiene muchos peros.
*Por otra parte es muy sensible a la energía (donde varíe sus 3v3 deja de funcionar bien.

Dicho de otro modo el nRF24L01 es muy lindo "bajo óptimas condiciones de uso"; pero Bluetooth es el Ford Falcon que todos alguna vez quisimos tener y comparar.

Robusto, responde ante cualquier necesidad, pero consume mucha nafta. (En este caso de esta metáfora) no me permite crear una Red. Hasta lograr llevar a cabo esta propuesta que me dá a pensar que es muy "solida" encontrándole esta "solución Alternativa".

Para finalizar alguno podría estar pensando que escribo mucho y no hago nada. Es por eso que los invito a ver mis experiencias en este video.

Muchas gracias a todos por la mano que me han dado, Les deseo lo mejor y una Muy buena Navidad (Dios mediante).

Humberto

Aquí les muestro la primer placa que hice sin el nRF24L01 donde les dice todos los resultados ventajosos que obtuve.

Con respecto al Control Remoto RF433Mhz sin adosarle ningún cable de antena, solo como viene.

En el Protoboard es "CA_LA_MI_TO_SO" el alcance (donde te alejas 6 metros deja de andar. Pero; Pero; Pero. Lo pones en una placa pcb y no sé porque; pero anda FANTÁSTICO atraviesa una pared de 30cm y responde a 6 metros Muy bien.

Espero que toda esta información les resulte útil.

Yo uso los nRF24 configurados en una RED MESH (Tmrh20 Mesh) y me preocupo que haya puentes si no visibles que tengan paredes de poca atenuación. Entonces cuando un nodo alejado no se comunica lo hace a traves de 1 o varios por la red y te aseguro que no te das cuenta.

Solo es montar sensores y ubicarlos en zonas estratégicas de tu casa. Cada casa es un mundo.
A mi me resulta. E incluso en el patio hago lo mismo. Nunca me alejo mas de 30 mts y siempre le doy alguna utilidad.

Buenos Días para todos y Felicidades en este 2019.

Quería contarles que terminé resolviendo todo con un Transistor PnP.

Puede darse el caso que les pueda servir en alguna de sus aplicaciones y por ello les agrego como lo he implementado.

Un cordial saludo para todos desde Gualeguaychú E. Ríos