Editing Bombilla LED de colores con Bluetooth Low Energy
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 46: | Line 46: | ||
* He utilizado el IDE de eclipse compilando para el API19 de Android (4.4.2) que es el disponible en Nexus 7 | * He utilizado el IDE de eclipse compilando para el API19 de Android (4.4.2) que es el disponible en Nexus 7 | ||
− | * Recomiendo la documentación creada por Yeelight y compartida desde su web [http://www.yeelight.com/en_US/info/download]. En el API de Android hay código fuente aunque por desgracia todavía no hay una app de ejemplo. | + | * Recomiendo la documentación creada por Yeelight y compartida desde su web [http://www.yeelight.com/en_US/info/download]. En el API de Android hay código fuente aunque por desgracia todavía no hay una app de ejemplo. |
− | * Para aprender como funciona Bluetooth Low Energy en Android, el mejor tutorial y código que he encontrado es el de | + | * Para aprender como funciona Bluetooth Low Energy en Android, el mejor tutorial y código que he encontrado es el de Deve Smith [http://www.doubleencore.com/2013/12/bluetooth-smart-for-android/] con código fuente en [https://github.com/devunwired/accessory-samples/tree/master/BluetoothGatt] |
− | * Bluetooth Low energy (BLE) implementa el concepto de cliente y servidor. En el caso de la bombilla Yeelight, la bombilla es un servidor que ofrece sus | + | * Bluetooth Low energy (BLE) implementa el concepto de cliente y servidor. En el caso de la bombilla Yeelight, la bombilla es un servidor que ofrece sus serviciso (control del color e intensidad de la bombilla) y el dispositivo android (Nexus 7) es el cliente que hace peticiones a este servicio (encender el color naranja con intensidad 50%). |
− | * | + | * Simplificacndo mucho, un servicio BLE se compone de una serie de características. Las características no son más que un conjunto de bytes que se pueden escribir o leer según unas propiedades que se especifican en el servicio (hay que autenticarse antes de leer, los datos se encriptarán,...). Las características también implementa el concepto de notificación. Cuando una caracterítica cambia de valor, infromará a todos los clientes que se hayan registrado a sus notificaciones (no hace falta hacer polling desde el cliente, será el servidor quién haga un push cuando haga falta). |
* El flujo de una aplicación BLE en Android es es siguiente. | * El flujo de una aplicación BLE en Android es es siguiente. | ||
# Obtener el adaptador Bluetooth de Android para poder acceder a la funcionalidad BLE | # Obtener el adaptador Bluetooth de Android para poder acceder a la funcionalidad BLE | ||
− | # Escanear/Buscar dispositivos BLE (servidores) disponibles en el entorno | + | # Escanear/Buscar dispositivos BLE (servidores) disponibles en el entorno (este escaneo tiene que ser limitado en el tiempo). Tras unos segundos, para el escaneo. Este proceso genera eventos <code>onLeScan()</code> para cada dispositivo detectado. |
− | # Para descubrir los servicios que ofrece un dispositivo hay que utilizar el | + | # Para descubrir los servicios que ofrece un dispositivo hay que utilizar el servicio GATT de BLE(''The GATT profile is a general specification for sending and receiving short pieces of data known as "attributes" over a BLE link. All current Low Energy application profiles are based on GATT.'')La mayoría de funciones de GATT funcionan en modo asíncrono, esto es, se hace una petición (por ejemplo, para leer el valor de una característica se utiliza: <code>mGatt.readCharacteristic(characteristic);</code>) y la respuesta se recibe a posteriori en otra función a través de un mecanismo de ''callback'' definido en el API BLE de Android (en el caso anterior, <code>onCharacteristicRead</code> |
− | + | Se utilizan los siguientes comandos de GATT: | |
− | # <code>connect()</code> para conectarse al dispositivo | + | ## <code>connect()</code> para conectarse al dispositivo. Genera el callback <code>onConnectionStateChange()</code> |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ## | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |