Post a new topicPost a reply Page 1 of 1   [ 6 posts ]
Author Message
 Post subject: Nombre de la red BT4.0 escaneada
PostPosted: Fri Jun 16, 2017 12:07 pm 

Joined: Fri Jun 16, 2017 11:43 am
Posts: 6
Buenas tardes,

Para cada sensor BLE nos gustaría poder conectarnos a él a través de su nombre (y no de su MAC) previo escaneo de las redes cercanas.

Para ello estoy mirando la librería MySignals_BLE y no consigo obtener la cadena de caracteres con los nombres (friendlyName???)

"Device %u; %02x%02x%02x%02x%02x%02x; RSSI:%d; Name:"

En esta tabla BLE lo que se obtiene es una serie de hexadecimales que al convertir a str (función hex2str) tampoco logro verle el sentido.

Alguna pista para no tener que poner en el propio script la MAC de cada sensor? Es posible obtener el nombre de la red en char* de manera que lo podamos entender? De momento no lo consigo.

Muchísimas gracias!
Sara.


Top
 Profile  
 
 Post subject: Re: Nombre de la red BT4.0 escaneada
PostPosted: Mon Jun 19, 2017 6:35 am 

Joined: Mon Sep 28, 2009 11:06 am
Posts: 10492
Hola SaraLacoste,

con el modulo BLE que usa MySignals no existe una instrucción para conectarte a un dispositivo sin conocer la MAC, y ademas es el único dato necesario.

Se podría hacer un escaneo en el que se descubra la MAC y el friendlyName de un dispositivo, guardándolos ambos y haciendo una selección por su nombre pero siempre necesitarás la MAC para conectarte a el. Para ello disponemos de la función "uint8_t BLEClass::scanNetworkName(uint8_t time)"

Puedes crearte tu propio dato del tipo "discoveredDevice" que responde al siguiente struct, definido en el .h de la libreria:

Code:
// Struct to save a BLE device and its related data.
struct discoveredDevice
{
   uint8_t mac[6];
   int8_t rssi;
   uint8_t friendlyName[31];
   uint8_t advData[33];
};


Un saludo


Top
 Profile  
 
 Post subject: Re: Nombre de la red BT4.0 escaneada
PostPosted: Mon Jun 19, 2017 8:43 am 

Joined: Fri Jun 16, 2017 11:43 am
Posts: 6
Sí, al escanear y obtener el nombre de la red mi intención era obtener la MAC asociada y conectar a ella (no me expliqué bien).

Indagando más he obtenido el nombre de red del SPO2: en el struct discoveredDevice se obtiene el friendlyName, y mediante su HEX se decodifica cada carácter, y ahí está el nombre de red: "Libelium".

Pero para el caso del tensiómetro, sólo se obtienen caracteres indefinidos tipo lo siguiente:

¼4³`ÿÿL þ°½G_DCäé;¨þ

Intentando bajar un nivel de procesado y decodificar el evento tampoco encuentro el rastro de su nombre de red (que en móvil sí que se detecta, y es BP01).

Alguna pista? Muchas gracias por su atención :)

Un saludo,
Sara.


Top
 Profile  
 
 Post subject: Re: Nombre de la red BT4.0 escaneada
PostPosted: Mon Jun 19, 2017 12:58 pm 

Joined: Mon Sep 28, 2009 11:06 am
Posts: 10492
Hola SaraLacoste,

esto se debe a que este sensor solo muestra su nombre de la forma corta. El protocolo bluetooth low energy es interpretado de manera diferente segun el fabricante y en este caso para obtener el nombre se debe atender a evento de tipo 0 en vez de eventos de tipo 4, esto se puede ver en la funcion "scanNetworkName".

Deberás añadir algo de este estilo:

Code:
unsigned long previous = millis();
   while(millis() - previous < scanTime)
   {
      
      if (waitEvent(1000) == BLE_EVENT_GAP_SCAN_RESPONSE)
      {
         // parse only packet type = 4 to pair each name with each device. needs active scanning.
         // Fix if device loosing is detected.
         if (event[5] == 4 || event[5] == 0 )
         {
            
            parseScanEvent(1);
         }

      }
   
      // Condition to avoid an overflow (DO NOT REMOVE)
      if( millis() < previous ) previous=millis();
   }


No hemos trabajado mas profundamente en esto. Mantennos informados si haces algún avance acerca de esto.

Un saludo


Top
 Profile  
 
 Post subject: Re: Nombre de la red BT4.0 escaneada
PostPosted: Tue Jun 20, 2017 3:03 pm 

Joined: Fri Jun 16, 2017 11:43 am
Posts: 6
Perfecto, me ha funcionado incluir el evento de tipo 0 en la función de scanNetworkName :)

He incluido en dicha función la opción de incluir el nombre de red (en formato uint8_t*) y sólo cuando es diferente de 0 comenzar con la comparativa: cuando detecta un friendlyName idéntico (comparando con strcmp los hex2str asociados), actualizar una variable global MAC previamente declarada con el valor del struct BLEDev y parar la ejecución del escaneo.

En ese momento es cuando dentro del loop llamo a otra función que devuelve la MAC actualizada y continúo con el flujo normal de los scripts del SPO2 y BP.

Muchas gracias por todo!

Un saludo,
Sara.


Top
 Profile  
 
 Post subject: Re: Nombre de la red BT4.0 escaneada
PostPosted: Thu Jun 22, 2017 6:38 am 

Joined: Mon Sep 28, 2009 11:06 am
Posts: 10492
Hola SaraLacoste,

nos alegramos de que hayas resuelto tu problema.

Un saludo.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post a new topicPost a reply Page 1 of 1   [ 6 posts ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Libelium theme based on 610nm Style by Daniel St. Jules of http://www.gamexe.net


© Libelium Comunicaciones Distribuidas S.L. | Terms of use.