---
# System prepended metadata

title: '<center> Experiencia Nº2: BLE </center>'

---

![](https://i.imgur.com/Fmg2qRn.jpg)

# <center> Experiencia Nº2: BLE </center>

<center>
<SIGLA> - <Nombre Asignatura> <br>
<Semestre> <br>
<Fecha>
</center>

## Introducción

<div style="text-align: justify">
<p>
    BLE (Bluetooth Low Energy | Bluetooth de baja energía) es una tecnología inalámbrica diseñada en 2011 con el fin de utilizarse como medio de comunicación de corto alcance. En la actualidad existen múltiples tipos de dispositivos que utilizan esta tecnología como principal medio de envío y recepción de datos. Su frecuencia de funcionamiento se sitúa en la banda de 2.4 [GHz] al igual que las redes WiFi y la versión de Bluetooth Clásica.

Dentro del contexto IoT, la extracción, transformación y propagación de datos generados demandan requisitos específicos y cada vez más exigentes, por lo cual saber diferenciar entre distintos protocolos y tecnologías de comunicación es de suma importancia en un sistema con recursos limitados.

¿Qué cualidades posee BLE como tecnología inalámbrica útil en el contexto IoT?
</p>
</div>
    
## Objetivos
    
### 1. Objetivo Principal:

> Comprender la importancia de BLE como tecnología IoT a través de procedimientos empíricos pre-diseñados.
    
### 2. Objetivos Secundarios:
    
> Introducir los conceptos básicos de IoT utilizando la placa de desarrollo Arduino nano 33 BLE Sense como sensor de bajo consumo.
    
> Programar, compilar y configurar placas de desarrollo vía Arduino IDE.

> Interactuar con sensores inalámbricos de temperatura, humedad, gestos, color, proximidad y presión atmosférica.

> Utilizar Sniffers BLE en Smartphones.

## Materiales
    
* 1 Placa Arduino nano 33 BLE Sense
* 1 cable USB A - Micro USB
* Notebook con puerto USB A


## Plataformas
    
* Arduino IDE [https://www.arduino.cc/en/software]
* App Móvil nRF Connect
    - iOS: [https://apps.apple.com/cl/app/nrf-connect-for-mobile/id1054362403]
    - Android: [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=es_CL&gl=US]
* App Móvil PhyPhox
    - iOS: [https://apps.apple.com/us/app/phyphox/id1127319693]
    - Android: [https://play.google.com/store/apps/details?id=de.rwth_aachen.phyphox&hl=es_CL&gl=US]

## Marco Teórico
    
1. **Distribución Sensores Arduino nano 33 BLE Sense**
<center>
    
![](https://i.imgur.com/84RNMp7.png)

</center>

<center>
<p>
    
<font size="2px"> Fuente: https://store-usa.arduino.cc/products/arduino-nano-33-ble-sense-with-headers
</font>
</p>
    
</center>
    
2. **Arquitectura de funcionamiento en BLE**

<center>
    
![](https://i.imgur.com/VdnGHJp.png)

</center>

<center> 
<p>

<font size="2px"> Fuente: https://www.arduino.cc/reference/en/libraries/arduinoble/ [Modificada] 
</font>
</p>

</center>
 

## Procedimiento empírico

**1. Configurar placa de desarrollo en Arduino IDE**
    
> - [ ] **Abrir software Arduino IDE**
    
> - [ ] **Conectar la placa Arduino nano 33 BLE Sense al ordenador**
    
> - [ ] **Dentro del software ir a “Herramientas/Placa/Gestor de Tarjetas”**
    
> - [ ] **En la nueva ventana emergente buscar “nano 33 ble sense”***
    
> - [ ] **Instalar la última versión de “Arduino Mbed OS Nano Boards” (Sólo si no esta previamente instalada)**
    
> - [ ] **Cerrar la ventana y comprobar que en la ruta [Herramientas/Placa/Arduino Mbed OS Nano Boards] se encuentre seleccionada la placa “Arduino Nano 33 BLE”**
    
> - [ ] **Si sigue la ruta “Herramientas/Obtener información de la placa” debe ver una ventana emergente parecida a la imágen inferior**

<center>
    
![](https://i.imgur.com/gPhGvRe.png =266x167)

</center>

<div style="margin-bottom: 22px; padding-left: 5px; border: solid 1px; background: lightgreen;">
    Entregue una captura de pantalla con la información de su placa.
</div>

    
**2. Primeros pasos: LED BLE**

<p style="text-align: justify">
LED es un script de prueba en Arduino IDE diseñado como ejemplo inicial BLE (“Hello World!”). Su principal función es poder apagar/encender un LED incorporado en la placa de desarrollo y poder controlar su funcionamiento remotamente.
</p>

> - [ ] **Para crear un dispositivo periférico (Peripheral Device) utilizando la placa de desarrollo nano 33 BLE sense instale la librería “ArduinoBLE” en la ruta “Herramientas/Administrar Bibliotecas”**

> - [ ] **En la ruta “Archivo/Ejemplos/ArduinoBLE/Peripheral” Abra el ejemplo “LED”, se abrirá una ventana con el código fuente.**
    
> - [ ] **Para evitar interferencias, reemplace los identificadores de las siguientes líneas de código por su Rol USM o Rut (Sin dígito verificador):** 

<div style="margin-bottom: 22px; padding-left: 5px; border: solid 1px; text-align:center">
    BLEService ledService("19B10000-E8F2-537E-4F6C-ROL_USM");
</div>
    
<div style="margin-bottom: 22px; padding-left: 5px; border: solid 1px; text-align:center">
    BLE.setLocalName("ROL_USM");
</div>

> - [ ] **Guarde el script como una copia (Archivo/Guardar Como)**

> - [ ] **Cargue el script en la placa de desarrollo presionando el ícono “⇨” de la esquina superior izquierda.**

> - [ ] **Abra el monitor serie presionando la lupa   de la esquina superior derecha.**
    
> - [ ] **Abra la aplicación nRF Connect en su Smartphone.**

> - [ ] **En la sección Scanner busque el servicio con el mismo nombre configurado en los pasos anteriores (Asegúrese de que su dispositivo esté escaneando frames)**

> - [ ] **Presione el botón “Connect” en el servicio.**
    
> - [ ] **En la nueva ventana ir a la opción “Client”**

> - [ ] **En la tabla de atributos debe haber una característica con UUID que termine con “A1214”**
    
> - [ ] **Presionar la flecha hacia arriba de esta característica.**
    
> - [ ] **Poniendo atención en la placa arduino, enviar un 1 como tipo “UnsignedInt” (unit 8) desde la App.**

**2.1 ¿Qué pasa en la placa arduino justo después que se envía el valor 1 desde la APP?**

<div style="background: Moccasin; border: solid 1px; padding: 25px; margin-bottom: 20px">

</div>


> - [ ] **Ahora Intente enviar un cero como tipo “UnsignedInt” (unit 8).**

**2.2 ¿Qué pasa en la placa arduino justo después que se envía el valor cero desde la APP?**

<div style="background: Moccasin; border: solid 1px; padding: 25px; margin-bottom: 20px">

</div>
    
**2.3 ¿Cuál es el mayor valor de tipo UnsignedInt (unit 8) que puede enviar desde la App?**

<div style="background: Moccasin; border: solid 1px; padding: 25px; margin-bottom: 20px">

</div>
    
> - [ ] **Enviando ceros y unos intercalados desde la App observe el delay que existe desde que envía un frame hasta que reacciona la placa arduino, responda las siguientes preguntas:**


**2.4 Estime visualmente, ¿Cuál es el delay existente entre la placa arduino y su smartphone aproximadamente?**

**a) 1 segundo
b) 2 segundos
c) más de 2 segundos
d) Casi instantáneamente (milisegundos)**

**2.5 Si realiza la misma prueba alejando su smartphone de la placa, ¿Cuál es el delay existente entre la placa arduino y su smartphone aproximadamente?**

**a) 1 segundo
b) 2 segundos
c) más de 2 segundos
d) Casi instantáneamente (milisegundos)**

