HC-06 (módulo BT) deja de responder después de unos 20 minutos

1

Estoy viendo el siguiente comportamiento en un módulo HT-06 BT ( enlace ) conectado a un Arduino Uno .

El módulo funciona muy bien durante ~ 20 m y luego falla (la unidad parece apagarse; no se encienden luces en el dispositivo BT). Arduino sigue funcionando bien.

Periódicamente estoy consultando el dispositivo desde Python (PySerial) que se ejecuta en un OSX / MB a través de bluetooth integrado. Aquí hay un registro de la comunicación y puede ver el error después de 20m.

[!] 2015-03-05 15:15:01.344719
[x] Finding device and service port
[x] Attempting connection: (30:14:12:19:26:86) on (1)
[x] Blocking on recv
[x] Closing socket
^@^@^@^@^@
[!] 2015-03-05 15:20:00.766638
[x] Finding device and service port
[x] Attempting connection: (30:14:12:19:26:86) on (1)
[x] Blocking on recv
[x] Closing socket
^@^@^@^@^@
[!] 2015-03-05 15:25:01.265796
[x] Finding device and service port
[x] Attempting connection: (30:14:12:19:26:86) on (1)
[x] Blocking on recv
[x] Closing socket
^@^@^@^@
[!] 2015-03-05 15:30:00.787703
[x] Finding device and service port
[x] Attempting connection: (30:14:12:19:26:86) on (1)
[x] Blocking on recv
[x] Closing socket
^@^@^@^@^@^@
[!] 2015-03-05 15:35:00.795710
[x] Finding device and service port
[x] Attempting connection: (30:14:12:19:26:86) on (1)
Traceback (most recent call last):
  File "/Users/test.py", line 28, in <module>
    raise serr
socket.error: [Errno -536870195] Cannot connect to 1 on 30:14:12:19:26:86
^@^@^@^@^@
[!] 2015-03-05 15:40:01.194140
[x] Finding device and service port
[x] Attempting connection: (30:14:12:19:26:86) on (1)
Traceback (most recent call last):
  File "/Users/test.py", line 28, in <module>
    raise serr
socket.error: [Errno -536870195] Cannot connect to 1 on 30:14:12:19:26:86
^@^@^@^@^@
[!] 2015-03-05 15:45:00.857675
[x] Finding device and service port
[x] Attempting connection: (30:14:12:19:26:86) on (1)
Traceback (most recent call last):
  File "/Users/test.py", line 28, in <module>
    raise serr
socket.error: [Errno -536870195] Cannot connect to 1 on 30:14:12:19:26:86

Como puede ver, una vez que falla, nunca se recupera. Alguien tiene ideas de cómo remediar esto. Intentaré diagnosticar con otro módulo BT (tengo algunos) para ver si se trata de un comportamiento erróneo de un dispositivo defectuoso o un problema en mi arquitectura general.

TIA! (¡Gracias de antemano!)

ACTUALIZAR

Parece que no tiene nada que ver con el tiempo y más con el número de solicitudes antes de fallar. Por ejemplo, aumenté la frecuencia para ejecutar cada 2 minutos y se puede ver que, después de 4x intentos, la placa BT falla:

[!] 2015-03-05 19:16:00.679951
[x] Finding device and service port
[x] Attempting connection: (30:14:10:14:11:85) on (1)
[x] Blocking on recv
[x] Closing socket
[x] Nothing consumed (0), exit
^@^@
[!] 2015-03-05 19:18:00.835225
[x] Finding device and service port
[x] Attempting connection: (30:14:10:14:11:85) on (1)
[x] Blocking on recv
[x] Closing socket
[x] Nothing consumed (0), exit
^@^@
[!] 2015-03-05 19:20:01.161330
[x] Finding device and service port
[x] Attempting connection: (30:14:10:14:11:85) on (1)
[x] Blocking on recv
[x] Closing socket
[x] Nothing consumed (0), exit
^@
[!] 2015-03-05 19:22:01.499951
[x] Finding device and service port
[x] Attempting connection: (30:14:10:14:11:85) on (1)
[x] Blocking on recv
[x] Closing socket
[x] Nothing consumed (0), exit
^@^@
[!] 2015-03-05 19:24:01.119598
[x] Finding device and service port
[x] Attempting connection: (30:14:10:14:11:85) on (1)
Traceback (most recent call last):
  File "/Users/test.py", line 28, in <module>
    raise serr
socket.timeout: connect timed out
^@/Library/Python/2.7/site-packages/lightblue/_lightblue.py:88: UserWarning: findservices() couldn't get services for : Timed out getting services for
  warnings.warn(msg)

Una vez más, una vez que falla, nunca se recuperará.

    
pregunta mr-sk

1 respuesta

1

Suena como un fallo en el firmware del módulo HC-06. Si emite el comando "AT + VERSION", ¿qué versión ve ejecutándose en su módulo? Podría valer la pena ponerse en contacto con el proveedor con la versión que tiene y lo que está viendo. Es posible que estén al tanto del problema y podrían indicarle cómo actualizar el firmware de su módulo o enviarle uno nuevo.

Buena suerte, parece poco probable que estés haciendo algo mal.

Mientras tanto, y esto es un truco, pero podría alimentar el módulo a través de un transistor o FET que el Arduino podría controlar desde uno de sus pines. Cada 10 minutos (o el tiempo que creas que será hasta que ocurra una falla), se activan y desactivan los pines para encender y apagar el adaptador HC-06. : / No excelente, pero al menos podría evitar que falle y nunca se recupere.

    
respondido por el nemik

Lea otras preguntas en las etiquetas