**2.6**
<div style="margin-top: 10px; margin-bottom: 22px; padding: 10px; border: solid 1px; background: lightgreen;">
     Modifique el script de LED para que cuando se envíe un valor 33 como tipo UnsignedInt (unit 8) desde la App, la placa arduino comience a parpadear un led a intervalos de un segundo.
</div>

**3. Capturando datos: Arduino como dispositivo central (Central device)**
    
<p style="text-align: justify">Además de conocer las características de BLE en dispositivos periféricos, es necesario experimentar la forma en que se puede obtener los datos de estos dispositivos utilizando BLE. Para lo anterior, es necesario configurar un Central device en modo escucha bajo las condiciones de esta tecnología.</p>

> - [ ] **Abra la aplicación nRF Connect en su Smartphone.**
    
> - [ ] **En la sección Peripheral (Advertisement) cree un nuevo advertiser presionando el botón “add advertiser” (plus button)**

> - [ ] **En nombre escriba su Rol USM o Rut (Sin dígito verificador) y agregue un nuevo servicio presionando el botón “add service”**
    
> - [ ] **Seleccione “Device Information” y guarde los cambios. Asegúrese que el advertiser esté activo y sin posibilidad de editar.**
    
> - [ ] **En Arduino IDE, vaya a la ruta “Archivo/Ejemplos/ArduinoBLE/Central” Abra el ejemplo “PeripheralExplorer”, se abrirá una ventana con el código fuente.**

> - [ ] **Modifique el nombre del periférico a buscar por su Rol USM o Rut (Sin dígito verificador), el mismo que configuró en la creación del advertiser, como se muestra en el siguiente ejemplo:**

<div style="margin-bottom: 22px; padding-left: 5px; border: solid 1px; text-align:center">
    if (peripheral.localName() == "Rol_USM") {
</div>
    
> - [ ] **Guarde el script como una copia (Archivo/Guardar Como)**
    
> - [ ] **Cargue el script en la placa de desarrollo presionando el ícono “⇨” de la esquina superior izquierda.**

> - [ ] **Abra el monitor serie presionando la lupa   de la esquina superior derecha.**
    
**3.1 ¿Qué pasa en el monitor serial?, ¿Tiene sentido lo obtenido? Explique**
    
<div style="background: Moccasin; border: solid 1px; padding: 25px; margin-bottom: 20px">

</div>
    
**3.2 ¿Cuál es el UUID del servicio escaneado?**
    
<div style="background: Moccasin; border: solid 1px; padding: 25px; margin-bottom: 20px">

</div>

**3.3**
<div style="margin-top: 10px; margin-bottom: 22px; padding: 10px; border: solid 1px; background: lightgreen;">
     Entregue el output generado en el monitor serial
</div>
    
**4. Detectando Frames: Arduino como Sniffer**

<p style="text-align: justify">Conocer la forma en que una arquitectura de red define los protocolos encargados de detectar e interactuar con los dispositivos heterogéneos del entorno permite poder comprender de mejor manera los desafíos de un sistema IoT. ¿Cómo un dispositivo periférico informa su presencia en los dispositivos centrales?, ¿Que se necesita para poder extraer datos de un dispositivo periférico determinado?, ¿Existe interferencia?, practiquemos.</p>

> - [ ] **Para crear un Sniffer BLE Arduino IDE, vaya a la ruta “Archivo/Ejemplos/ArduinoBLE/Central” Abra el ejemplo “Scan”, se abrirá una ventana con el código fuente.**
    
> - [ ] **Cargue el script en la placa de desarrollo presionando el ícono “⇨” de la esquina superior izquierda.**

> - [ ] **Abra el monitor serie presionando la lupa   de la esquina superior derecha, desactive el Autoscroll si desea observar los atributos con detención.**
    
**4.1 Responda, ¿Cuál de estos atributos se observan al escanear un dispositivo periférico?**

**a) UUID
b) Nombre & dBm
c) Address & RSSI
d) Nombre del fabricante**
    
**4.2 Responda según su intuición, ¿Qué significan el/los atributo(s) observado(s)?**
    
<div style="background: Moccasin; border: solid 1px; padding: 25px; margin-bottom: 20px">

</div>

**4.3**
    
<div style="margin-top: 10px; margin-bottom: 22px; padding: 10px; border: solid 1px; background: lightgreen;">
     Modifique el script “Scan” para sólo capture frames de dos dispositivos periféricos de su preferencia.
</div>
    
**5. Tasa de transferencia en BLE: Phyphox**

<p style="text-align: justify">
    Phyphox es una Aplicación móvil para generar experimentos sobre BLE. En este apartado se utilizará esta App para intentar obtener la tasa de transferencia media de envío de registros por segundo, es decir, la cantidad de mensajes (registros) que se pueden enviar en un segundo.
</p>

> - [ ] **Descargue y descomprima el archivo “nano_pyphox_v1” desde la web oficial:**
    > [https://hebergement.universite-paris-saclay.fr/phyphox/nano_phyphox_v1.zip](https://hebergement.universite-paris-saclay.fr/phyphox/nano_phyphox_v1.zip)
    
> - [ ] **Abra este archivo en Arduino IDE y reemplace el nombre por su Rol_USM (para evitar interferencias)**

<div style="margin-bottom: 22px; padding-left: 5px; border: solid 1px; text-align:center">
    char board_name[] = "Rol_USM";
</div>

> - [ ] **Cargue el script en la placa de desarrollo presionando el ícono “⇨” de la esquina superior izquierda.**
    
> - [ ] **En su smartphone, abrir la aplicación Phyphox.**
    
> - [ ] **Agregue un nuevo set de experimentos presionando el botón plus (+).**
    
> - [ ] **Seleccione añadir experimento desde un código QR.**

<center>
    
![](https://i.imgur.com/Gp02y8Y.png =130x)    
    
</center>
    
> - [ ] **Agregue todos los experimentos y luego seleccione en la sección “Arduino Nano 33 BLE Sense” el experimento “Temperature and Humidity”.**
    
> - [ ] **Seleccione el dispositivo BLE que posee su Rol_USM.**
    
> - [ ] **Configure la prueba como ejecución cronometrada de duración 10 segundos.**
    
> - [ ] **Presione el botón “Play” y observe.**
    
> - [ ] **En opciones del experimento puede exportar los resultados del procedimiento.**

**5.1 Basándose en los datos obtenidos del experimento en Phyphox, ¿Cuántos registros por segundo se pueden enviar vía BLE aproximadamente?**
    
<div style="background: Moccasin; border: solid 1px; padding: 25px; margin-bottom: 20px">

</div>