Proyecto Bluelight

145
2009 BLUELIGHT SISTEMA PARA EL CONTROL DE LA INTENSIDAD DE LUZ DE LÁMPARAS INCANDESCENTES POR MEDIO DE BLUETOOTH LEANDRO FLÓREZ ARISTIZÁBAL

Transcript of Proyecto Bluelight

Page 1: Proyecto Bluelight

2009

BLUELIGHT SISTEMA PARA EL CONTROL DE LA INTENSIDAD

DE LUZ DE LÁMPARAS INCANDESCENTES POR

MEDIO DE BLUETOOTH

LEANDRO FLÓREZ ARISTIZÁBAL

Page 2: Proyecto Bluelight

2

BLUELIGHT

SISTEMA PARA EL CONTROL DE LA INTENSIDAD DE LUZ DE LÁMPARAS

INCANDESCENTES POR MEDIO DE BLUETOOTH

LEANDRO FLÓREZ ARISTIZÁBAL

COD. 1071118

INSTITUCIÓN UNIVERSITARIA ANTONIO JOSÉ CAMACHO

FACULTAD DE INGENIERÍAS

TECNOLOGÍA EN SISTEMAS

SANTIAGO DE CALI, JULIO DE 2009

Page 3: Proyecto Bluelight

3

BLUELIGHT

SISTEMA PARA EL CONTROL DE LA INTENSIDAD DE LUZ DE LÁMPARAS

INCANDESCENTES POR MEDIO DE BLUETOOTH

LEANDRO FLÓREZ ARISTIZÁBAL

COD. 1071118

DIRECTOR

ALEXIS ALBERTO RAMÍREZ OROZCO

Ms@. En ingeniería con énfasis en Electrónica

Proyecto de grado presentado para

optar al título de tecnólogo en

sistemas

INSTITUCIÓN UNIVERSITARIA ANTONIO JOSÉ CAMACHO

FACULTAD DE INGENIERÍAS

TECNOLOGÍA EN SISTEMAS

SANTIAGO DE CALI, JULIO DE 2009

Page 4: Proyecto Bluelight

4

Nota de aceptación

_____________________________________

_____________________________________________

_____________________________________________

_____________________________________________

_____________________________________________

______________________________

Firma del director

______________________________

Firma del jurado

______________________________

Firma del jurado

Santiago de Cali, 28 de Julio de 2009

Page 5: Proyecto Bluelight

5

AGRADECIMIENTOS

A mis padres, quienes con su apoyo y amor han hecho de mí, una persona con

valores, determinada y exitosa. Deseo agradecer en especial a mi madre, quien

con sus consejos, me ha ayudado a tomar las mejores decisiones en mi vida.

A Dios, por las oportunidades que me ha brindado de salir adelante, por hacerme

parte de una familia maravillosa y permitirme conocer personas grandiosas en

esta aventura llamada VIDA, personas como Alexis Ramírez, quien no solo es mi

director de proyecto, sino también mi amigo.

Page 6: Proyecto Bluelight

6

CONTENIDO

INTRODUCCIÓN ...................................................................................................................... 12

1. DOMÓTICA...................................................................................................................... 14

1.1 Domótica con control independiente ................................................................................ 15

1.2 Domótica con control centralizado ................................................................................... 15

1.3 Domótica con control distribuido en red ........................................................................... 15

2. TECNOLOGÍA BLUETOOTH................................................................................................ 17

2.1 Forma de operación......................................................................................................... 18

2.2 Seguridad........................................................................................................................ 19

2.2.1 BlueJacking. ......................................................................................................... 20

2.2.2 BlueSnarfing. ........................................................................................................ 21

2.2.3 BlueBugging. ........................................................................................................ 21

2.2.4 BlueTiming o Toothing. ......................................................................................... 22

2.3 PILA DE PROTOCOLOS BLUETOOTH................................................................................... 22

2.3.1 Radio. .................................................................................................................. 25

2.3.2 Banda Base. ......................................................................................................... 25

2.3.3 Link Manager Protocol (LMP) o Protocolo de Gestión de Enlace. ............................. 28

2.3.4 Host Controller Interface (HCI) o Interfaz del Controlador de Enlace. ....................... 28

2.3.5 Logical Link Control and Adaptation Protocol (L2CAP). ............................................ 28

2.3.6 Sevice Discovery Protocol (SDP) o Protocolo de Descubrimiento de Servicio. ........... 29

2.3.7 Protocolo RFCOMM (Radio Frequency Communication).......................................... 30

2.4 PERFILES BLUETOOTH ...................................................................................................... 32

2.4.1 Perfil Genérico de Acceso (GAP). ........................................................................... 34

2.4.2 Perfil de Puerto Serial (SPP). .................................................................................. 34

Page 7: Proyecto Bluelight

7

2.4.3 Perfil Genérico de Intercambio de Objetos (GOEP). ................................................ 34

2.4.4 Perfil de Aplicación de Descubrimiento de Servicio (SDAP). ..................................... 34

2.5 PROCESO DE CONEXIÓN................................................................................................... 35

2.5.1 Proceso de Búsqueda............................................................................................ 35

2.5.2 Búsqueda de servicios. .......................................................................................... 35

2.6 CARACTERÍSTICAS ............................................................................................................ 40

2.6.1 Composición de las especificaciones. ..................................................................... 40

2.6.2 Espectro............................................................................................................... 41

2.6.3 Interferencias. ...................................................................................................... 41

2.6.4 Alcance. ............................................................................................................... 41

2.6.5 Potencia............................................................................................................... 42

3. TELÉFONO CELULAR......................................................................................................... 43

3.1 CÓMO FUNCIONAN LOS TELÉFONOS CELULARES ............................................................... 43

3.2 DIFERENCIAS ENTRE LOS TELÉFONOS CELULARES Y LOS RADIOS DE BANDA CIVIL ................ 45

3.2.1 Simplex Vs. Dúplex................................................................................................ 46

3.2.2 Canales. ............................................................................................................... 46

3.2.3 Rango. ................................................................................................................. 46

3.3 SOFTWARE PARA DISPOSITIVOS MÓVILES ......................................................................... 47

4. JAVA ............................................................................................................................... 48

4.1 J2ME............................................................................................................................... 51

4.1.1 Configuraciones.................................................................................................... 53

4.1.2 Perfiles................................................................................................................. 54

4.1.3 Paquetes opcionales. ............................................................................................ 54

4.1.4 APIs Java para Bluetooth (JSR-82 / JABWT). ............................................................ 55

Page 8: Proyecto Bluelight

8

5. MICROCONTROLADORES ................................................................................................. 63

5.1 Recursos comunes a todos los microcontroladores. ........................................................... 64

5.1.1 Arquitectura básica............................................................................................... 64

6. DISEÑO E IMPLEMENTACIÒN............................................................................................ 67

6.1 METODOLOGÍA DE DESARROLLO ...................................................................................... 67

6.2 SOFTWARE BLUELIGHT..................................................................................................... 68

6.3 HARDWARE ..................................................................................................................... 90

6.3.1 PIC16F876A.......................................................................................................... 91

6.3.2 Módulo Bluetooth BlueSMIRF Silver V2. ................................................................. 92

6.3.3 Detector de Cruce x cero. ...................................................................................... 93

6.3.4 Etapa de potencia. ................................................................................................ 94

6.3.5 Descripción del software del microcontrolador. ..................................................... 94

6.4 PRUEBAS Y AJUSTES....................................................................................................... 105

RESULTADOS FINALES ........................................................................................................... 107

CONCLUSIONES .................................................................................................................... 108

BIBLIOGRAFÍA ....................................................................................................................... 110

Page 9: Proyecto Bluelight

9

LISTA DE FIGURAS

Figura 1. Casa Domótica .......................................................................................................... 14

Figura 2. Logo Bluetooth ......................................................................................................... 17

Figura 2.1 Pila de protocolos Bluetooth .................................................................................... 23

Figura 2.2 Piconets y Scatternets ............................................................................................. 26

Figura 2.3 Perfiles Bluetooth.................................................................................................... 33

Figura 2.4 Establecimiento de una conexión ............................................................................. 36

Figura 2.5 Service Discovery DataBase...................................................................................... 37

Figura 3. Red de Celdas de telefonía Celular ............................................................................. 44

Figura 4. Celular vs. Radio........................................................................................................ 46

Figura 5. Arquitectura de la plataforma Java 2 de SUN .............................................................. 50

Figura 6. Relación entre las APIs de la plataforma Java .............................................................. 52

Figura 6.1 Relación entre CDC y CLDC....................................................................................... 54

Figura 7. Caso de uso específico de una aplicación Bluetooth .................................................... 61

Figura 8. Elementos que componen típicamente un MIDlet Bluetooth. ...................................... 62

Figura 9. Microcontrolador ...................................................................................................... 64

Figura 9.1 Arquitectura HARVARD ............................................................................................ 65

Figura 10. Diagrama de bloques del sistema BLUELIGHT............................................................ 67

Figura 10.1 Diagrama de bloques del software Bluelight V2.0 .................................................... 68

Figura 10.1.1 Clase BTMidlet ................................................................................................... 69

Figura 10.1.2 Clase HiloConexion ............................................................................................. 70

Figura 10.1.3 Clase Registro ..................................................................................................... 71

Figura 10.1.4 Clase LocalDevice ............................................................................................... 72

Figura 10.1.5 Clase DiscoveryAgent e interfaz DiscoveryListener................................................ 76

Page 10: Proyecto Bluelight

10

Figura 10.1.6 Clase RemoteDevice ........................................................................................... 77

Figura 10.1.7 Diagrama de clases del software Bluelight............................................................ 79

Figura 10.1.8 Pantalla de bienvenida ........................................................................................ 79

Figura 10.1.9 Formulario de ingreso ......................................................................................... 80

Figura 10.1.10 Alerta de Error por nombre de usuario y/o contraseña no válidos ....................... 81

Figura 10.1.11 Pantalla de búsqueda de dispositivos ................................................................. 82

Figura 10.1.12 Alerta de Error si no se encuentran dispositivos.................................................. 82

Figura 10.1.13 Lista de Dispositivos encontrados ...................................................................... 83

Figura 10.1.14 Pantalla de búsqueda de servicios...................................................................... 84

Figura 10.1.15 Pantalla de servicio encontrado ......................................................................... 84

Figura 10.1.16 Pantalla de confirmación para establecer conexión cliente.................................. 85

Figura 10.1.17 Mensaje de espera mientras se establece la conexión......................................... 85

Figura 10.1.18 Pantalla de error en la conexión con BLUELIGHT ................................................. 86

Figura 10.1.19 Pantalla de selección de luces............................................................................ 87

Figura 10.1.20 Pantalla de control de luces............................................................................... 88

Figura 10.1.21 Pantalla de petición para guardar el estado actual de las luces ............................ 89

Figura 10.1.22 Créditos del software Bluelight .......................................................................... 89

Figura 10.2 Diagrama de bloques del hardware Bluelight .......................................................... 90

Figura 10.2.1 Hardware Bluelight ............................................................................................. 90

Figura 10.2.2 PIC16F876A ........................................................................................................ 91

Figura 10.2.3 Módulo BlueSMIRF Silver V2 ............................................................................... 92

Figura 10.2.4 Señal de cruce por cero a la entrada del microcontrolador .................................... 94

Figura 10.2.5 División de tiempos de la señal de línea ............................................................. 103

Figura 10.2.6 Control de una luz a una intensidad de 7. ........................................................... 104

Page 11: Proyecto Bluelight

11

LISTA DE TABLAS

Tabla 1. Identificadores de servicios más comunes y su tipo ...................................................... 38

Tabla 2. UUIDs más comunes .................................................................................................. 39

Tabla 3. Protocolos de comunicación Bluetooth ....................................................................... 60

Page 12: Proyecto Bluelight

12

INTRODUCCIÓN

La tecnología parece no tener límites, pues día a día surgen cada vez nuevos y

mejores dispositivos que permiten crear lo que hasta hace poco parecía imposible.

Al parecer, si algo puede ser imaginado por el hombre, entonces puede ser creado

y cuando de automatización de hogares se habla, la imaginación parece no tener

fin, ya que una necesidad que tienen casi todos los seres humanos es llevar una

vida segura y confortable, empezando en ese lugar al que todos llaman hogar.

¿Quién no se ha imaginado viviendo en un ambiente donde se pueda emplear el

tiempo en realizar ciertas tareas mientras otras se ejecutan por sí mismas? Un

lugar donde se pueda tener el control de todo alrededor sin moverse del lugar

donde se encuentre o dejar de hacer otras actividades. Aunque es común que

cualquier persona sueñe con este tipo de escenarios, estos sueños por lo general

se ven frustrados al darse cuenta que esta tecnología está disponible para unos

pocos que cuentan con los ingresos suficientes para adquirirla. Afortunadamente,

los dispositivos con los que se puede implementar esta tecnología cada vez son

más económicos y fáciles de usar, el problema es que muchos los desconocen y

si ya los poseen aún no se han dado cuenta de su existencia o simplemente no

saben aprovecharlos.

La tecnología más apetecida por los usuarios del hogar es sin duda el control de

las diferentes tareas del hogar sin desplazarse de un lugar a otro. Los elementos

que permiten este tipo de automatización son también conocidos como

dispositivos de control remoto.

Los dispositivos de control remoto, no solo están diseñados para controlar tareas

del hogar, también se pueden usar en la industria, donde se requiere una acción

de control sobre cargas de alto riesgo, sustancias tóxicas o explosivas, las cuales

pueden poner en riesgo la vida de un ser humano.

Page 13: Proyecto Bluelight

13

Se obtiene mayor rapidez de respuesta en el momento de tomar acciones sobre

los equipos a controlar, lo que se traduce en mayor eficiencia.

Una de las razones por las que este tipo de dispositivos es tan popular en

viviendas es el confort que genera, ya que se reduce el esfuerzo físico al hacer

uso de elementos de control remoto.

Basándose en esta característica esencial de la domótica, el sistema BLUELIGHT

permitirá ejercer control sobre la intensidad de las luces de un hogar haciendo uso

del Bluetooth de un teléfono celular, lo que se traduce en reducción de costos al

hacer uso de una tecnología que se posee, pero que no se aprovecha al máximo y

que además no genera ningún costo adicional por hacer uso de ella.

La investigación que se empleó en la realización del proyecto fue de tipo aplicativa

(de campo) ya que no solo se hizo el diseño sino también la implementación del

sistema, incluyendo hardware y software. La recolección de la información se hizo

por medio de entrevistas no formales con el director del proyecto y algunos

asesores, también por medio de internet en la búsqueda de documentos

relacionados, foros de discusión sobre los temas tratados en el proyecto y revisión

documental de diferentes universidades.

Page 14: Proyecto Bluelight

14

1. DOMÓTICA

La domótica es el nombre que se le da a una disciplina tecnológica y todos los

sistemas aptos para la robotización doméstica, en mayor o menor medida, quedan

incluidos por definición dentro de este término, por este motivo es importante

determinar los grados de domotización cuando se utiliza la frase "casa domótica"

y para valorar con éxito una casa de este tipo es necesario definir la domótica lo

mejor y más claro posible.

Domótica se refiere a la automatización de las diferentes tareas del hogar, desde

un simple interruptor controlado a distancia, hasta un sistema completo que esté

monitoreando variables y ejerciendo control sobre diferentes dispositivos.

Figura 1. Casa Domótica

Fuente: Tomado de [http://www.microciencia.eu/etiqueta/domotica]

Es una disciplina que se aplica en la Robotización Doméstica con el fin de

aumentar la seguridad, el confort, los servicios multimedia, el uso del diseño

bioclimático y el ahorro energético. Cada uno de estos conceptos pueden contener

Page 15: Proyecto Bluelight

15

otros que nos permitan ir dividiendo la domótica con el fin de conseguir detallar el

alcance de los proyectos, por ejemplo, la seguridad en esta tecnología tiene dos

vertientes: La Seguridad por Intrusismo y La Seguridad Técnica [Flor07].

Las tecnologías domóticas aplicadas en la robotización doméstica giran en torno a

tres sistemas básicos de control y son [Rtc06]:

Control Independiente

Control Centralizado

Control Distribuido en Red

1.1 Domótica con control independiente

Se llama control independiente al sistema donde los propios dispositivos

incorporan los elementos de control y este control se realiza al margen del resto

de componentes.

1.2 Domótica con control centralizado

El control centralizado se caracteriza por el autómata programable o PLC como

elemento más común para realizar este control. Se articula en torno a un elemento

de mando central, donde todas las señales de información, tanto de entradas

como de salidas, llegan o salen del mando central.

1.3 Domótica con control distribuido en red

Es en esta tecnología donde más productos y sistemas están apareciendo. Un

control distribuido en red para domótica, es un sistema de dispositivos

independientes, unidos por un soporte físico, generalmente un cable conductor

Page 16: Proyecto Bluelight

16

llamado BUS, con el fin de controlar automáticamente otro sistema superior,

teniendo cada dispositivo de la red una o varios tareas específicas.

El Bus de Instalación Europeo EIB es un control de este tipo, otro de los sistemas

característicos de control distribuido en red es el X10, creado para facilitar la

instalación domótica en viviendas antiguas.

Page 17: Proyecto Bluelight

17

2. TECNOLOGÍA BLUETOOTH

La tecnología inalámbrica Bluetooth es un sistema de comunicaciones de corto

alcance, cuyo objetivo es eliminar los cables en las conexiones entre dispositivos

electrónicos, tanto portátiles como fijos, manteniendo altos niveles de seguridad.

Las características principales de esta tecnología son su fiabilidad, bajo consumo

y mínimo coste. La especificación Bluetooth establece una organización uniforme

para que un amplio abanico de dispositivos pueda conectarse y comunicarse entre

sí [BLUE08].

El nombre “Bluetooth” surgió en homenaje a un rey vikingo del siglo X llamado

Harald Blatand o Harald Bluetooth (en inglés). Este rey unificó partes de Noruega,

Suecia y Dinamarca tal como la tecnología Bluetooth está diseñada para permitir

la interacción entre diferentes industrias tales como la computación, telefonía móvil

y mercados automotrices.

El logo de Bluetooth mostrado en la figura 2 nació de la combinación entre las

letras H y B del alfabeto Fulthark Escandinavo ( + ) en honor a las iniciales del

rey danés y como una muestra de la importancia de los países nórdicos en la

tecnología de comunicaciones.

Figura 2. Logo Bluetooth

Fuente: Tomado de [http://www.bluetooth.com].

Page 18: Proyecto Bluelight

18

En Febrero de 1998, se fundó el Bluetooth Special Interest Group (SIG) o Grupo

de Interés Especial de Bluetooth, creado con el fin de ofrecer soporte para la

nueva tecnología. Actualmente, más de mil compañías lo integran y trabajan

conjuntamente por un estándar abierto para el concepto Bluetooth.

2.1 Forma de operación

Bluetooth es el nombre que se le da al estándar industrial IEEE 802.15.1, que

utiliza ondas electromagnéticas para comunicar equipos electrónicos que lo

soporten.

Cuando dos dispositivos desean comunicarse deben establecer una gran cantidad

de parámetros entre ellos antes de poder hacer alguna transmisión, deben acordar

cómo van a comunicarse, por medio de cables o sin ellos usando alguna forma de

ondas electromagnéticas, después deben especificar cuanta información enviarán

a la vez y que significado tendrán los bits que usarán, para garantizar que el

mensaje recibido sea fiel al original. Bluetooth provee una solución al problema y

elimina la necesidad de que el usuario intervenga en el proceso de configurar

todas estas opciones.

La transmisión es por medio de ondas electromagnéticas de muy bajo poder,

aproximadamente 1 miliwatt, un teléfono celular, en comparación, a su máxima

potencia puede transmitir señales de hasta 3 Watts. Bluetooth no necesita una

línea de visión para comunicar dos aparatos, como es el caso de una televisión y

un control remoto que utilizan luz infrarroja para comunicarse. Estas ondas de

bajo consumo de energía, limitan el alcance que puede tener a aproximadamente

10 metros, lo cual ayuda a prevenir que provoque interferencia a otros dispositivos

que operen en la misma frecuencia, y permite a los dispositivos que funcionan con

baterías operar por largos períodos de tiempo, estas ondas no son generalmente

Page 19: Proyecto Bluelight

19

bloqueadas por obstáculos que se muevan entre los dispositivos, lo cual resulta

conveniente para conectar varios aparatos (8 como máximo) simultáneamente.

Bluetooth utiliza también una técnica llamada “Salto de Frecuencia en un Espectro

Determinado (“Spread Spectrum Frecuency Hopping”) para evitar interferencia

entre dos dispositivos, esta consiste en cambiar al azar la frecuencia en la que los

transmisores envían señales, alrededor de 1600 veces por segundo, lo cual hace

muy poco probable que dos transmisores decidan transmitir en exactamente la

misma frecuencia al mismo tiempo y de haber una colisión esta durará una

fracción de segundo (1/1600 segundos) y pueden resolver el conflicto por medio

de software creado para corrección de errores [EBLU09].

Bluetooth uti liza 79 canales de radiofrecuencia con un ancho de banda de 1 MHz

cada uno y una rata máxima de símbolos de 1 MSímbolo/s. Después de que cada

paquete es enviado en una determinada frecuencia de transmisión, ésta cambia a

otra de las 79 frecuencias. El rango típico de operación de Bluetooth es menor a

10 m, sin embargo se pueden alcanzar distancias de hasta 100 m con el uso de

amplificadores [Maya03].

2.2 Seguridad

Quienes deseen usar la tecnología Bluetooth en sus productos tienen distintas

opciones para implementar seguridad. El fabricante de cada producto determina el

modo de seguridad. Los dispositivos y servicios tienen diferentes niveles de

seguridad. Para los dispositivos, hay dos niveles: “Dispositivo confiable” y

“Dispositivo no confiable”. Un dispositivo confiable ya ha sido vinculado con otro

dispositivo y tiene acceso ilimitado a todos los servicios.

Los servicios tienen tres niveles de seguridad:

Page 20: Proyecto Bluelight

20

o Servicios que requieren autorización y autenticación.

o Servicios que requieren autenticación solamente.

o Servicios que están abiertos a todos los dispositivos.

Existe cierta confusión y desinformación acerca de la seguridad en relación con la

tecnología inalámbrica Bluetooth. Lo cierto es que el cifrado de las

especificaciones Bluetooth es seguro. Esto aplica no solo para teléfonos móviles

que usen esta tecnología, sino también dispositivos como ratones y teclados que

se conecten a un PC, un celular en sincronización con un PC y una PDA que use

un teléfono móvil como módem, por nombrar algunos casos. De llegarse a

presentar un problema como el de acceso inapropiado a funcionalidades de

teléfonos celulares (Bluejacking, Bluesnarfing, Bluebugging, Bluetoothing) vía

Bluetooth, es debido a una incorrecta implementación [BLUE08].

2.2.1 BlueJacking. Es el envío de mensajes sin permiso a través de dispositivos

con Bluetooth como celulares, PDAs, portátiles y algunos PCs, enviando una

vCard, una Nota o un contacto que usualmente contiene un mensaje a otro

dispositivo Bluetooth a través del protocolo OBEX.

El nombre fue originado por un usuario llamado AJACK, quien estando en un

banco, buscó algún dispositivo Bluetooth encendido y al encontrar un Nokia 7650,

le envió un mensaje diciendo “Compra Sony Ericsson”. El lo llamó bluejacking y

así se ha hecho desde entonces.

Algunos piensan que el término bluejacking viene de la palabra Bluetooth y la

palabra hijacking. Esto sonaría lógico, pero un bluejacker no hace

hijack(secuestro) con nada. Un bluejacker no está en la capacidad de tomar

control de un teléfono o de robar información personal.

Page 21: Proyecto Bluelight

21

Usualmente un bluejacker solo envía un mensaje de texto, pero con los teléfonos

modernos es posible hasta enviar imágines o sonidos también.

Esto del Bluejacking ha sido usado para técnicas de marketing en algunos centros

comerciales quienes se hacen publicidad por este medio.

2.2.2 BlueSnarfing. Es el robo de información de un dispositivo inalámbrico por

medio de una conexión Bluetooth, ya sea entre teléfonos, portátiles o PDAs. Esto

permite acceso al calendario, la lista de contactos, correos y mensajes de texto.

Bluesnarfing es mucho más serio en relación al Bluejacking, pero ambos

“explotan” otros dispositivos Bluetooth sin su conocimiento.

Cualquier dispositivo que tenga encendido el Bluetooth y este se encuentre en

Modo descubierto (o sea que puede ser encontrado por otros dispositivos en el

rango) puede ser atacado. Apagando esta opción puede protegerse de la

posibilidad de ser “Bluesnarfiado”. Siendo esto una invasión de la privacidad, el

Bluesnarfing es ilegal en algunos países.

Dentro de este rango de herramientas se encuentra el BT Info (Super Bluetooth

Hack), el BT File Manager, el BT Explorer, Miyux y otra gran variedad de

utilidades.

2.2.3 BlueBugging. Alguna gente considera el BlueBugging como una forma de

Bluesnarfing. Pero la naturaleza de este es muy diferente. BlueBugging fue

inventado en 2004, más o menos un año después de que empezara el

Bluesnarfing. Mientras el Bluesnarfing se trata de robar cosas o archivos del

dispositivo de la víctima, el BlueBugging hace un trabajo diferente; toma el control

del móvil de la víctima, y por medio de comandos hace lo que el BlueBugger

desee (dentro de este rango tenemos al BT Info o Super Bluetooth Hack). En otras

Page 22: Proyecto Bluelight

22

palabras, significa que el BlueBugger toma el control de tu teléfono, y lo usa para

enviar mensajes o para hacer una llamada.

Mientras al principio el BlueBugging requería que el Bugger (literalmente) usara un

dispositivo previamente acomodado, las nuevas herramientas del BlueBugging

han hecho la mayor parte del trabajo, lo que significa que cualquiera con el

conocimiento y la herramienta adecuada puede tomar control de tu teléfono.

Las posibilidades y consecuencias de esto, están a la Imaginación.

2.2.4 BlueTiming o Toothing. Podría decirse que es una variante del

BlueJacking, la cual se dice, es para promover encuentros del tipo sexual (citas,

encuentros y esas cosas) mediante la cual un dispositivo Bluetooth es usado para

“descubrir” otros dispositivos Bluetooth en el rango, y les envía un mensaje

sugestivo, algo así como: ¿Hablamos? ¿Dónde nos vemos?

Se crea una red de encuentros furtivos con otros dispositivos Bluetooth,

generalmente en áreas con mucha afluencia de público como Centros

Comerciales y parecidos, la cual no solo es para encuentros y charlas, sino

también para compartir cosas, lo que ha logrado que se desarrollen aplicaciones

dentro de la categoría MoSoSo (Software para sociabilidad móvil, Mobile Social

Software en Inglés.) dentro de las cuales se pueden nombrar el Mobiluck, el

Bluejack, y los recientes Chat2u o Bluetooth Messenger. También está aquí el

“Sensor” de Nokia.

2.3 PILA DE PROTOCOLOS BLUETOOTH

La pila o stack de protocolos Bluetooth, como se puede observar en la figura 2.1,

se basa en el modelo de referencia OSI (Open System Interconnect) de ISO

(Internacional Standard Organization) para interconexión de sistemas abiertos. La

especificación Bluetooth utiliza una arquitectura de protocolos que divide las

Page 23: Proyecto Bluelight

23

diversas funciones de red en un sistema de niveles. En conjunto, permiten el

intercambio transparente de información entre aplicaciones diseñadas de acuerdo

con dicha especificación y fomentan la interoperabilidad entre los productos de

diferentes fabricantes.

Figura 2.1 Pila de protocolos Bluetooth

Fuente: Tomado de [More04]

La pila de protocolos Bluetooth se divide en dos zonas, cada una de las cuales se

implementa en distintos procesadores:

o El módulo Bluetooth (hardware), encargado de las tareas relacionadas con

el envío de información a través del interfaz de radiofrecuencia.

Page 24: Proyecto Bluelight

24

o El host Bluetooth (software), encargado de la parte relacionada con las

capas superiores de enlace y aplicación.

Ambas zonas están comunicadas por el Interfaz de Controlador de Host (HCI).

Sobre la capa de protocolos específicos de Bluetooth, cada fabricante puede

implementar su capa de protocolos de aplicación propietarios. De esta forma, la

especificación abierta de Bluetooth expande enormemente el número de

aplicaciones que pueden beneficiarse de las capacidades que ofrece esta

tecnología inalámbrica. Sin embargo, la especificación Bluetooth exige que, a

pesar de la existencia de diferentes pilas de protocolos de aplicación propietarios,

se mantenga la interoperabilidad entre dispositivos que implementen diferentes

pilas.

Las pilas de protocolos Bluetooth más conocidas son Widcomm, Toshiba

Bluetooth Stack, Microsoft Windows XP Bluetooth y IVT BlueSoleil Stack. Linux

dispone de las pilas de protocolos Bluetooth BlueZ, OpenBT y Affix, de Nokia

[More09].

Page 25: Proyecto Bluelight

25

2.3.1 Radio. La capa física de radio (RF) Bluetooth opera en la banda de 2.4 GHz

libre para ISM (banda de frecuencia industrial, científica y médica). El sistema

emplea un transmisor de salto de frecuencia para contrarrestar las interferencias y

la pérdida de intensidad, y cuenta con gran número de portadoras de espectro

ensanchado por salto de frecuencia (FHSS). Para minimizar la complejidad del

transmisor, se utiliza una modulación de frecuencia binaria. La tasa de

transferencia de símbolos es de 1 MS/s (megasímbolos por segundo), que admite

una velocidad de transmisión de 1 Megabit por segundo (Mbps) en el modo de

transferencia básica y una velocidad de transmisión aérea total de 2 a 3 Mbps en

el modo de transferencia mejorada. Estos modos se conocen como transferencia

básica y transferencia de datos mejorada, respectivamente.

Canal de radio. Normalmente, varios dispositivos sincronizados por un reloj

y una secuencia de salto de frecuencia comparten el mismo canal físico de radio.

2.3.2 Banda Base. La banda base Bluetooth es la parte del sistema Bluetooth

que especifica o introduce los procedimientos de acceso de medios y capa física

entre dispositivos Bluetooth. Su función principal es permitir el enlace físico por

radiofrecuencia (RF) entre unidades Bluetooth dentro de una piconet realizando

tareas de modulación y demodulación de los datos en señales RF que se

transmiten por el aire.

Piconets y Scatternets. Dos o más dispositivos que comparten el mismo

canal físico forman una piconet. Solo un dispositivo Bluetooth actúa como maestro

de la piconet, y los demás dispositivos actúan como esclavos. Una piconet puede

constar de hasta siete dispositivos activos. Los esclavos en una piconet solo

pueden tener enlaces al maestro, por esta razón, no pueden enviarse datos entre

ellos; de hecho el maestro actúa como switch para la piconet y todo el tráfico debe

pasar a través de él.

Page 26: Proyecto Bluelight

26

Un conjunto de dos o más piconets interconectadas forman scatternets. La figura

2.2 muestra una ilustración de estos dos tipos de redes. Un dispositivo Bluetooth

puede ser esclavo en varias piconets, pero solo puede ser maestro en una. Los

dispositivos que participan en más de una red, pueden actuar como puerta de

enlace, reenviando información de una piconet a otra.

Aunque los dispositivos pueden participar en varias piconets, solo pueden estar

activos en una de ellas, dividiendo el tiempo entre estas [Dide04].

Figura 2.2 Piconets y Scatternets

Fuente: Tomado de [Dide04]

Page 27: Proyecto Bluelight

27

¤ Reloj Bluetooth

Todos los dispositivos Bluetooth cuentan con un reloj nativo que debe derivarse de

un reloj del sistema de libre funcionamiento. Para la sincronización con otros

dispositivos los esclavos de una piconet usan la dirección Bluetooth del maestro y

su reloj para determinar la secuencia de saltos de frecuencia.

¤ Dirección de dispositivos Bluetooth

A cada dispositivo Bluetooth se le asigna una dirección de dispositivo Bluetooth

única de 48-bit (BD_ADDR) proporcionada por la autoridad reguladora de IEEE.

¤ Códigos de acceso

En el sistema Bluetooth, todas las transmisiones que se realizan a través del canal

físico se inician con un código de acceso. Se definen tres códigos diferentes,

código de acceso del dispositivo (DAC), código de acceso del canal (CAC), código

de acceso de consulta (IAC)

Canales físicos. Los canales físicos se definen mediante una secuencia de

saltos pseudo aleatorios en los canales RF, la sincronización de los paquetes

(ranuras) y un código de acceso. La secuencia de saltos se determina a partir de

la dirección del dispositivo Bluetooth y de la secuencia de saltos seleccionada. La

fase de la secuencia de saltos se determina mediante el reloj Bluetooth. Todos los

canales físicos se subdividen en ranuras de tiempo cuya longitud depende del

canal físico.

Page 28: Proyecto Bluelight

28

¤ Canal físico básico de la piconet

La definición del canal físico básico de la piconet corresponde al maestro de la

piconet. El maestro controla el tráfico del canal físico de la piconet mediante una

secuencia de consultas.

Por definición, el dispositivo que inicia una conexión mediante una b úsqueda de

terminales hace las veces de maestro. Una vez establecida la piconet, es posible

intercambiar las funciones de maestro y esclavo.

El canal físico básico de la piconet se divide en ranuras de tiempo de 625 μs de

duración cada una.

2.3.3 Link Manager Protocol (LMP) o Protocolo de Gestión de Enlace. Es el

responsable de la autenticación, encriptación, control y configuración del enlace.

El LMP también se encarga del manejo de los modos y consumo de potencia,

además soporta los procedimientos necesarios para establecer un enlace SCO.

2.3.4 Host Controller Interface (HCI) o Interfaz del Controlador de Enlace.

Brinda un método de interfaz uniforme para acceder a los recursos de hardware

de Bluetooth. Éste contiene una interfaz de comando para el controlador banda

base y la gestión de enlace y para acceder al hardware.

2.3.5 Logical Link Control and Adaptation Protocol (L2CAP). También

conocido como Protocolo de Control y Adaptación de Enlace Lógico. Corresponde

a la capa de enlace de datos. Ésta brinda servicios de datos orientados y no

orientados a la conexión a capas superiores. L2CAP multiplexa los protocolos de

capas superiores con el fin de enviar varios protocolos sobre un canal banda base.

Con el fin de manipular paquetes de capas superiores más grandes que el máximo

tamaño del paquete banda base, L2CAP los segmenta en varios paquetes banda

base. La capa L2CAP del receptor reensambla los paquetes banda base en

Page 29: Proyecto Bluelight

29

paquetes más grandes para la capa superior. La conexión L2CAP permite el

intercambio de información referente a la calidad de la conexión, además maneja

grupos, de tal manera que varios dispositivos pueden comunicarse entre sí.

2.3.6 Sevice Discovery Protocol (SDP) o Protocolo de Descubrimiento de

Servicio. El descubrimiento de servicios hace referencia a la capacidad de buscar

y encontrar servicios disponibles en dispositivos Bluetooth. A través de los

servicios, dos dispositivos pueden ejecutar aplicaciones comunes e intercambiar

datos.

El protocolo SDP (Service Discovery Protocol) permite a una aplicación cliente

obtener información sobre servidores SDP disponibles en otros dispositivos

Bluetooth cercanos, enumerar los servicios que ofrecen y las características de

dichos servicios. Después de haber localizado los servicios disponibles en un

dispositivo, el usuario puede elegir aquel de ellos que resulte más apropiado para

el tipo de comunicación que desea establecer.

Un servicio es cualquier entidad que puede ofrecer información, ejecutar una

acción o controlar un recurso. Un servicio puede estar implementado como

hardware, software o una combinación de hardware y software.

Búsqueda de dispositivos y servicios. Debido a la naturaleza de las

redes Bluetooth, los dispositivos remotos entran y salen de la red debido a su

alcance. Los dispositivos Bluetooth poseen la habilidad de descubrir otros

dispositivos que están cerca y descubrir también cuales son los servicios que esos

dispositivos pueden ofrecer [Klin04].

Durante el proceso de búsqueda de dispositivos, el dispositivo que está buscando

recibirá direcciones Bluetooth junto con las frecuencias de los dispositivos

Page 30: Proyecto Bluelight

30

encontrados. De esta forma, ese dispositivo podrá identificar todos los dispositivos

encontrados por sus direcciones Bluetooth.

Es posible encontrar dispositivos cuando estos entran en modo inquiry scan. En

ese modo, un dispositivo permanecerá un periodo de tiempo más largo de lo

normal en cada canal. Esto aumenta la posibilidad de ser encontrado por los

dispositivos que están buscando. Los dispositivos descubiertos hacen uso del IAC

(Inquiry Access Code) ó Código de Acceso de Búsqueda. Existen dos tipos de

IAC, el GIAC (General Inquiry Access Code) y el LIAC (Limited Inquiry Access

Code). El primero es usado cuando la búsqueda es hecha por un periodo

indefinido de tiempo, el segundo a su vez, por un periodo de tiempo limitado

[Cava07].

Servicios Bluetooth. Diferentes dispositivos Bluetooth pueden ofrecer

diferentes servicios. Después de ser encontrado el dispositivo remoto, se podrá

hacer una búsqueda de los servicios que ofrece o de alguno específico. Estos

servicios permiten a otros dispositivos conectarse a otro vía Bluetooth y efectuar

alguna operación. Por ejemplo el servicio Bluetooth OBEX Object Push permite a

otros conectarse al dispositivo y transferir archivos.

2.3.7 Protocolo RFCOMM (Radio Frequency Communication). Ofrece

emulación de puertos seriales sobre el protocolo L2CAP. RFCOMM emula

señales de control y datos RS-232 sobre la banda base Bluetooth. Éste ofrece

capacidades de transporte a servicios de capas superiores (por ejemplo OBEX)

que usan una línea serial como mecanismo de transporte. RFCOMM soporta dos

tipos de comunicación, directa entre dispositivos actuando como endpoints y

dispositivo-modem-dispositivo, además tiene un esquema para emulación de null

modem.

Page 31: Proyecto Bluelight

31

Protocolos Específicos

¤ Control de telefonía – Comandos AT.

Bluetooth soporta un número de comandos AT para el control de telefonía a través

de emulación de puerto serial (RFCOMM).

¤ Protocolo Punto-a-Punto (PPP).

El PPP es un protocolo orientado a paquetes y por lo tanto debe usar su

mecanismo serial para convertir un torrente de paquetes de datos en una corriente

de datos seriales. Este protocolo corre sobre RFCOMM para lograr las conexiones

punto-a-punto.

¤ Protocolos UDP/TCP – IP.

Los estándares UDP/TCP e IP permiten a las unidades Bluetooth conectarse, por

ejemplo a Internet, a través de otras unidades conectadas. Por lo tanto, la unidad

puede actuar como un puente para Internet. La configuración TCP/IP/PPP está

disponible como un transporte para WAP.

¤ Protocolo OBEX.

OBEX es un protocolo opcional de nivel de aplicación diseñado para permitir a las

unidades Bluetooth soportar comunicación infrarroja para intercambiar una gran

variedad de datos y comandos. Éste usa un modelo cliente-servidor y es

independiente del mecanismo de transporte y del API (Application Program

Interface) de transporte. OBEX usa RFCOMM como principal capa de transporte.

Page 32: Proyecto Bluelight

32

También permite a las aplicaciones operar en la pila de protocolos de la tecnología

Bluetooth y en la pila de la tecnología de infrarrojos. En los dispositivos Bluetooth,

sólo se admiten conexiones OBEX para el intercambio de objetos. Se han

desarrollado tres perfiles de aplicaciones basadas en el protocolo OBEX: SYNC,

FTP y OPP.

2.4 PERFILES BLUETOOTH

Para que un dispositivo pueda utilizar la tecnología inalámbrica Bluetooth, debe

saber interpretar los perfiles Bluetooth, que describen las distintas aplicaciones

posibles. Estos perfiles son guías que indican los procedimientos por los que los

dispositivos equipados con tecnología Bluetooth se comunican entre sí. Existe un

amplio abanico de perfiles que detallan los diferentes tipos de uso y aplicaciones

de la tecnología inalámbrica Bluetooth. Al seguir las directrices proporcionadas en

las especificaciones Bluetooth, los desarrolladores pueden crear aplicaciones

compatibles con otros dispositivos que se ajusten a este estándar [BLUE08].

Cada perfil incluye, como mínimo, información sobre las siguientes cuestiones:

o Dependencia de otros perfiles

o Propuestas de formato de interfaz de usuario

o Características concretas de la pila de protocolos Bluetooth utilizada por el

perfil. Para realizar su función, cada perfil se sirve de ciertas opciones y

parámetros en cada capa de la pila. También se puede incluir un breve

resumen de los servicios requeridos si resulta necesario.

Page 33: Proyecto Bluelight

33

La figura 2.3 muestra los diferentes perfiles Bluetooth.

Figura 2.3 Perfi les Bluetooth

Fuente: Tomado de [http://www.palowireless.com/infotooth/tutorial/profi les.asp]

Los dispositivos no necesitan implementar todos los perfiles. Un dispositivo solo

necesita implementar los que necesite para soportar sus aplicaciones. Una

excepción, es el Perfil Genérico de Acceso (GAP), el cual se requiere en todos los

dispositivos.

Audio/Video Remote Control

Profile

Ext. Service Discovery Profile (1)

Common ISDN Access Profile

Service Discovery App. Profile

Generic Access Profile

PAN Profile

ESDP (2)

TCS-BIN Based Profiles

Corless Telephony Profile

Intercom Profile

Hardcopy Cable Replacement Profile

Generic Audio/Video Distribution Profile

Adv. Audio Dis tribution Profile

Video Dis tribution Profile

Headset Profile

Hands-Free Profile

Dial-Up Networking Profile

Fax Profile

LAN Profile

Serial Port Profile

ESDP (3)

SIM Access Profile

Generic Object Exchange Profile

File Transfer Profile

Object Push Profile

Synchronization Profile

Basic imaging Profile

Basic Printing Profile

Page 34: Proyecto Bluelight

34

2.4.1 Perfil Genérico de Acceso (GAP). Este perfil define los procedimientos

generales para el descubrimiento y establecimiento de conexión entre dispositivos

Bluetooth. El GAP maneja el descubrimiento y establecimiento entre unidades

que no están conectadas y asegura que cualquier par de unidades Bluetooth, sin

importar su fabricante o aplicación, puedan intercambiar información a través de

Bluetooth para descubrir qué tipo de aplicaciones soportan las unidades.

Esencialmente, este perfil describe como son usadas las capas bajas (LMP y

Banda Base), junto con algunas capas superiores.

2.4.2 Perfil de Puerto Serial (SPP). El perfil de puerto serial define los

requerimientos para dispositivos Bluetooth necesarios para establecer conexiones

de cable serial usando RFCOMM entre dos dispositivos semejantes. Este perfil

define los protocolos y procedimientos que se usarán por dispositivos que utilizan

Bluetooth para emulación de cable serial RS232 (o similar).

2.4.3 Perfil Genérico de Intercambio de Objetos (GOEP). Este perfil define

protocolos y procedimientos usados por aplicaciones para ofrecer características

de intercambio de objetos. Los usos pueden ser, por ejemplo, sincronización,

transferencia de archivos o modelo Object Push. Los dispositivos más comunes

que usan este modelo son agendas electrónicas, PDAs, teléfonos celulares y

teléfonos móviles. El GOEP es dependiente del perfil de puerto serial.

2.4.4 Perfil de Aplicación de Descubrimiento de Servicio (SDAP). Este perfil

define los protocolos y procedimientos para una aplicación en un dispositivo

Bluetooth donde se desea descubrir y recuperar información relacionada con

servicios localizados en otros dispositivos. El SDAP es dependiente del GAP.

Page 35: Proyecto Bluelight

35

2.5 PROCESO DE CONEXIÓN

Antes de que cualquier dispositivo pueda conectarse a otro, inicialmente debe

buscar dispositivos a los que se pueda conectar y formar entre ellos una piconet, a

este proceso se le conoce como Proceso de Búsqueda (Inquiry Process).

2.5.1 Proceso de Búsqueda. Los dispositivos Bluetooth utilizan procedimientos

de búsqueda para detectarse entre sí dentro de su radio de alcance. Este

procedimiento de búsqueda es asimétrico. Por una parte, el dispositivo Bluetooth

que realiza la búsqueda (Dispositivo A) será el dispositivo de detección y enviará

activamente solicitudes (paquetes de búsqueda) a tal efecto. Por otra, los

dispositivos Bluetooth que son susceptibles de ser detectados, recibirán la

solicitud de búsqueda y responderán enviando un paquete FHS (Frequency Hop

Synchronization) el cual contiene toda la información necesaria para que el

dispositivo que ejecuta la búsqueda se pueda conectar a él, incluyendo la

dirección Bluetooth del dispositivo y clase de dispositivo. Todos los dispositivos

que responden a la búsqueda son reportados al Controlador de Enlace (Host

Controller) del dispositivo A.

Este procedimiento de búsqueda emplea un canal físico especial para las

solicitudes y respuestas y no hace uso de las capas de arquitectura superiores al

canal físico, si bien podría aparecer un enlace físico transitorio durante el

intercambio de información entre el dispositivo receptor y emisor.

Hasta este momento, el dispositivo A conoce qué dispositivos se encuentran en el

rango de conexión y con la información obtenida de la búsqueda, este puede

averiguar qué servicios ofrece cada uno de ellos en busca de uno en particular.

2.5.2 Búsqueda de servicios. El descubrimiento de servicios sigue el modelo

cliente-servidor, de este modo, para encontrar los servicios que ofrece el servidor,

Page 36: Proyecto Bluelight

36

el dispositivo A (cliente) envía paquetes de paginación preguntándole si posee un

servicio definido por un registro de servicios (service record). Un dispositivo

disponible para la conexión (Dispositivo B) responderá retornando el registro de

servicios al cliente si posee uno con los atributos especificados y un vínculo de

Banda Base se establece entre ambos dispositivos.

Si se desea por ejemplo una conexión de perfil Dial-up Networking (DUN) entre

ambos dispositivos, primero se establece una conexión L2CAP antes de que

puedan intercambiar información de servicio, la cual será manejada por el

Protocolo de Descubrimiento de Servicios (SDP). Si el dispositivo B responde

indicando que posee el servicio necesitado por el dispositivo A, entonces se puede

establecer una conexión RFCOMM a través del vínculo L2CAP existente. Por

último la conexión Dial-up Networking se establece sobre la conexión RFCOMM.

La figura 2.4 i lustra el establecimiento de este tipo de conexión.

Figura 2.4 Establecimiento de una conexión

Fuente: Tomado de [Dide04]

Page 37: Proyecto Bluelight

37

Registro de Servicios (Service Record). Los registros de servicios

contienen información adicional que no se encuentra en los registros de la clase

de dispositivo. Este es el encargado de responder a las preguntas ¿Qué tipo de

sevicio ofrece esta aplicación? ¿Cómo se conecta un cliente a este servicio?

Los registros de servicios para acceso LAN, sincronización y transferencia de

archivos entre otros servicios estándares están definidos en los perfiles Bluetooth.

Base de Datos para el Descubrimiento de Servicios SDDB (Service

Discovery DataBase). Los servidores utilizan una SDDB para almacenar los

registros de servicios. Cuando un servidor recibe una petición de búsqueda de

servicios, este busca en la SDDB por un registro de servicios con los atributos

especificados que lo describen.

Figura 2.5 Service Discovery DataBase

Fuente: Tomado de [Orti04]

Las responsabilidades de un servidor son:

¤ Crear el registro de servicio describiendo el servicio ofrecido por la

aplicación.

Page 38: Proyecto Bluelight

38

¤ Añadir el registro de servicios a la SDDB.

¤ Registrar las medidas de seguridad asociadas al servicio.

¤ Aceptar conexiones de clientes solicitando el servicio.

¤ Actualizar la SDDB si el servicio cambia.

¤ Remover o deshabilitar el registro de servicios en la SDDB.

Atributos de Servicios. Los atributos son representados por números

hexadecimales llamados identificadores de atributo. La tabla 1 muestra algunos

identificadores de atributos comúnmente utilizados.

Tabla 1. Identificadores de servicios más comunes y su tipo

Attribute Name Attribute ID Attribute Value Type

ServiceRecordHandle 0x0000 Entero de 32 bits sin signo

ServiceClassIDList 0x0001 DATASEQ de UUIDs

ServiceRecordState 0x0002 Entero de 32 bits sin signo

ServiceID 0x0003 UUID

ProtocolDescriptorList 0x0004 DATASEQ de DATASEQ de

UUIDs y parámetros opcionales

BrowseGroupList 0x0005 DATASEQ de UUIDs

LanguageBasedAttributeIDList 0x0006 DATASEQ de tríos de DATASEQ

ServiceInfoTimeToLive 0x0007 Entero de 32 bits sin signo

ServiceAvailability 0x0008 Entero de 8 bits sin signo

BluetoothProfileDescriptorList 0x0009 DATASEQ de pares de DATASEQ

DocumentationURL 0x000A URL

ClientExecutableURL 0x000B URL

IconURL 0x000C URL

VersionNumberList 0x0200 DATASEQ de enteros de 16 bits

sin signo

ServiceDatabaseState 0x0201 Entero de 32 bits sin signo

Fuente: Tomado de [Cava07]

Page 39: Proyecto Bluelight

39

Distintos atributos contienen valores de varios tipos y tamaños, que son

almacenados por un elemento de datos. Un elemento de datos está conformado

por dos partes: La primera es un descriptor del tipo de elemento y la segunda es

un campo de datos. El descriptor de tipo de elemento contiene información sobre

el tipo y tamaño del dato, en cuanto que el campo de datos contiene el dato en sí.

Por lo tanto, un dispositivo remoto siempre sabrá cual es el tipo de dato y su

tamaño cuando esté buscando un determinado atributo.

Identificador Único Universal UUID (Universally Unique Identifier). El

UUID es un tipo de información utilizado para identificar los servicios, protocolos,

perfiles, etc. Los UUIDs son identificadores de 128 bits que garantizan ser únicos

a través del tiempo y el espacio. La tecnología Bluetooth utiliza diferentes

variaciones de UUIDs como grandes y pequeños. Fueron creados con la intención

de reducir eventual almacenamiento y transferencias innecesarias de valores de

UUIDs de 128 bits. La tabla 2 provee una corta lista de los UUIDs más comunes.

Tabla 2. UUIDs más comunes

Name Value Size

Base UUID Value (Used in promoting 16-bit and 32-bit UUIDs to 128-bit UUIDs)

0x0000000000001000800000805F9B34FB

128-bit

SDP 0x0001 16-bit

RFCOMM 0x0003 16-bit

OBEX 0x0008 16-bit

HTTP 0x000C 16-bit

L2CAP 0x0100 16-bit

BNEP 0x000F 16-bit

Serial Port 0x1101 16-bit

ServiceDiscoveryServerServiceClassID 0x1000 16-bit

BrowseGroupDescriptorServiceClassID 0x1001 16-bit

PublicBrowseGroup 0x1002 16-bit

Page 40: Proyecto Bluelight

40

OBEX Object Push Profile 0x1105 16-bit

OBEX File Transfer Profile 0x1106 16-bit

Personal Area Networking User 0x1115 16-bit

Network Access Point 0x1116 16-bit

Group Network 0x1117 16-bit

Fuente: Tomado de [http://www.bluetooth.org/assigned-numbers/sdp.htm]

2.6 CARACTERÍSTICAS

Gracias a su gran aceptación, un dispositivo Bluetooth puede conectarse con casi

cualquier otro dispositivo compatible que se halle en las proximidades, eliminando

las fronteras en cualquier parte del mundo. Los dispositivos electrónicos

equipados con tecnología Bluetooth pueden conectarse y comunicarse de forma

inalámbrica mediante redes ad hoc de corto alcance denominadas piconets. Cada

dispositivo puede conectarse simultáneamente con hasta otros siete dentro de una

misma piconet. Un dispositivo puede pertenecer a varias piconets al mismo

tiempo. Las piconets se establecen de forma dinámica y automática cuando los

dispositivos Bluetooth se encuentran en el mismo radio de acción.

Una de las principales ventajas de la tecnología inalámbrica Bluetooth es su

capacidad para gestionar simultáneamente tanto transmisiones de voz como de

datos. Esto permite a los usuarios disfrutar de una gran variedad de soluciones

innovadoras, tales como el uso de manos libres para atender llamadas, funciones

de impresión y fax, o la sincronización de aplicaciones entre PDA, ordenadores y

móviles, entre otras muchas.

2.6.1 Composición de las especificaciones. A diferencia de otros estándares

inalámbricos, la especificación Bluetooth otorga a las empresas de desarrollo

Page 41: Proyecto Bluelight

41

definiciones para la capa de enlace y de aplicaciones, lo que permite que sea

compatible con soluciones de voz y datos.

2.6.2 Espectro. La tecnología Bluetooth opera en una banda de frecuencia

industrial, científica y médica (ISM) que no requiere licencia y que se encuadra,

concretamente, entre 2.4 y 2.485 GHz. Utiliza una señal bidireccional en un

espectro ensanchado por salto de frecuencia a una velocidad nominal de 1600

saltos/segundo. La banda ISM de 2.4 GHz está disponible en casi todos los países

y no suele requerir licencia.

2.6.3 Interferencias. La función de salto adaptable de frecuencia (AFH) de la

tecnología inalámbrica Bluetooth se diseñó expresamente para reducir las

interferencias de las tecnologías inalámbricas que comparten el espectro de

2.4 GHz. La función AFH uti liza la frecuencia disponible dentro del espectro. Para

ello, detecta los dispositivos conectados y descarta las frecuencias que éstos

estén utilizando. Este salto adaptable permite unas transmisiones más eficaces

dentro del espectro, por lo que se mejora el funcionamiento del dispositivo, incluso

si el usuario utiliza otras tecnologías al mismo tiempo. La señal salta entre 79

frecuencias en intervalos de 1 MHz para tener un alto grado de tolerancia a las

interferencias.

2.6.4 Alcance. El alcance depende de la clase del dispositivo:

o Los radios de clase 3 suelen tener un alcance de entre uno y tres metros.

o Las radios de clase 2 son habituales de los dispositivos portátiles y tienen

un alcance de diez metros.

o Las radios de clase 1 se utilizan principalmente en el sector industrial y

logran un alcance de cien metros.

Page 42: Proyecto Bluelight

42

2.6.5 Potencia. Las radios más utilizadas son las de clase 2, con una potencia de

2,5 mW. La tecnología Bluetooth se ha diseñado para minimizar el consumo de

energía. Para ello, la especificación cambia las radios al modo de ahorro de

energía cuando no están activas.

Page 43: Proyecto Bluelight

43

3. TELÉFONO CELULAR

Las tecnologías inalámbricas han tenido mucho auge y desarrollo en estos últimos

años, una de las que ha tenido un gran desarrollo ha sido la telefonía celular.

Desde sus inicios a finales de los 70 ha revolucionado enormemente las

actividades que realizamos diariamente. Los teléfonos celulares se han convertido

en una herramienta primordial para la gente común y de negocios haciéndolas

sentir más seguras y más productivas.

A pesar de que la telefonía celular fue concebida estrictamente para la voz, la

tecnología celular de hoy es capaz de brindar otro tipo de servicios, como datos,

audio y video con algunas limitaciones. Sin embargo, la telefonía inalámbrica del

mañana hará posible aplicaciones que requieran un mayor consumo de ancho de

banda [Jime05].

3.1 CÓMO FUNCIONAN LOS TELÉFONOS CELULARES

La gran idea del sistema celular es la división de la ciudad en pequeñas células o

celdas. Esta idea permite la re-utilización de frecuencias a través de la ciudad, con

lo que miles de personas pueden usar los teléfonos al mismo tiempo. En un

sistema típico de telefonía análoga de los Estados Unidos, la compañía recibe

alrededor de 800 frecuencias para usar en cada ciudad. La compañía divide la

ciudad en celdas. Cada celda generalmente tiene un tamaño de 26 kilómetros

cuadrados. Las celdas son normalmente diseñadas como hexágonos (figuras de

seis lados), en una gran rejilla de hexágonos como se muestra en la figura 3.

Page 44: Proyecto Bluelight

44

Figura 3. Red de Celdas de telefonía Celular

Fuente: Tomado de

[http://www.yucatan.com.mx/especiales/celular/comofunciona.asp ].

Cada celda tiene una estación base que consiste de una torre y un pequeño

edificio que contiene el equipo de radio.

Cada celda en un sistema análogo utiliza un séptimo de los canales de voz

disponibles. Eso es, una celda, más las seis celdas que la rodean en un

arreglo hexagonal, cada una uti lizando un séptimo de los canales disponibles

para que cada celda tenga un grupo único de frecuencias y no haya

colisiones:

o Un proveedor de servicio celular típicamente recibe 832

radiofrecuencias para utilizar en una ciudad.

o Cada teléfono celular uti liza dos frecuencias por llamada, por lo que

típicamente hay 395 canales de voz por portador de señal. (las 42

frecuencias restantes son utilizadas como canales de control).

o Por lo tanto, cada celda tiene alrededor de 56 canales de voz

disponibles.

Page 45: Proyecto Bluelight

45

En otras palabras, en cualquier celda, pueden hablar 56 personas en sus

teléfonos celulares al mismo tiempo. Con la transmisión digital, el número de

canales disponibles aumenta. Por ejemplo el sistema digital TDMA puede

acarrear el triple de llamadas en cada celda, alrededor de 168 canales

disponibles simultáneamente.

Los teléfonos celulares tienen adentro transmisores de bajo poder. Muchos

teléfonos celulares tienen dos intensidades de señal: 0.6 watts y 3.0 watts (en

comparación, la mayoría de los radios de banda civil transmiten a 4 watts.) La

estación central también transmite a bajo poder. Los transmisores de bajo

poder tienen dos ventajas:

o Las transmisiones de la base central y de los teléfonos en la misma

celda no salen de ésta. Por lo tanto, cada celda puede re-utilizar las

mismas 56 frecuencias a través de la ciudad.

o El consumo de energía del teléfono celular, que generalmente funciona

con baterías, es relativamente bajo. Una baja energía significa baterías

más pequeñas, lo cual hace posibles los teléfonos celulares.

La tecnología celular requiere un gran número de bases o estaciones en una

ciudad de cualquier tamaño. Una ciudad grande puede llegar a tener cientos

de torres. Cada ciudad necesita tener una oficina central la cual maneja todas

las conexiones telefónicas a teléfonos convencionales, y controla todas las

estaciones de la región [Yuca01].

3.2 DIFERENCIAS ENTRE LOS TELÉFONOS CELULARES Y LOS RADIOS

DE BANDA CIVIL

Una buena manera de entender la sofisticación del teléfono celular es compararlo

con los radios de banda civil o los walkie-talkies.

Page 46: Proyecto Bluelight

46

Figura 4. Celular vs. Radio

Fuente: Tomado de

[http://www.yucatan.com.mx/especiales/celular/bandacivilVscelular.asp]

3.2.1 Simplex Vs. Dúplex. Los radios de banda civil y los walkie talkies son

dispositivos simplex. Eso significa que cuando dos personas se comunican,

utilizan la misma frecuencia, por lo que sólo una persona puede hablar al mismo

tiempo. Un teléfono celular es un dispositivo dúplex. Eso significa que utiliza una

frecuencia para hablar y otra para recibir, de esa manera dos personas pueden

platicar al mismo tiempo.

3.2.2 Canales. Un walkie-talkie tiene usualmente un canal, y un radio de banda

civil tiene 40 canales. Un teléfono celular típico puede comunicar en 1,664 canales

o más.

3.2.3 Rango. Un walkie-talkie puede transmitir hasta alrededor de 1.5 kms de

distancia utilizando un transmisor de .25 watts. Un radio de banda civil, debido a

que es más poderoso, puede transmitir hasta alrededor de 7 y medio kilómetros

con un transmisor de 5 watts. Los teléfonos celulares trabajan dentro de celdas, y

pueden cambiar de celda al vuelo. Las celdas le dan a los teléfonos celulares un

rango increíble. Alguien que utilice un teléfono celular puede manejar cientos de

kilómetros y mantener una conversación todo el tiempo debido a que cambia de

celdas [Yuca01].

Page 47: Proyecto Bluelight

47

3.3 SOFTWARE PARA DISPOSITIVOS MÓVILES

Lo primero a tener en cuenta es que un dispositivo móvil no es solo un celular y

que el software a desarrollar, puede ser, tanto un sitio Web, como una aplicación

para el dispositivo.

Los celulares no son los únicos dispositivos móviles para los cuales se pueden

hacer desarrollos, también se puede hacer para otros aparatos como Palm o

Pocket PC, dispositivos de mano pequeños con ciertamente una gran potencia.

Hay que tener en cuenta varios aspectos tanto para elegir el dispositivo correcto,

como la tecnología a usar, para ello es necesario conocer cuáles son las

necesidades, tanto presentes como futuras, las capacidades del dispositivo que se

elija, el conocimiento actual o la facilidad de adquirir este conocimiento sobre el

software de desarrollo, entre otras.

Algunos de los lenguajes más usados para el desarrollo de software de

dispositivos móviles son .NET, Java, BREW entre otros.

Page 48: Proyecto Bluelight

48

4. JAVA

La empresa Sun Microsystems lanzó a mediados de los años 90 el lenguaje de

programación orientado a objetos Java, que aunque en un principio fue diseñado

para generar aplicaciones que controlarían electrodomésticos como lavadoras,

frigoríficos, etc, debido a su gran robustez e independencia de la plataforma donde

se ejecutase el código, finalmente se utilizó para la creación de componentes

interactivos integrados en páginas Web y programación de aplicaciones

independientes. Estos componentes se denominaron applets y casi todo el trabajo

de los programadores se dedicó al desarrollo de éstos. Con los años, Java ha

progresado enormemente en varios ámbitos como servicios HTTP, servidores de

aplicaciones y acceso a bases de datos (JDBC). Como se puede observar Java se

ha ido adaptando a las necesidades tanto de los usuarios como de las empresas

ofreciendo soluciones y servicios tanto a unos como a otros [Galv03].

Debido a la explosión tecnológica de estos últimos años Java ha desarrollado

soluciones personalizadas para cada ámbito tecnológico.

En 1999, Sun Microsystems reconoció que “con un único tamaño no es posible

abarcarlo todo” y decidió reagrupar la tecnología JAVA en varias ediciones. De

esta manera, JAVA se ha redistribuido en tres ramas:

¤ Java 2 Platform, Standard Edition (J2SE)

Esta edición de Java es la que en cierta forma recoge la iniciativa original del

lenguaje Java. Tiene las siguientes características:

o Inspirado inicialmente en C++, pero con componentes de alto nivel, como

soporte nativo de strings y recolector de basura.

Page 49: Proyecto Bluelight

49

o Código independiente de la plataforma, precompilado a bytecodes

intermedio y ejecutado en el cliente por una JVM (Java Virtual Machine).

o Modelo de seguridad tipo sandbox proporcionado por la JVM.

o Abstracción del sistema operativo subyacente mediante un juego completo

de APIs de programación.

Esta versión de Java contiene el conjunto básico de herramientas usadas para

desarrollar Java Applets, así cómo las APIs orientadas a la programación de

aplicaciones de usuario final: Interfaz gráfica de usuario, multimedia, redes de

comunicación, etc.

¤ Java 2 Platform, Enterprise Edition (J2EE)

Esta versión está orientada al entorno empresarial. El software empresarial tiene

unas características propias marcadas: está pensado no para ser ejecutado en un

equipo, sino para ejecutarse sobre una red de ordenadores de manera distribuida

y remota mediante EJBs (Enterprise Java Beans). De hecho, el sistema se monta

sobre varias unidades o aplicaciones. En muchos casos, además, el software

empresarial requiere que se sea capaz de integrar datos provenientes de entornos

heterogéneos. Esta edición está orientada especialmente al desarrollo de servicios

web, servicios de nombres, persistencia de objetos, XML, autenticación, APIs para

la gestión de transacciones, etc. El cometido de esta especificación es ampliar la

J2SE para dar soporte a los requisitos de las aplicaciones de empresa.

¤ Java 2 Platform, Micro Edition (J2ME)

Esta versión de Java está enfocada a la aplicación de la tecnología Java en

dispositivos electrónicos con capacidades computacionales y gráficas muy

Page 50: Proyecto Bluelight

50

reducidas, tales como teléfonos móviles, PDAs o electrodomésticos inteligentes.

Esta edición tiene unos componentes básicos que la diferencian de las otras

versiones, como el uso de una máquina virtual denominada KVM (Kilo Virtual

Machine, debido a que requiere sólo unos pocos Kilobytes de memoria para

funcionar) en vez del uso de la JVM clásica, inclusión de un pequeño y rápido

recolector de basura

Figura 5. Arquitectura de la plataforma Java 2 de SUN

Fuente: Tomado de [Galv03]

La separación dada por Sun permite que cada edición evolucione por sí sola y se

adapte mejor al conjunto de dispositivos para el cual fue diseñada; sin embargo,

las diferentes ediciones se traslapan.

Page 51: Proyecto Bluelight

51

Aunque Sun Microsystems es la máxima autoridad en lo que respecta al futuro de

Java, otras corporaciones o empresas pueden participar en la definición y revisión

de la plataforma Java a través del Java Community Process (JCP), entre ellas:

Motorola, Nokia, Sony, Phillips, Siemens, Palm, IBM, Ericsson, Cisco Systems,

Samsung, Oracle, Texas Instruments, NEC, Symbian, Hitachi, Panasonic.

4.1 J2ME

J2ME (Java 2 Micro Edition) está enfocado para ser usado en dispositivos con

recursos limitados. Tiene una sola parte de las clases de J2SE, las necesarias

para poder manejar los recursos de un teléfono celular. La tecnología J2ME se ha

difundido ampliamente en los últimos años en más de 110 operadores telefónicos

alrededor del mundo, tanto GSM como CDMA, gracias a que es independiente de

la estructura de red o de un modelo de negocios determinado. Además, existe una

gran base de programadores Java, que sin mucho esfuerzo dan el salto a J2ME.

Debido a la gran variedad de marcas y modelos de teléfonos, SUN definió el MIDP

(Mobile Information Device Profile) para establecer los requisitos con los cuales las

compañías productoras de dispositivos deben cumplir para poder ser catalogados

como dispositivos que soportan J2ME.

En una primera etapa se definió MIDP 1.0, el cual era muy general y por eso no

incluía algunas características de los teléfonos más recientes. Debido a esto,

compañías como Nokia y Samsung, lanzaron clases propias para sacar mayor

provecho de los recursos de sus teléfonos, no contemplados en la versión MIDP

1.0.

Posteriormente se definió a través del JCP (Java Community Process), la versión

2.0 del MIDP, que contiene más clases para utilizar los recursos del teléfono.

Además de las clases estándar del MIDP, existen “clases opcionales” que

Page 52: Proyecto Bluelight

52

permiten ocupar más recursos de los dispositivos actuales, como son: multimedia,

graficación 3D, manejo de los archivos del teléfono, envío y recepción de

mensajes de texto y multimedia, implementar web services, entre otros.

Existen herramientas de desarrollo gratuitas que pueden ser descargadas del

portal de Sun Microsystems. Además, compañías como Nokia, Motorola, Sony-

Ericsson, entre otras, cuentan con sitios para desarrolladores, donde es posible

descargar especificaciones técnicas, emuladores y herramientas de desarrollo

[Mart05].

Como se puede observar en la figura 6, J2ME contiene una mínima parte de las

APIs de Java. Esto es debido a que la edición estándar de APIs de Java ocupa

aproximadamente 20 Mb, y los dispositivos pequeños disponen de una cantidad

de memoria mucho más reducida. En concreto, J2ME usa 37 clases de la

plataforma J2SE provenientes de los paquetes java.lang, java.io, java.util [Galv03].

Se puede concluir que J2EE es un superconjunto de J2SE y que J2ME es un

subconjunto de la versión Standard excepto por un paquete de clases adicionales

llamado javax.microedition, como ilustra la figura 6.

Figura 6. Relación entre las APIs de la plataforma Java

Fuente: Tomado de [Galv03]

javax.microedition

Page 53: Proyecto Bluelight

53

4.1.1 Configuraciones. Una configuración define las funcionalidades mínimas

para dispositivos con características semejantes. Por lo tanto, más

específicamente, define las características en cuanto a máquina virtual y el

conjunto de clases derivadas de la plataforma Java SE.

Actualmente, existen dos tipos de configuraciones definidas en Java ME, la

Configuración para Dispositivos con Conectividad Limitada CLDC (Connected

Limited Device Configuration) y la Configuración para Dispositivos Conectados

CDC (Connected Device Configuration).

CLDC. Es la más pequeña de las dos configuraciones, diseñada para

dispositivos con conexiones de red intermitentes, procesadores lentos y memoria

limitada, por ejemplo los teléfonos móviles y las PDAs. Una implementación de

CLDC generalmente incluye una pequeña máquina virtual de kilobytes KVM (Kilo

Virtual Machine), especialmente diseñada para dispositivos con memoria

restringida.

CDC. Esta configuración está diseñada para dispositivos de nivel superior

que poseen más memoria, procesadores más rápidos y mayor ancho de banda de

red, tales como TV set-top boxes, sistemas telemáticos de vehículos y PDAs de

gama alta. CDC incluye una máquina virtual completa y una mayor

implementación de la plataforma Java SE.

Como se muestra en la figura 6.1 CLDC es un subconjunto de CDC.

Page 54: Proyecto Bluelight

54

Figura 6.1 Relación entre CDC y CLDC

Fuente: Tomado de [Cava07]

4.1.2 Perfiles. Un perfi l proporciona las librerías para que el programador pueda

desarrollar aplicativos para un determinado dispositivo. Un perfil podría ser

considerado como las características de un dispositivo que pertenece a una familia

y está representando un tipo de configuración.

MIDP (Mobile Information Profile). El perfil MIDP está diseñado

específicamente para dispositivos portátiles, como celulares y PDAs (de bajo

desempeño); MIDP combinado con CLDC ofrece manejo del ciclo de vida de la

aplicación, componentes de interfaz de usuario, conectividad de red y

almacenamiento de datos locales. Las aplicaciones MIDP se llaman MIDlets al

igual que la clase MIDlet definida en MIDP y es la superclase para todas las

aplicaciones MIDP.

4.1.3 Paquetes opcionales. La plataforma Java ME puede ser extendida

combinando paquetes opcionales con CLDC y su perfil correspondiente. Estos

paquetes son creados para satisfacer requerimientos de mercado específicos y

ofrecen APIs estándar para usar tanto las tecnologías existentes y las que

recientemente surgen como Bluetooth, servicios WEB, mensajería inalámbrica,

multimedia y conectividad a base de datos. Al ser modulares estos paquetes, es

Page 55: Proyecto Bluelight

55

decisión de los fabricantes implementarlos o no de acuerdo a las necesidades y

capacidades de cada dispositivo [Hole09].

4.1.4 APIs Java para Bluetooth (JSR-82 / JABWT). El JCP (Java Community

Process) es el hogar de la comunidad desarrolladora internacional que tiene como

objetivo desarrollar y evolucionar las especificaciones de la tecnología Java. El

proceso JCP conlleva el uso de JSR (Java Specification Request) los cuales son

documentos formales que describen las especificaciones y tecnologías propuestas

para que sean añadidas a la plataforma Java. Las revisiones públicas formales de

JSRs son controladas antes de que los JSR se conviertan en final y sean votados

por el Comité Ejecutivo JCP. Un JSR final suministra una implementación de

referencia la cual da una implementación libre de la tecnología en código fuente y

un Kit de Compatibilidad de Tecnología para verificar la especificación de la API.

JSR-82 ó JABWT (Java Apis for Bluetooth Wireless Technology) es un API que

está dividida en dos partes: el paquete javax.bluetooth y el paquete javax.obex.

Los dos paquetes son totalmente independientes. El primero de ellos define clases

e interfaces básicas para el descubrimiento de dispositivos, descubrimiento de

servicios, conexión y comunicación. La comunicación a través de javax.bluetooth

es a bajo nivel: mediante flujos de datos o mediante la transmisión de arrays de

bytes.

Por el contrario el paquete javax.obex permite manejar el protocolo de alto nivel

OBEX (OBject EXchange). Este protocolo es muy similar a HTTP y es utilizado

sobre todo para el intercambio de archivos. El protocolo OBEX es un estándar

desarrollado por IrDA y es utilizado también sobre otras tecnologías inalámbricas

distintas de Bluetooth.

Page 56: Proyecto Bluelight

56

La plataforma principal de desarrollo del API JSR-82 es J2ME. El API ha sido

diseñada para depender de la configuración CLDC. Sin embargo existen

implementaciones para poder hacer uso de este API en J2SE [Gime04].

JSR-82 revela la pila de software Bluetooth a los desarrolladores que trabajan

sobre la plataforma Java. De especial interés está el Protocolo de Descubrimiento

de Servicios (SDP), el Perfil de Puerto Serial RFCOMM para emulación serial y el

Perfil L2CAP, los cuales proveen servicios de datos orientados a conexión con

protocolos de capas superiores.

Javax.bluetooth. En una comunicación Bluetooth existe un dispositivo que

ofrece un servicio (servidor) y otros dispositivos acceden a él (clientes).

Dependiendo de qué parte de la comunicación se deba programar, se realizarán

una serie de acciones diferentes.

Un cliente Bluetooth deberá realizar las siguientes acciones:

o Búsqueda de dispositivos. La aplicación realizará una búsqueda de los

dispositivos Bluetooth a su alcance que estén en modo conectable.

o Búsqueda de servicios. La aplicación realizará una búsqueda de servicios

por cada dispositivo.

o Establecimiento de la conexión. Una vez encontrado un dispositivo que

ofrece el servicio deseado se conectará a él.

o Comunicación. Ya establecida la conexión se podrá leer y escribir en ella.

Por otro lado, un servidor Bluetooth deberá hacer las siguientes operaciones:

o Crear una conexión servidora

Page 57: Proyecto Bluelight

57

o Especificar los atributos de servicio

o Abrir las conexiones clientes

¤ Clase LocalDevice (Dispositivo Local). La clase LocalDevice proporciona

acceso a datos del dispositivo utilizado. Esta clase tiene un constructor privado

que impide crear un objeto LocalDevice nuevo, por lo que solo se podrá obtener

una referencia del mismo con el método LocalDevice.getLocalDevice(), este

método puede lanzar una excepción BluetoothStateException si no funciona

correctamente el sistema Bluetooth.

Una vez obtenido este objeto se pueden conseguir datos importantes del teléfono

celular. Para obtener la dirección del dispositivo local (no el remoto), se usa el

método getBluetoothAddress(), para el nombre GetFriendlyName(), el tipo de

método de descubrimiento se obtiene con getDiscoverable(), este último retorna

unas constantes que están incluidas de modo estático en el objeto

DiscoveryAggent. Para modificarlo podremos usar la función setDiscoverable(),

peró puede dar un BluetoothStateException en caso de Error.

La clase LocalDevice tiene un método llamado getProperty() para obtener

información adicional, aunque es recomendable usarlo de forma estática. Este

método es parecido al System.getProperty de J2SE, y algunas de estas

propiedades son [Oran06]:

o Máximo número de dispositivos conectados

(bluetooth.connected.devices.max)

o Versión de JABWT soportada (bluetooth.api.version)

Page 58: Proyecto Bluelight

58

o Máximo número de atributos por servicio (bluetooth.sd.attr.retrievable.max)

o Posibilidad de recibir inquirys cuando se está conectando con otro

dispositivo (bluetooth.connected.inquiry.scan)

o Posibilidad de realizar inquirys cuando se está conectando con otro

dispositivo (Bluetooth.conected.inquiry)

¤ Clase DiscoveryAgent. Las búsquedas de dispositivos y servicios

Bluetooth se realizarán a través de un objeto DiscoveryAgent. Este objeto es único

y se obtendrá a través del método getDiscoveryAgent() del objeto LocalDevice.

A través de DiscoveryAgent se tiene la posibilidad de obtener un arreglo (array) de

dispositivos que el usuario haya especificado como "ya conocidos" (PREKNOWN,

quizá una lista de dispositivos "favoritos") o un arreglo de dispositivos descubiertos

en búsquedas anteriores (CACHED). Esto se hará llamando al método

retrieveDevices() pasándole DiscoveryAgent.PREKNOWN o

DiscoveryAgent.CACHED respectivamente. Este método no devolverá un arreglo

vacío si no encuentra dispositivos que coincidan con el criterio especificado, en

vez de ello devolverá null. El arreglo devuelto por este método es de objetos

RemoteDevice, los cuales, representan dispositivos remotos.

¤ Clase RemoteDevice. Permite obtener la dirección Bluetooth del

dispositivo que representa (dispositivo remoto) a través del método

getBluetoothAddress() en forma de String. También se podrá obtener el "friendly-

name" del dispositivo a través del método getFriendlyName(). Este último método

requiere un argumento de tipo booleano que permite especificar si se debe forzar

a que se contacte con el dispositivo para preguntar su "friendly-name" (true) o bien

se puede obtener un "friendly-name" que tuvo en una ocasión previa (false). El

Page 59: Proyecto Bluelight

59

método getFriendlyName() puede lanzar una java.io.IOException en caso de que

no se pueda contactar con el dispositivo o este no provea un "friendly-name".

¤ Clase UUID. La clase UUID (universally unique identifier) representa

identificadores únicos universales. Se trata de enteros de 128 bits que identifican

protocolos y servicios. En la documentación de la clase UUID se puede encontrar

una tabla con los protocolos y servicios más comunes y sus UUIDs asignadas. Se

puede crear un objeto UUID a partir de un String o de un entero largo.

¤ Interfaz DiscoveryListener. Esta interfaz le permite a la aplicación recibir

eventos de descubrimiento de dispositivos y servicios. Esta interfaz provee cuatro

métodos, dos para descubrir dispositivos y dos para descubrir servicios.

o deviceDiscovered() es llamado cada que se descubre un nuevo dispositivo

durante una búsqueda.

o inquiryCompleted() es invocado cuando una búsqueda de dispositivos ha

finalizado.

o servicesDiscovered() es llamado cada que se descubre un servicio Nuevo

durante una búsqueda de servicios.

o serviceSearchCompleted() es invocado cuando una búsqueda de servicios

ha finalizado.

o Conexión. El API javax.bluetooth permite usar dos mecanismos de

conexión: SPP (RFCOMM) y L2CAP. Mediante SPP se obtendrán datos

orientados a streams de tipo InputStream y OutputStream, mientras que en L2CAP

se enviarán y recibirán arrays de bytes. Para abrir cualquier tipo de conexión se

hará uso de la clase javax.microedition.io.Connector, en concreto se usará el

método estático open() que está sobrecargado; su versión más sencilla requiere

un parámetro que es un String el cual contendrá la URL con los datos necesarios

Page 60: Proyecto Bluelight

60

para realizar la conexión. La URL será diferente dependiendo si se desea ser

cliente o servidor de una conexión L2CAP o SPP.

Para la creación de un nuevo servicio, en caso de que se desee ser un servidor, lo

único que se debe hacer es llamar al método open() de un objeto Connection

proporcionando como parámetro una URL con características determinadas. Al

llamar la función open() esta retornará un objeto Notifier, al que se le aplicará un

interfaz determinado dependiendo del protocolo. Una vez obtenido el objeto

Notifier se ha creado el servicio, pero no se ha guardado en la SDDB ni publicado,

para ello se llama a la función acceptandOpen del objeto Notifier. Esta función

retornará un objeto Connection que usará otro interfaz dependiendo del protocolo.

Las diferentes interfaces a utilizar así como la línea de la URL que define el

protocolo, están indicadas en la tabla 3.

Tabla 3. Protocolos de comunicación Bluetooth

Protocolo Diferencia en URL Notifier Connector

RFCOMM btspp: StreamConnectionNotifier StreamConnection

L2CAP btl2cap: L2CAPConnectionNotifier L2CAPConnection

OBEX btgoep: SessionNotifier SessionConnection

Fuente: Tomado de [Oran06]

Aplicaciones Bluetooth. Una aplicación Bluetooth puede ser tanto un

servidor como un cliente (un productor de servicios o un consumidor).

Page 61: Proyecto Bluelight

61

Figura 7. Caso de uso específico de una aplicación Bluetooth

Fuente: Tomado de [Orti04]

Estos casos de uso se pueden resumir de la siguiente forma:

o Inicialización: Todas las aplicaciones Bluetooth deben inicializar primero la

pila Bluetooth.

o Cliente: Un cliente consume servicios remotos. Primero descubre

dispositivos cercanos, entonces por cada dispositivo descubierto busca

servicios de interés.

Cliente

Servidor

Inicializa 1

3

Deja de ofrecer

servicio

Ofrece servicio

Espera por clientes

y los maneja

2

Descubre

Dispositivos

cercanos y servicios

Utiliza los Servicios

descubiertos

Page 62: Proyecto Bluelight

62

o Servidor: Un servidor pone servicios a disposición de los clientes. Los

registra en la Base de Datos de Descubrimiento de Servicios (SDDB), en

efecto publicándolos. Luego espera por conexiones entrantes, las acepta a

medida que van entrando y sirve a los clientes que las realizan. Finalmente

cuando el servicio no se necesita más, la aplicación lo remueve de la

SDDB.

La figura 8 ilustra los elementos que componen una aplicación Bluetooth típica, en

este caso un MIDlet.

Figura 8. Elementos que componen típicamente un MIDlet Bluetooth.

Fuente: Tomado de [Orti04]

1

1

*

*

* 1 1 1

1

1

1

1

* *

*

Mi MIDlet

Bluetooth

Javax.microedition.midlet::MIDlet Javax.bluetooth::DiscoveryListener

Javax.microedition.io::

StreamConnection

Javax.microedition.io::

StreamConnectionNotifier

Javax.bluetooth::L2CAPConnection

Javax.bluetooth::

L2CAPConnectionNotifier

Javax.bluetooth::ServiceRecord

Javax.bluetooth::RemoteDevice

Javax.bluetooth::LocalDevice

Javax.bluetooth::DiscoveryAgent

Page 63: Proyecto Bluelight

63

5. MICROCONTROLADORES

Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de

uno o varios procesos. Por ejemplo, el controlador que regula el funcionamiento de

un horno dispone de un sensor que mide constantemente su temperatura interna

y, cuando traspasa los límites prefijados, genera las señales adecuadas que

accionan los efectores que intentan llevar el valor de la temperatura dentro del

rango estipulado.

Aunque el concepto de controlador ha permanecido invariable a través del tiempo,

su implementación física ha variado frecuentemente. Hace tres décadas, los

controladores se construían exclusivamente con componentes de lógica discreta,

posteriormente se emplearon los microprocesadores, que se rodeaban con chips

de memoria y E/S sobre una tarjeta de circuito impreso. En la actualidad, todos los

elementos del controlador se han podido incluir en un chip, el cual recibe el

nombre de microcontrolador. Realmente consiste en un sencillo pero completo

computador contenido en el corazón (chip) de un circuito integrado.

Un microcontrolador es un circuito integrado de alta escala de integración que

incorpora la mayor parte de los elementos que configuran un controlador. Dispone

normalmente de los siguientes componentes:

o Procesador o UCP (Unidad Central de Proceso).

o Memoria RAM para Contener los datos.

o Memoria para el programa tipo ROM/PROM/EPROM.

o Líneas de E/S para comunicarse con el exterior.

o Diversos módulos para el control de periféricos (temporizadores, Puertas

Serie y Paralelo, CAD: Conversores Analógico/Digital, CDA: Conversores

Digital/Analógico, etc.).

Page 64: Proyecto Bluelight

64

Figura 9. Microcontrolador

Fuente: [Propia]

5.1 Recursos comunes a todos los microcontroladores.

Al estar todos los microcontroladores integrados en un chip, su estructura

fundamental y sus características básicas son muy parecidas. Todos deben

disponer de los bloques esenciales Procesador, memoria de datos y de

instrucciones, líneas de E/S, oscilador de reloj y módulos controladores de

periféricos. Sin embargo, cada fabricante intenta enfati zar los recursos más

idóneos para las aplicaciones a las que se destinan preferentemente.

En este apartado se hace un recorrido de todos los recursos que se hallan en

todos los microcontroladores describiendo las diversas alternativas y opciones que

pueden encontrarse según el modelo seleccionado.

5.1.1 Arquitectura básica. Aunque inicialmente todos los microcontroladores

adoptaron la arquitectura clásica de von Neumann, en el momento presente se

impone la arquitectura Harvard. La arquitectura de von Neumann se caracteriza

por disponer de una sola memoria principal donde se a lmacenan datos e

µC

µP

Memoria

E/S

PER

IFÉR

ICO

S PER

IFÉRIC

OS

E/S

UC

Page 65: Proyecto Bluelight

65

instrucciones de forma indistinta. A dicha memoria se accede a través de un

sistema de buses único (direcciones, datos y control).

La arquitectura Harvard dispone de dos memorias independientes una, que

contiene sólo instrucciones y otra, sólo datos. Ambas disponen de sus respectivos

sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura

o escritura) simultáneamente en ambas memorias como se puede observar en la

figura 9.1

Figura 9.1 Arquitectura HARVARD

Fuente: Tomado de [Hena02]

Los microcontroladores más populares se encuentran, sin duda, entre las mejores

elecciones:

o 8048 (Intel). Es el padre de los microcontroladores actuales, el primero de

todos. Su precio, disponibilidad y herramientas de desarrollo hacen que

todavía sea muy popular.

o 8051 (Intel y otros). Es sin duda el microcontrolador más popular. Fácil de

programar, pero potente. Está bien documentado y posee cientos de

variantes e incontables herramientas de desarrollo.

MEMORIA DE

INSTRUCCIONES

INSTRUCCIONES

MEMORIA DE

DATOS

DATOS

UCP

UNIDAD

OPERATIVA

UNIDAD DE

CONTROL

CONTROL

DIRECCIONES

DE DATOS

DATOS

CONTROL

DIRECCIONES

INSTRUCCIONES

INSTRUCCIONES

Page 66: Proyecto Bluelight

66

o 80186, 80188 y 80386 EX (Intel). Versiones en microcontrolador de los

populares microprocesadores 8086 y 8088. Su principal ventaja es que

permiten aprovechar las herramientas de desarrollo para PC.

o 68HC11 (Motorola y Toshiba). Es un microcontrolador de 8 bits potente y

popular con gran cantidad de variantes.

o 683xx (Motorola). Surgido a partir de la popular familia 68k, a la que se

incorporan algunos periféricos. Son microcontroladores de altísimas

prestaciones.

o PIC (Microchip). Familia de microcontroladores que gana popularidad día a

día. Fueron los primeros microcontroladores RISC.

Es preciso resaltar en este punto que existen innumerables familias de

microcontroladores, cada una de las cuales posee un gran número de variantes.

Page 67: Proyecto Bluelight

67

6. DISEÑO E IMPLEMENTACIÒN

El desarrollo de este proyecto debió dividirse en dos grandes bloques, por un lado

el Software desarrollado para el dispositivo móvil, en este caso un teléfono celular,

y el hardware encargado de recibir las órdenes enviadas desde el celular y

ejecutarlas.

Figura 10. Diagrama de bloques del sistema BLUELIGHT

Fuente: [Propia]

6.1 METODOLOGÍA DE DESARROLLO

Debido al corto plazo y la complejidad del proyecto, se decidió adoptar algunas

prácticas de metodologías de desarrollo ágiles tanto para el software del celular

como el del microcontrolador, específicamente la Programación Extrema (XP).

Una de las características de XP, es que el cliente o un representante de él hace

parte del equipo de desarrollo, y aunque este proyecto no fue desarrollado para un

cliente en particular, de hecho cualquier persona puede ser un posible cliente, se

contó constantemente con las observaciones y sugerencias hechas por ingenieros

y posibles usuarios del sistema.

Dispositivo

móvil (SW)

Bluetooth Microcontrolador Carga

(Load) Bluetooth

Page 68: Proyecto Bluelight

68

Tal vez la única característica de la metodología XP que no hizo parte en el

desarrollo del proyecto fue la programación en parejas, debido a que el desarrollo

fue hecho por una sola persona.

La metodología XP fue bastante adecuada para este desarrollo, ya que permite

fácilmente hacer cambios a los requerimientos al considerar ciclos iterativos

menores de desarrollo, además se pretende ir agregando cada vez más

funcionalidades tanto a la aplicación como al hardware, de hecho, esta versión de

Bluelight es la segunda de una serie de aplicaciones que permiten hacer control

domótico desde un teléfono celular. La versión 1.0 fue dada a conocer en la

semana universitaria y permitía enviar las órdenes de encender una luz, un

ventilador y abrir una puerta a un PC que las ejecutaba haciendo uso del puerto

paralelo. La base del programa del celular es la misma usada en Bluelight Versión

2.0 lo cual demuestra una evolución del código sin perder la esencia.

6.2 SOFTWARE BLUELIGHT

El software desarrollado para el teléfono celular fue desarrollado en J2ME debido

a la gran cantidad de dispositivos móviles que la integran. A medida que se fue

desarrollando, se fueron integrando nuevas funcionalidades producto de las

sugerencias ofrecidas por posibles usuarios del sistema.

Figura 10.1 Diagrama de bloques del software Bluelight V2.0

Fuente: [Propia]

Bienvenida Ingreso Búsqueda de

dispositivos

Búsqueda de

servicios

Control

de cargas

Bluetooth

Page 69: Proyecto Bluelight

69

La aplicación consta de tres clases que la hacen completamente funcional y

modular, permitiéndole agregar más funciones a futuro para hacerla más amigable

y robusta.

La clase principal es BTMidlet (Ver figura 10.1.1), la cual es heredera de MIDlet e

implementa las interfaces CommandListener,ItemStateListener y

ConnectionListener. Es en esta clase donde se crean todas las pantallas del

sistema con las que interactúa el usuario.

Figura 10.1.1 Clase BTMidlet

Fuente: [Propia]

HiloConexión (Ver figura 10.1.2) es una clase heredera de Thread e implementa la

interfaz DiscoveryListener. Aquí ocurre todo el proceso de conexión del dispositivo

Page 70: Proyecto Bluelight

70

con el hardware, desde la búsqueda de dispositivos y servicios Bluetooth hasta el

envío de órdenes por medio del objeto HiloConexion creado en la clase BTMidlet.

Figura 10.1.2 Clase HiloConexion

Fuente: [Propia]

La clase Registro (Ver figura 10.1.3) fue implementada para una funcionalidad que

no estaba planeada al inicio del proyecto, pero que debido a las sugerencias de

posibles usuarios a medida que se desarrollaba el software permitió agregársela.

Lo que se hace por medio de esta clase es guardar en una pequeña “base de

datos” el estado actual de las luces lo cual permite establecer una intensidad para

cada luz y en caso de que alguien más modifique su estado, se podrán restablecer

de nuevo las intensidades que se guardaron en el celular.

Page 71: Proyecto Bluelight

71

Figura 10.1.3 Clase Registro

Fuente: [Propia]

La clase LocalDevice (Ver figura 10.1.4) hace referencia al dispositivo Bluetooth

local y proporciona acceso a datos del o propiedades del mismo.

public LocalDevice dispositivoLocal;

dispositivoLocal = LocalDevice.getLocalDevice();

LocalDevice provee métodos para recibir información acerca del dispositivo local y

para tener acceso al gestor Bluetooth.

o getBluetoothAddress() retorna la dirección Bluetooth.

o getDeviceClass() retorna la clase de dispositivo.

o getFriendlyName() retorna el nombre (friendly name) del dispositivo

Bluetooth.

Page 72: Proyecto Bluelight

72

o getRecord() retorna uno de los registros de servicios para la conexión

Bluetooth especificada.

o updateRecord() actualiza el registro de servicio SDDB para el

ServiceRecord.

o getDiscoverable() retorna el estado de descubrimiento del dispositivo.

o setDiscoverable() Pone el estado de descubrimiento del dispositivo.

o getDiscoveryAgent() retorna una referencia de DiscoveryAgent.

o getProperty() retorna una de las propiedades del dispositivo.

Figura 10.1.4 Clase LocalDevice

Fuente: [Orti04]

La clase DiscoveryAgent (Ver figura 10.1.5) es la que permite realizar la búsqueda

de dispositivos y servicios Bluetooth. Este objeto es único y se obtendrá a través

del método getDiscoveryAgent() del objeto LocalDevice.

public DiscoveryAgent da;

da = dispositivoLocal.getDiscoveryAgent();

Page 73: Proyecto Bluelight

73

Las aplicaciones cliente que deseen ser notificadas cuando un dispositivo o

servicio ha sido encontrado deberán implementar y registrar la interfaz

DiscoveryListener.

La clase que implemente DiscoveryListener deberá implementar los métodos

propios de la interfaz. Para el descubrimiento de dispositivos son:

public void deviceDiscovered(RemoteDevice dispRemoto, DeviceClass claseDisp)

public void inquiryCompleted(int motivoFinalización)

Cada vez que se descubre un dispositivo se llama al método deviceDiscovered()

junto con dos argumentos, el primero es un objeto de la clase RemoteDevice que

representa al dispositivo encontrado; el segundo argumento permitirá determinar

el tipo de dispositivo encontrado.

inquiryCompleted() es llamado cuando la búsqueda de dispositivos ha finalizado

junto con un argumento entero indicando el motivo de la finalización. Este

argumento podrá tomar los valores: DiscoveryListener.INQUIRY_COMPLETED si

la búsqueda ha concluido con normalidad, DiscoveryListener.INQUIRY_ERROR si

se ha producido un error en el proceso de búsqueda, o

DiscoveryListener.INQUIRY_TERMINATED si la búsqueda fue cancelada.

Para el descubrimiento de servicios los dos métodos son:

servicesDiscovered(int transID, ServiceRecord[] servRecord)

serviceSearchCompleted(int transID, int respCode)

Cada que se descubre un servicio se llama a servicesDiscovered() con dos

argumentos; el primero (transID) identifica el proceso de búsqueda para saber cuál

fue la que lo invocó ya que se pueden hacer búsquedas simultáneas y el segundo

Page 74: Proyecto Bluelight

74

(servRecord) es un arreglo de objetos ServiceRecord. Un objeto ServiceRecord

describe las características de un servicio Bluetooth, en otras palabras es el

servicio como tal.

serviceSearchCompleted() es llamado cuando termina la búsqueda de servicios.

Consigo vienen dos argumentos que indican cual fue el proceso de búsqueda que

finalizó (transID) y el motivo (respCode) por el cual terminó.

Para comenzar una nueva búsqueda de dispositivos se debe llamar al método

startInquiry() del objeto DiscoveryAgent. Este método requiere dos argumentos, el

primero es un entero que especifica el modo de conectividad que deben tener los

dispositivos a buscar; este valor deberá ser DiscoveryAgent.GIAC o bien

DiscoveryAgent.LIAC, el segundo argumento es un objeto que implemente

DiscoveryListener. A través de este último objeto serán notificados los dispositivos

que se vayan descubriendo. Para cancelar la búsqueda se puede usar el método

cancelInquiry() [Gime04].

da.startInquiry(int modoConectividad, DiscoveryListener claseQueEscucha);

Para comenzar una nueva búsqueda de servicios se llamará al método

searchServices() del objeto DiscoveryAgent. Este método requiere cuatro

argumentos, el primero es un arreglo (array) de enteros con el que se

especificarán los atributos de servicio en los que se está interesado; en la interfaz

ServiceRecord, los servicios son descritos a través de atributos que son

identificados numéricamente, este arreglo contendrá los ID de estos atributos. El

segundo argumento es un arreglo de identificadores de servicio que permite

especificar los servicios que se requieren. El tercer argumento es el dispositivo

remoto sobre el que se va a realizar la búsqueda. Por último se pasará un objeto

que implemente DiscoveryListener que será usado para notificar los eventos de

búsqueda de servicios.

Page 75: Proyecto Bluelight

75

da.searchServices(int[] attrSet, UUID[] uuidSet, RemoteDevice dispRemoto,

DiscoveryListener claseQueEscucha)

Cada servicio tiene varios atributos como nombre, descripción, etc., y si se está

interesado en conocer uno o más de ellos, se tendrán que especificar en la

búsqueda agregándolos en el arreglo attrSet, de lo contrario se podrá usar null

teniendo en cuenta que si luego se desea saber por ejemplo el nombre del servicio

indicando su atributo, arrojará un NullPointerException ya que en la búsqueda no

se especificó.

Page 76: Proyecto Bluelight

76

Figura 10.1.5 Clase DiscoveryAgent e interfaz DiscoveryListener

Fuente: [Orti04]

Una instancia de la clase RemoteDevice (Ver figura 10.1.6) representa un

dispositivo Bluetooth remoto y sus métodos son similares a los que provee

LocalDevice, algunos de estos son:

Page 77: Proyecto Bluelight

77

o getBluetoothAddress() retorna la dirección Bluetooth.

o getFriendlyName() retorna el nombre (friendly name) del dispositivo

Bluetooth.

o getRemoteDevice() retorna el RemoteDevice que corresponde a la

conexión Bluetooth especificada.

Figura 10.1.6 Clase RemoteDevice

Fuente: [Orti04]

Para la conexión, la aplicación Bluelight V2.0 deberá ser cliente ya que el módulo

BlueSMIRF será quien ofrezca el servicio de puerto serie. El protocolo a usar será

el de emulación de puerto serie RS-232.

Para un cliente será necesario crear un objeto de tipo StreamConnection y de ser

necesario la recepción y envío de datos se crearán también objetos de tipo

InputStream y OutputStream.

Page 78: Proyecto Bluelight

78

StreamConnection conexion;

InputStream is;

OutputStream os;

Las conexiones deberán ejecutarse en otro hilo (Thread) para no afectar la

aplicación. Un cliente se crea llamando a Connector.open() con el String apropiado

para la conexión cliente. Este String empieza con el prefijo de protocolo “btspp://”.

Un objeto de tipo StreamConnection es retornado cuando se abre una conexión

cliente (Cuando se hace la petición al servidor).

conexion = (StreamConnection)

Connector.open("btspp://direcciónServidor:canalServicio");

Cuando se crea la conexión, los objetos OutputSteam e InputStream pueden

usarse para enviar y recibir datos del servidor con los métodos write() & read().

os = conexion.openOutputStream();

is=conexion.openInputStream();

La figura 10.1.7 muestra el diagrama de clases del software del celular.

Page 79: Proyecto Bluelight

79

Figura 10.1.7 Diagrama de clases del software Bluelight

Fuente: [Propia]

El programa inicia mostrando una pantalla de Bienvenida por medio de una

pantalla de Alerta (Alert) durante 2 segundos.

Figura 10.1.8 Pantalla de bienvenida

*

1

1

1

*

*

1 1 *

*

1

1 1

*

1

<<interface>>

CommandListener <<interface>>

ItemStateListener <<interface>>

ItemStateListener

BTMidlet

Registro

HiloConexion

LocalDevice

RemoteDevice

ServiceRecord

DiscoveryAgent

<<interface>>

DiscoveryListener

Thread

MIDlet

StreamConnection

StreamConnectionNotifier

Page 80: Proyecto Bluelight

80

Fuente: [Propia]

Pasados los 2 segundos, se muestra un formulario (Form) con una marquesina

(Ticker) desplazándose en la parte superior, dos campos de texto (TextField) para

el nombre de usuario y la contraseña y dos comandos (Command), 1 para salir de

la aplicación y otro para validarse en el sistema.

Figura 10.1.9 Formulario de ingreso

Fuente: [Propia]

Si la contraseña es incorrecta, se mostrará una alerta (Alert) con un mensaje de

error indicando que el nombre de usuario y/o la contraseña son inválidos. Esta

Page 81: Proyecto Bluelight

81

alerta no estará por un tiempo determinado, sino que permanecerá en pantalla

hasta que se presione el comando Done para que regrese al formulario de

ingreso.

Figura 10.1.10 Alerta de Error por nombre de usuario y/o contraseña no válidos

Fuente: [Propia]

Si por el contrario, el nombre de usuario y la contraseña fueron ingresados

correctamente, se iniciará la búsqueda de dispositivos Bluetooth que se

encuentren en un radio de entre 10 y 15 metros aproximadamente. Se debe tener

en cuenta que solo se encontrarán los dispositivos que tengan su Bluetooth

activado y detectable. Durante la búsqueda, se muestra en pantalla una Alerta

(Alert) por 20 segundos. Este tiempo puede variar si la búsqueda tarda más de lo

estipulado como sucede en algunos móviles que dedican más tiempo que otros

buscando dispositivos.

Page 82: Proyecto Bluelight

82

Figura 10.1.11 Pantalla de búsqueda de dispositivos

Fuente: [Propia]

Si durante la búsqueda no se encuentra ningún dispositivo Bluetooth, se mostrará

una alerta (Alert) indicándolo, este mensaje permanecerá hasta que se presione el

comando Done que regresará al usuario al formulario de ingreso.

Figura 10.1.12 Alerta de Error si no se encuentran dispositivos

Fuente: [Propia]

Page 83: Proyecto Bluelight

83

Una vez se empieza a buscar dispositivos, los nombres (Friendly Names) de estos

se van adicionando a una pantalla de tipo Lista (List) a medida que van siendo

encontrados y cuando se termina la búsqueda, esta se muestra como una lista

exclusiva, o sea que solo se podrá elegir un elemento de ella.

Figura 10.1.13 Lista de Dispositivos encontrados

Fuente: [Propia]

De los dispositivos mostrados en la lista, el usuario debe elegir el dispositivo cuyo

nombre sea BLUELIGHT ya que este es el nombre (Friendly Name) que se le ha

dado al Bluetooth del módulo BlueSMIRF para ser identificado en una red, por

último debe presionar el comando (Command) Conectar para iniciar una

búsqueda, esta vez de servicios que ofrece BLUELIGHT, específicamente el

servicio de puerto serie identificado con el UUID 0x1101. Durante la búsqueda se

muestra una alerta (Alert) durante 20 segundos máximo indicándole al usuario que

la búsqueda está en proceso.

Page 84: Proyecto Bluelight

84

Figura 10.1.14 Pantalla de búsqueda de servicios

Cuando el servicio sea encontrado, se mostrará una alerta indicando que se ha

encontrado el servicio de puerto serie y que intentará establecer la conexión

Bluetooth cliente con el módulo, para lo cual el celular solicitará la confirmación del

usuario para realizarla.

Figura 10.1.15 Pantalla de servicio encontrado

Fuente: [Propia]

Page 85: Proyecto Bluelight

85

Figura 10.1.16 Pantalla de confirmación para establecer conexión cliente

Fuente: [Propia]

Mientras se realiza la conexión, una Alerta le indicará al usuario que espere

mientras se establece la conexión.

Figura 10.1.17 Mensaje de espera mientras se establece la conexión

Fuente: [Propia]

Page 86: Proyecto Bluelight

86

Si por algún motivo no se puede establecer conexión ya sea porque el celular y el

módulo se alejan demasiado o si BLUELIGHT está desactivado en ese momento,

aparecerá una pantalla de Error durante 3 segundos indicándole al usuario que

BLUELIGHT puede estar apagado.

Figura 10.1.18 Pantalla de error en la conexión con BLUELIGHT

Fuente: [Propia]

Si finalmente se realiza la conexión con el módulo, aparecerá una pantalla de tipo

Lista múltiple en la que se podrá seleccionar una, dos o las tres luces para reg ular

la intensidad de cada una de ellas. Dentro de los comandos posibles de esta

pantalla, está el de Salir para finalizar la aplicación, OK para mostrar la pantalla

con los controles de intensidad de las luces seleccionadas y finalmente Último

Estado para seleccionar como su nombre lo indica el estado en que quedaron las

luces la última vez que se ejecutó la aplicación.

Page 87: Proyecto Bluelight

87

Figura 10.1.19 Pantalla de selección de luces

Fuente: [Propia]

Cualquiera de las dos opciones para controlar la intensidad (OK y Último Estado)

llevará a la pantalla de control en la que aparecerán unos controles (Gauges) que

permitirán seleccionar en un rango de 0 a 30 la intensidad deseada de cada una

de las luces seleccionadas. En el ejemplo de la figura 9.1.17 se ha escogido una

intensidad de 15 (mitad de la intensidad) para la luz exterior, de 30 (intensidad

máxima) para la luz de la sala principal, y una intensidad de 1 para la luz del baño.

Page 88: Proyecto Bluelight

88

Figura 10.1.20 Pantalla de control de luces

Fuente: [Propia]

Con el comando atrás se retornará a la lista de luces disponibles para controlar.

Si en algún momento de la aplicación se presiona el Comando Salir, se mostrará

una alerta solicitando al usuario si desea guardar el estado en el que dejó las

luces para que la próxima vez que ejecute la aplicación pueda seleccionar esas

mismas intensidades con el comando Último Estado.

Page 89: Proyecto Bluelight

89

Figura 10.1.21 Pantalla de petición para guardar el estado actual de las luces

Fuente: [Propia]

Por último, se muestran los créditos con los nombres de los desarrolladores.

Figura 10.1.22 Créditos del software Bluelight

Fuente: [Propia]

Page 90: Proyecto Bluelight

90

6.3 HARDWARE

Los elementos centrales del hardware son el módulo Bluetooth y el

microcontrolador; el primero se encarga de recibir vía Bluetooth la información

enviada por el usuario desde el celular (orden), y entregársela al módulo USART

del microcontrolador por medio del protocolo RS-232 para que este la procese y la

ejecute manejando la etapa de potencia que permite el control sobre la carga, en

este caso las luminarias.

Figura 10.2 Diagrama de bloques del hardware Bluelight

Fuente: [Propia]

Figura 10.2.1 Hardware Bluelight

Fuente: [Propia]

Módulo

Bluetooth

Cruce

por cero

Microcontrolador Etapa de

potencia

Page 91: Proyecto Bluelight

91

6.3.1 PIC16F876A

El PIC16F876A es un microcontrolador de 8 bits empaquetado en un integrado de

28 pines y es compatible con los dispositivos PIC16C5X, PIC12CXXX y

PIC16C7X. Este dispositivo es ideal para el sistema Bluelight pues cuenta con 22

pines de entrada/salida suficientes para manejar las señales provenientes del

módulo Bluetooth por medio de su módulo USART, el detector de cruce por cero y

controlar 3 diferentes cargas. El sistema puede ser aún más robusto si se hiciera

uso de otras características propias del PIC como su módulo conversor

análogo/digital.

Figura 10.2.2 PIC16F876A

Fuente [http://www.microchip.com]

o Características

o Tipo de memoria FLASH

o Memoria de programa de 14KB

o 368 Bytes de RAM

o 256 bytes de memoria EEPROM

o Conversor análogo/digital

Page 92: Proyecto Bluelight

92

o Módulo USART

o Set de 35 instrucciones

o 3 temporizadores

6.3.2 Módulo Bluetooth BlueSMIRF Silver V2. El BlueSMIRF Silver V2 es un

módulo Bluetooth inalámbrico serial de la empresa SprkFun Electronics. Este

módem trabaja como un puente serial RS-232 (RX/TX). Cualquier flujo de datos

serial (Stream) de 9600 a 115200bps puede ser enviado directamente por el

microcontrolador hacia dispositivo objetivo. La unidad puede ser alimentada de

3.3V hasta 6V y todos sus pines de señal toleran estos voltajes.

Figura 10.2.3 Módulo BlueSMIRF Silver V2

Fuente: Tomado de [http://www.sparkfun.com]

Especificaciones

o Módem de Radio Bluetooth de clase 1 aprobado por la FCC.

o Compatible con todos los productos Bluetooth que soporten SPP.

o Vinculación robusta tanto en integridad como en distancia de transmisión

(30m).

o Bajo consumo de corriente: 25mA aprox.

o Esquema de salto de frecuencia resistente – Opera en severos ambientes

de RF como WiFi, 802.11g y Zigbee.

Page 93: Proyecto Bluelight

93

o Conexión encriptada.

o Frecuencia: 2.4 ~ 2.524 GHz.

o Voltaje de operación: 3.3V – 6V.

o Comunicaciones serial: 2400-115200bps.

o Temperatura de operación: -40 ~ +70ºC.

o Antena integrada.

Dimensiones

o 51.5x15.8x5.6mm

6.3.3 Detector de Cruce x cero. El detector de cruce por cero le permite al

microcontrolador saber cuándo hay un cambio de ciclo en la señal de línea, para

así calcular en qué momento deberá ser disparado cada uno de los Triacs que

controlan las tres cargas. Fue creado fácilmente usando la interrupción por cambio

de estado en el pin RB7 del microcontrolador PIC y solo un componente externo,

una resistencia, para limitar la corriente en el PIC. En Colombia el voltaje de línea

eficaz Vrms=116.2VAC, y el voltaje pico de línea es 164.3V. Al seleccionar una

resistencia de 5MΩ, la corriente pico Ipeak=164.3V/5MΩ=32.86µA lo cual está

bien para la capacidad de corriente de un pin E/S del microcontrolador PIC.

Diodos de protección a la entrada (diseñados dentro de los pines del PIC) regulan

cualquier voltaje mayor a Vdd o menos a Vss. De esta forma, cuando el voltaje AC

se encuentra en el ciclo negativo, el pin RB7 se mantendrá con un voltaje entre

Vss – 0.6V. Esto se interpretará como un cero lógico. Cuando el voltaje AC se

eleva por encima del valor de alimentación del PIC, el valor lógico en RB7 será „1‟.

Page 94: Proyecto Bluelight

94

Figura 10.2.4 Señal de cruce por cero a la entrada del microcontrolador

Fuente: [Propia]

6.3.4 Etapa de potencia. Esta etapa está conformada por un optoacoplador

MOC3010 encargado de aislar las señales de corriente alterna del

microcontrolador quien por medio de este disparará un Triac que conducirá cierta

parte de cada semi-ciclo de corriente alterna que alimenta la carga dependiendo

de la intensidad deseada.

6.3.5 Descripción del software del microcontrolador. Una vez el

microcontrolador es energizado, este configura su módulo Receptor/Transmisor

Síncrono/Asíncrono Universal (USART) y habilita la interrupción por recepción en

USART para que espere hasta que se reciba el primer dato enviado desde el

celular.

Page 95: Proyecto Bluelight

95

START bank1

movlw b'10000101' ;Rate de 64 para TMR0

movwf OPTION_R

movlw b'10000000' ;RB7 entrada para Interrupción por

;cambio de estado en cruce por cero

movwf PORTB

bsf PIE_1,5 ;Habilita interrupción por recepción en

;USART (RCIE = 1)

bcf TXSTA_,4 ;Configura USART para operación

;asíncrona (SYNC = 0)

bsf TXSTA_,2 ;High Baud Rate (BRGH = 1)

movlw .64 ;BAUD RATE = 19200

movwf SPBRG_

bank0

bsf RCSTA,7 ;Habilita USART (SPEN = 1) configura

;RC7 como IN (RX) y RC6 como OUT (TX)

INICIO

Configurar puertos

y módulo USART

Habilitar Interrupción por

recepción en USART

¿Buffer de

recepción lleno?

Leer Buffer

No

Si

Page 96: Proyecto Bluelight

96

bsf RCSTA,4 ;Habilita recepción continua en USART

;(CREN = 1)

movlw 0C0h ;Habilita GIE y PEIE Para primera

;interrupción por recepción en USART

movwf INTCON

askAgain btfss PIR1,5 ;¿Recepción en USART? Buffer de

;recepción lleno?

goto $-1 ;No

call readBuffer ;Si: Lee Buffer de recepción

goto askAgain

Una vez se recibe esta información y se genera la interrupción, se lee el buffer del

USART por medio del registro RCREG y se deshabilita la interrupción por

recepción en el módulo serial para dejar habilitada solo la interrupción por cambio

de estado la cual será producida por el detector de cruce por cero.

Interrupción

¿Buffer de

recepción lleno?

Leer Buffer

Si

Atender

Interrupción de

cruce por cero

No

Deshabilitar interrupción de

recepción en USART

Habilitar interrupción por

cambio de estado en PORTB

Retorne

Page 97: Proyecto Bluelight

97

ORG 4h ;Vector de interrupciones

btfss PIR1,5 ;¿Recepción en USART?

goto ZERO_CROSS ;No: Interrupción de cruce por cero

call readBuffer ;Si: Lee Buffer

INT btfsc INTflags,0 ;¿Primera interrupción por

;recepción en USART?

goto ZERO_CROSS ;No: Fue interrupción por cambio de

;estado

bsf INTflags,0 ;Si: Pone un 1 en bandera de

;recepción por USART

Movlw 088h ;Habilita interrupción por cambio de

;estado y deshabilita interrupción

;por recepción de USART

movwf INTCON

retfie ;Retorna de la interrupción

Cuando ocurre una interrupción de cruce por cero el microcontrolador espera un

tiempo mínimo que tarda el Triac en empezar a conducir tanto en el ciclo positivo

(0.5mS) como en el negativo (0.8mS). Debe tenerse en cuenta que el triac

tampoco conducirá si se dispara próximo al siguiente cruce por cero (menos de

0.88mS en el ciclo positivo y 1.1mS en el negativo antes del cruce) por lo que este

tiempo también debe considerarse. Después de este tiempo, se leen tres registros

que indican si cada una de las luces debe ser encendida y a que intensidad. De

acuerdo a estos datos, el microcontrolador esperará el tiempo necesario antes de

disparar cada uno de los Triacs y así manejar diferentes intensidades en cada luz.

Page 98: Proyecto Bluelight

98

Interrupción de

cruce por cero

Espere 0,8µS

Si No

Habilita de nuevo Interrupción

por cambio de estado

¿Semi-ciclo

negativo?

Espere 0,5µS

Carga temporizador para que se

desborde en 205,6µS

Carga temporizador para que se

desborde en 231,4µS

¿Porcentaje de

luz exterior es 0?

Poner en 1 bandera

de luz exterior

Si No

¿Es tiempo de

disparar Triac?

No

¿Porcentaje de

luz sala es 0?

Poner en 1 bandera

de luz exterior

Encender luz

exterior

Si

Page 99: Proyecto Bluelight

99

ZERO_CROSS clrf LIGHTS ;Limpia banderas de luces

btfsc PORTB,7 ;¿Ciclo negativo?

goto up ;No: Flanco de subida

call _0.8mS ;Si: Tiempo que tarda el Triac

;en conducir en ciclo negativo

movlw .240

movwf TMR0 ;Carga TMR0 para que se

;desborde en 205.6uS

goto goON

up call _0.5mS ;Tiempo que tarda el Triac en

;conducir en ciclo positivo

movlw .238

movwf TMR0 ;Carga TMR0 para que se

;desborde en 231.4uS

goON movfw PORTB

movlw 88h

movwf INTCON ;Habilita interrupción por

;cambio de estado

movlw .30

movwf ciclo

ask decfsz light0,0 ;¿Cero porcentaje de luz exterior?

goto ilumine0 ;No: Vaya a encender luz exterior

Page 100: Proyecto Bluelight

100

bsf LIGHTS,0 ;Si: Ponga en uno bandera de luz

;exterior indicando que no se hará

;nada más con esa luz

goto zero1 ;Vaya a preguntar por luz sala

ilumine0 decf light0,0 ;Mueve valor de light0 a W

xorwf ciclo,0

btfss STATUS,2 ;¿Listo para disparar el Triac?

goto zero1 ;No: Pregunte por la luz sala

btfsc LIGHTS,0 ;Si: ¿Ya lo disparó antes?

goto zero1 ;No: Pregunte por la luz sala

bsf LIGHTS,0 ;Si: Ponga en uno bandera de luz

;exterior indicando que no se hará

;nada más con esa luz

bsf PORTB,0 ;Encienda luz exterior

movlw .50

call _uS ;Tiempo de pulso del Gate

bcf PORTB,0 ;Termine el disparo del Triac

zero1 decfsz light1,0 ;¿Cero porcentaje de luz sala?

goto ilumine1 ;No: Vaya a encender luz sala

bsf LIGHTS,1 ;Ponga en uno bandera de luz1

;indicando que no se hará nada

;más con esa luz

goto zero2 ;Vaya a preguntar por luz baño

Page 101: Proyecto Bluelight

101

La cantidad de intensidades posibles son 30, por lo tanto, cada semiciclo debió ser

dividido en este número para hallar el tiempo de cada intensidad, esto se logró de

acuerdo a los siguientes cálculos:

Tciclo=8.34mS (Tiempo de cada semi-ciclo de la señal de AC)

TdisPos=0.5mS (Tiempo de espera mínimo antes de disparar el triac en el ciclo

positivo)

TdisNeg=0.8mS (Tiempo de espera mínimo antes de disparar el triac en el ciclo

negativo)

TproPos=0.88mS (Tiempo prohibido de disparo del triac antes del próximo cruce

en el ciclo positivo)

TproNeg=1.1mS (Tiempo prohibido de disparo del triac antes del próximo cruce en

el ciclo negativo)

ValorInt (Valor de la intensidad entre 0 y 30)

ThabilPos=Tciclo-(TdisPos+TproPos)=8.34mS-(0.5mS+0.88mS)=6.96mS (Tiempo

habilitado para el control de las intensidades en el ciclo positivo)

ThabilNeg=Tciclo-(TdisNeg+TproNeg)=8.34mS-(0.8mS+1.1mS)=6.44mS (Tiempo

habilitado para el control de las intensidades en el ciclo negativo)

TminIntPos=ThabilPos/30=6.96mS/30=232µS (Tiempo de conducción de la

mínima intensidad en el ciclo positivo)

Page 102: Proyecto Bluelight

102

TminIntNeg=ThabilNeg/30=6.44mS/30=214.6µS (Tiempo de conducción de la

mínima intensidad en el ciclo negativo)

TintPos=ValorInt*TminIntPos (Tiempo total de la intensidad deseada en ciclo

positivo)

TintNeg=ValorInt*TminIntNeg (Tiempo total de la intensidad deseada en ciclo

negativo)

En la figura 10.2.5 se observa el ciclo positivo divido en 30 sin tener en cuenta el

TdisPos (Tiempo de espera mínimo antes de disparar el triac en el ciclo positivo) y

el TproPos (Tiempo prohibido de disparo del triac antes del próximo cruce en el

ciclo positivo).

Page 103: Proyecto Bluelight

103

Figura 10.2.5 División de tiempos de la señal de línea

Fuente: [Propia]

Si se deseara por ejemplo una intensidad de 7, el disparo del Triac deberá

hacerse en el TintPos (Tiempo total de la intensidad deseada en ciclo positivo) y

TintNeg (Tiempo total de la intensidad deseada en ciclo negativo).

Page 104: Proyecto Bluelight

104

Figura 10.2.6 Control de una luz a una intensidad de 7.

Fuente: [Propia]

Page 105: Proyecto Bluelight

105

6.4 PRUEBAS Y AJUSTES

Durante las primeras pruebas del módulo Bluetooth BlueSMIRF, se logró hacer

una conexión entre este y una dongle Bluetooth USB conectada al computador

desde bluesoleil e hyperterminal, pero cuando se intentó enviar el comando AT

+++ para configurarlo, no se recibía la respuesta OK por parte del módulo. Esto se

debía a que el módulo solo puede ser configurado con comandos AT enviados

directamente por el puerto RS-232 y no vía Bluetooth.

Una vez configurado el BlueSMIRF, se realizó una búsqueda de dispositivos

desde el computador y desde el celular y ambos lo detectaron. Hecho esto, se

decidió hacer una pequeña aplicación en para el celular que buscara dispositivos

Bluetooth y se conectara al servicio de puerto serie que ofrece el módulo.

Después de lograr conectarse desde el celular al módulo, se desarrolló otra

aplicación que enviara datos desde el móvil al BlueSMIRF por medio de un

Gauge, los datos iban del 0 al 10, además se conectó el módulo al puerto serial

del computador y se hizo una conexión al COM1 desde el hyperterminal para

recibir los datos enviados desde el celular y mostrarlos en pantalla.

Se debe tener en cuenta a la hora de hacer la petición de conectarse al módulo, si

no se usa la URL de servicio retornada por el servidor sino que se hace

directamente usando la dirección del dispositivo Bluetooth, se debe especificar el

canal al cual hará la petición de conectarse. En cuanto al computador, la

aplicación que vaya a recibir la información enviada debe conectarse al COM con

el que se estableció la conexión para poder leer los datos recibidos.

Se decidió recibir estos datos en un microcontrolador haciendo uso del USART del

mismo, por lo cual se desarrolló un programa en ensamblador que muestra por un

puerto el dato recibido serialmente desde el módulo BlueSMIRF. No confundir el

Page 106: Proyecto Bluelight

106

funcionamiento de los pines RX y TX del módulo, el primero recibe datos para

enviar vía Bluetooth y el segundo transmite datos recibidos por el módulo vía

Bluetooth.

Por último, se probó el dimmer con un bombillo de 110VAC y un Triac, logrando

variar la intensidad con cambios un poco bruscos, por lo cual se decide aumentar

la cantidad de posibles intensidades de 10 a 30. Uno de los problemas

encontrados es que el Triac tarda mucho tiempo en poder conducir, razón por la

cual se consiguió un Triac de compuerta sensible que disminuye el ángulo de

disparo del mismo.

Uno de los grandes problemas encontrados durante las pruebas, es el envío de

datos desde el microcontrolador al celular, pues estos variaban en ocasiones al

parecer por la distancia y los obstáculos, incluso llegaron a un puto de quedarse

en ciclos infinitos al no quedar sincronizados para el envío y recepción de la

información.

A última hora se le agregó una nueva función a la aplicación del celular, la cual

permite crear un nuevo usuario si es la primera vez que se ejecuta el programa y

una vez creado, los datos del nombre usuario y su contraseña quedarán

guardados en una pequeña base de datos del celular.

Page 107: Proyecto Bluelight

107

RESULTADOS FINALES

Se desarrollaron dos versiones del software Bluelight para el celular

completamente funcionales, la versión 1.0 permite ejercer control on/off desde un

celular a un hardware conectado a un computador por medio de su puerto

paralelo, específicamente una cantonera, un bombillo y un ventilador. La

aplicación del computador que lleva como nombre BluePC fue desarrollada en C#

debido a que al ser un lenguaje orientado a componentes facili tó su desarrollo y la

interacción con periféricos y puertos virtuales.

La versión 2.0 permite enviar órdenes directamente al hardware gobernado por un

microcontrolador PIC que regula la intensidad de tres lámparas incandescentes de

acuerdo al nivel seleccionado por el usuario desde su dispositivo móvil. El

lenguaje usado para la programación del microcontrolador fue ensamblador

haciendo uso de la herramienta de desarrollo MPLAB.

Se desarrollaron dos tarjetas para el hardware de cada una de las

aplicaciones ya que para la segunda versión se suprimió el uso del computador

por un microcontrolador y aunque el control también es on/off, la regulación de

intensidad se hace controlando la cantidad tiempo durante la cual las cargas (las

lámparas) reciben alimentación de voltaje.

Se implementó y modificó el diseño de una fuente de 5 voltios sin

transformador para la alimentación del hardware integrada en la misma tarjeta de

todo el sistema.

Page 108: Proyecto Bluelight

108

CONCLUSIONES

El desarrollo de este proyecto abre las puertas a nuevas tecnologías e

ideas para el desarrollo de dispositivos domóticos, ya que es el primero de su tipo

desarrollado en la Institución Universitaria Antonio José Camacho fusionando

áreas como las telecomunicaciones haciendo uso del protocolo Bluetooth, la

electrónica y el desarrollo de software, específicamente para dispositivos móviles.

Para mejorar el corto alcance del Bluetooth Clase 2 del celular que es de

aproximadamente 10 metros, debió usarse un módulo Bluetooth Clase 1 de la

empresa SparkFun que permite hacer control a una distancia de 25 metros con

línea de vista.

El uso del protocolo RFCOMM hizo aún más fácil la comunicación con el

microcontrolador pues este emula el protocolo de puerto serie RS-232.

Para un mejor control de las luces y un mayor número de intensidades, es

necesario usar un Triac de compuerta (gate) sensitiva, ya que se puede disparar

en un ángulo de disparo menor.

El uso de la tecnología Bluetooth no genera ningún tipo de costo al usuario

debido a que se usa una banda de frecuencia sin licencia para aplicaciones

médicas, científicas e industriales.

La aplicación Bluelight V2.0 solo podrá ser ejecutada en equipos móviles

con soporte Java perfil MIDP 2.0, configuración CLDC 1.1 y que posean

conectividad Bluetooth.

Page 109: Proyecto Bluelight

109

Los entornos de desarrollo usados para el desarrollo del software del celular

y del microcontrolador son el NetBeans IDE 6.5 y el MPLAB 8.30 respectivamente.

Por un lado el NetBeans provee librerías para el desarrollo de aplicaciones en

J2ME, además de la herramienta Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC

que es una plataforma de emulación de dispositivos inalámbricos. Por otro lado, el

MPLAB es un software provisto por la empresa Microchip y permitió hacer la

depuración del software junto con el hardware por medio del programador ICSP.

Una ventaja en común es que ambas aplicaciones son de libre distribución, por lo

cual no se requiere ningún tipo de licencia.

Page 110: Proyecto Bluelight

110

BIBLIOGRAFÍA

[Arph06] ARPHEAN, Nih. Tutorial para aplicaciones móviles J2ME con NetBeans y

Mobility Pack. [En línea]. Publicado en Abril de 2006. Disponible en:

<http://wainu.ii.uned.es:8081/WAINU/canal-programacion/tutoriales/java/tutorial-

j2me.pdf> [Consultado el 10 de Junio de 2008].

[BLUE08] Bluetooth SIG, Inc. Bluetooth, Descripción general. [En línea]. 2008.

Disponible en: <http://spanish.bluetooth.com> [Consultado el 12 de Mayo de

2008].

[Borc04] BORCHES Juzgado, Pedro. JAVA 2 Micro Edition Soporte Bluetooth. [En

línea]. 2004. Disponible en:

<http://www.it.uc3m.es/celeste/docencia/j2me/tutoriales/bluetooth/EstudioTecnolog

ico1_0.pdf> [Consultado el 20 de Mayo de 2008].

[Buen07] BUENAVENTURA, P; Perdomo, C. Sistema de control lumínico para una

vivienda por acceso remoto. Proyecto de grado. Institución Universitaria Antonio

José Camacho. Santiago de Cali, 2007.

[Cava07] CAVALER Ghisi, Bruno. Marge: Framework para integración de

aplicaciones JAVA vía Bluetooth. [En línea]. 2007. Disponible en:

<https://marge.dev.java.net/source/browse/*checkout*/marge/trunk/docs/pt-BR/tcc-

marge.pdf?rev=180> [Consultado el 05 de Agosto de 2008].

[Dide04] DIDELES, Myra. Bluetooth: A Technical Overview. [En línea]. 2004.

Disponible en: < http://www.acm.org/crossroads/xrds9-4/blue.html> [Consultado el

26 de Marzo de 2009]

Page 111: Proyecto Bluelight

111

[EBLU09] EXPLÍCAME, “Explícame: Qué significa Bluetooth”. [En línea].

Disponible en: < http://www.explicame.org/content/view/25/1/1/0/> [Consultado el

19 de Marzo de 2009]

[Flor07] FLÓREZ Aristizábal, Leandro. Diseño e implementación de un sistema

para el control de la iluminación del hogar por medio de Teledomótica. Proyecto de

grado. Institución Universitaria Antonio José Camacho. Santiago de Cali, 2007.

[Galv03] GÁLVEZ Rojas, Sergio; Ortega Díaz, Lucas. JAVA a Tope. Java 2 Micro

Edition. [En línea]. Disponible en: < http://www.lcc.uma.es/~galvez/J2ME.html>

[Consultado el 11 de Julio de 2008].

[Gime04] GIMENO BRIEBA, Alberto. JSR-82: Bluetooth desde Java. 2004. [En

línea] <http://www.javahispano.org/contenidos/archivo/150/tooth.zip> Consultado

el 05 de Febrero de 2009.

[Guer04] GUERRERO, Fabio y otros. Diseño de hardware semi-embebido para la

operación de una red inalámbrica Bluetooth. Revista Ingeniería y Competitividad,

Volumen 5: No. 2: Artículo 6. Universidad del Valle. Santiago de Cali, 2004.

[Hena02] HENAO, David. Introducción a los microcontroladores. [En línea].

Publicado en Noviembre de 2002. Disponible en:

<http://www.monografias.com/trabajos12/microco/microco.shtml> [Consultado el

05 de Marzo de 2009]

[Hole09] HOLE, Kjell J. BLUETOOTH. [En línea]. Publicado en Febrero de 2009.

Disponible en: <http://www.kjhole.com/Standards/BT/BTdownloads.html>

[Consultado el 10 de Marzo de 2009]

Page 112: Proyecto Bluelight

112

[Iaco05] IACONO, Matías. Desarrollo para dispositivos móviles. [En línea].

Publicado en Febrero de 2005. Disponible en:

<http://www.netveloper.com/contenido2.aspx?IDC=166_0> [Consultado el 08 de

Mayo de 2008].

[Jime05] JIMÉNEZ, José Juan. Evolución e historia de la telefonía celular. [En

línea]. Publicado en Marzo de 2005. Disponible en:

<http://www.monografias.com/trabajos14/celularhist/celularhist.shtml> [Consultado

el 09 de Mayo de 2008].

[Klin04] KLINGSHEIM, André N. J2ME Bluetooth Programming. 2004. Tesis de

Maestría. University of Bergen, Bergen, 2004.

[Lina04] LINARES, R; Quijano, J. Implementación del protocolo Bluetooth para la

conexión inalámbrica de instrumentos electrónicos programables. [En línea]. 2004.

Disponible en: < http://ohm.utp.edu.co/bluetooth/ > [Consultado el 05 de Abril de

2008].

[Mata07] MATA Ramírez, Pablo. “Bluetooth”. [En línea]. 2007. Disponible en

<http://www.monografias.com/trabajos43/tecnologia-bluetooth/tecnologia-

bluetooth.shtml> [Consultado el 04 de Abril de 2008].

[Mart05] MARTÍNEZ, Ulises y otros. Software para teléfonos celulares. Una

realidad. [En línea]. Publicado en Septiembre de 2005. Disponible en:

<http://www.sg.com.mx/content/view/575/> [Consultado el 08 de Mayo de 2008].

[Maya03] MAYA Coral, Ricardo Andrés y otros. Implementación de una red

inalámbrica Bluetooth. [En línea]. 2003

<www.univalle.edu.co/~telecomunicaciones/trabajos_de_grado/informes/tg_Oscar

Rodriguez_RicardoMaya.pdf> [Consultado el 14 de Febrero de 2008].

Page 113: Proyecto Bluelight

113

[More09] MORENO Tablado, Alberto. Arquitectura de protocolos Bluetooth. [En

línea]. 2009. <[http://www.seguridadmobile.com/bluetooth/especificacion-

bluetooth/arquitectura-de-protocolo/index.html> [Consultado el 25 de Marzo de

2009].

[Oran06] ORANTOS Rodrigo, Jesús. Implementación de una aplicación para

sistemas móviles con recursos limitados. [En línea]. 2006.

<https://projectes.lafarga.cat/projects/btbattler/downloads/docs/view/35 >

[Consultado el 09 de Marzo de 2009]

[Orti04] Ortiz, C. Enrique. Using the Java APIs for Bluetooth WirelessTechnology.

[En línea]. Publicado en Diciembre de 2004.

<http://developers.sun.com/mobility/apis/articles/bluetoothintro/> [Consultado el 31

de Mayo de 2009].

[Rtc06] © Regulació Tècnica i Control, S.A. Definición de Domótica. [En línea].

Publicado en Febrero de 2006. Disponible en:

<http://www.rtcmollet.es/novedades_domotica.htm> [Consultado el 13 de Marzo

de 2008].

[Vera03] VERA, Alexánder y otros. Aplicación de las comunicaciones inalámbricas

a la Domótica. Revista Ingeniería y Competitividad, Volumen 5: No. 2: Artículo 7.

Universidad del Valle. Santiago de Cali, 2004.

[Yuca01] Compañía Tipográfica Yucateca, S.A. de C.V. Telefonía Celular. [En

línea]. Publicado en Julio de 2001. Disponible en:

<http://www.yucatan.com.mx/especiales/celular> [Consultado el 08 de Mayo de

2008].

Page 114: Proyecto Bluelight

114

ANEXO A – Programa del microcontrolador

LIST P=16F876a

INCLUDE <P16F876a.INC>

bank0 MACRO

bcf STATUS,6

bcf STATUS,5

ENDM

bank1 MACRO

bcf STATUS,6

bsf STATUS,5

ENDM

bank2 MACRO

bsf STATUS,6

bcf STATUS,5

ENDM

RX equ .7

TX equ .6

PIE_1 equ 0ch

IOCB_ equ 16h

TXSTA_ equ 18h

SPBRG_ equ 19h

OPTION_R equ 1h

OSCCON_ equ 0fh

ANSELH_ equ 9h

Page 115: Proyecto Bluelight

115

cblock 20h

DATA_RCVD

PDel0

PDel1

luz

light0

light1

light2

LIGHTS

INTflags

cien

ciclo

endc

ORG 0

GOTOSTART

;*********************************************************************************************

; VECTOR DE INTERRUPCIONES PARA CADA CRUCE POR CERO

;*********************************************************************************************

ORG 4

btfss PIR1,5

goto ZERO_CROSS

call readBuffer

INT btfsc INTflags,0

goto ZERO_CROSS

bsf INTflags,0

movlw 088h

movwf INTCON

sleep

Page 116: Proyecto Bluelight

116

ZERO_CROSS clrf LIGHTS

clrf PORTB

bcf INTCON,2

btfsc PORTB,7

goto up

call _0.8mS

bcf INTCON,2

movlw .240

movwf TMR0

goto goON

up call _0.5mS

bcf INTCON,2

movlw .238

movwf TMR0

goON movfw PORTB

bcf INTCON,0

movlw 88h

movwf INTCON

movlw .30

movwf ciclo

ask decfsz light0,0

goto ilumine0

bsf LIGHTS,0

goto zero1

ilumine0 decf light0,0

Page 117: Proyecto Bluelight

117

xorwf ciclo,0

btfss STATUS,2

goto zero1

btfsc LIGHTS,0

goto zero1

bsf LIGHTS,0

bsf PORTB,0

movlw .50

call _uS

bcf PORTB,0

zero1 decfsz light1,0

goto ilumine1

bsf LIGHTS,1

goto zero2

ilumine1 decf light1,0

xorwf ciclo,0

btfss STATUS,2

goto zero2

btfsc LIGHTS,1

goto zero2

bsf LIGHTS,1

bsf PORTB,1

movlw .50

call _uS

bcf PORTB,1

zero2 decfsz light2,0

goto ilumine2

Page 118: Proyecto Bluelight

118

bsf LIGHTS,2

goto no1

ilumine2 decf light2,0

xorwf ciclo,0

btfss STATUS,2

goto no1

btfsc LIGHTS,2

goto no1

bsf LIGHTS,2

bsf PORTB,2

movlw .50

call _uS

bcf PORTB,2

;*********************************************************************************************

no1 btfss INTCON,2

goto no1

bcf INTCON,2

btfsc PORTB,7

goto up2

movlw .10

call _uS

movlw .240

movwf TMR0

goto clear

up2 movlw .238

movwf TMR0

clear clrf PORTB

Page 119: Proyecto Bluelight

119

decre decf ciclo,1

verify movlw 07h

xorwf LIGHTS,0

btfss STATUS,2

goto ask

espere goto espere

;*********************************************************************************************

; RUTINA PARA LEER DATO RECIBIDO Y VACIAR BUFFER

;********************************************************************************************

readBuffer movfw RCREG

movwf DATA_RCVD

movlw b'00001000'

xorwf PORTC,1

swapf DATA_RCVD,0

andlw 0fh

movwf luz

rrf luz,1

bcf luz,7

btfss luz,0

goto jmp

movlw 1fh

andwf DATA_RCVD,0

movwf light1

incf light1,1

return

jmp btfss luz,1

goto jmp2

Page 120: Proyecto Bluelight

120

movlw 1fh

andwf DATA_RCVD,0

movwf light2

incf light2,1

return

jmp2 movlw 1fh

andwf DATA_RCVD,0

movwf light0

incf light0,1

return

;*********************************************************************************************

; INICIO DE PROGRAMA

;*********************************************************************************************

START bank1

movlw b'10000101' ;Rate de 64 -> TMR0 para generar 820uS

movwf OPTION_R

;movlw b'00001000'

movlw b'10000000'

movwf PORTB

bsf PIE_1,5

bcf TXSTA_,4

bsf TXSTA_,2 ;High Baud Rate (BRGH = 1)

movlw .64 ;BAUD RATE = 19200

movwf SPBRG_

clrf PORTC

;bsf IOCB_,3

bsf PORTC,7

bank0

Page 121: Proyecto Bluelight

121

clrf LIGHTS

movlw 1h

movwf light0

movwf light1

movwf light2

clrf DATA_RCVD

clrf luz

clrf INTflags

bsf RCSTA,7

bsf RCSTA,4

clrf PORTB

clrf PORTC

bcf PIR1,5

clrf RCREG

movlw 0C0h

movwf INTCON

askAgain btfss PIR1,5

goto $-1

goto $-2

;*********************************************************************************************

; RUTINA PARA GENERAR uS

;*********************************************************************************************

_uS movwf PDel0 ; 1 |

PLoop0 nop ; 1 delay

decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?

goto PLoop0 ; 2 no, loop

nop

return ; 2+2 Fin.

Page 122: Proyecto Bluelight

122

cienmili movlw .50

movwf cien

oh call dosmili

decfsz cien,1

goto oh

return

dosmili movlw .100

movwf TMR0

revisa btfss INTCON,2

goto revisa

bcf INTCON,2

return

_0.5mS movlw .218

Movwf TMR0

revisa2 btfss INTCON,2

goto revisa2

bcf INTCON,2

return

_0.8mS movlw .194

movwf TMR0

revisa3 btfss INTCON,2

goto revisa3

bcf INTCON,2

return

END

Page 123: Proyecto Bluelight

123

ANEXO B – SOFTWARE DEL CELULAR (Clase BTMidlet)

import java.io.IOException;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class BTMidlet extends MIDlet implements

CommandListener,ItemStateListener,ConnectionListener

Display pantalla;//Instancia del Display

Alert alertMessages;//Muestra alertas o SplashScreen

Form formLogin;//Formulario de ingreso

Form formSignUp;//Formulario de ingreso de nuevo usuario

List listLights;//Pantalla con Menu de luces

List listDevices;

Form formControl;//Pantalla para Dimmer

TextField txtUsername;//Campo de texto para nombre de usuario

TextField txtPassword;//Campo de texto para contraseña

TextField txtnewUsername;//Campo de texto para nombre de usuario

TextField txtnewPassword;//Campo de texto para contraseña

TextField txtRePassword;

Ticker marquesina;

Command cmdLogin;//Comando Login

Command cmdExit;//Comando Exit

Command cmdOk;//Comando OK

Command cmdCancel;

Command cmdSS;//Search Services

Command cmdBack;//Comando Back

Command cmdLast;//Último estado de las luces

Gauge[] Intensity;//Control de intensidad

Page 124: Proyecto Bluelight

124

int QtyLights;

boolean[] Quantity;

HiloConexion hilo;

short i,x=0;

int[] gauges;//Arreglo con la intensidad de cada Gauge

Registro RMS;

boolean numUsuarios;

public BTMidlet()//Constructor

cmdExit=new Command("Salir", Command.EXIT, 1);

cmdLogin=new Command("Ingresar", Command.OK, 1);

txtUsername=new TextField("Usuario ", null, 10, TextField.ANY);

txtPassword=new TextField("Contraseña", null, 10, TextField.PASSWORD);

txtnewUsername=new TextField("Usuario ", null, 10, TextField.ANY);

txtnewPassword=new TextField("Contraseña", null, 10,

TextField.PASSWORD);

txtRePassword=new TextField("Contraseña", null, 10,

TextField.PASSWORD);

alertMessages=new Alert("Bienvenid@","BIENVENIDO A

BLUELIGHT",null,AlertType.INFO);

alertMessages.setTimeout(2000);

formLogin=new Form("Ingreso");

formLogin.addCommand(cmdExit);

formLogin.addCommand(cmdLogin);

formLogin.append(txtUsername);

formLogin.append(txtPassword);

formLogin.setCommandListener(this);

Page 125: Proyecto Bluelight

125

cmdOk=new Command("OK",Command.OK,1);

formSignUp=new Form("Nuevo Usuario");

formSignUp.addCommand(cmdExit);

formSignUp.addCommand(cmdOk);

formSignUp.append(txtnewUsername);

formSignUp.append(txtnewPassword);

formSignUp.append(txtRePassword);

formSignUp.setCommandListener(this);

marquesina=new Ticker("BLUELIGHT V2.0");

cmdCancel=new Command("Cancelar",Command.CANCEL,1);

cmdLast=new Command("Último Estado",Command.OK,1);

listLights=new List("Luces", List.MULTIPLE);

listLights.addCommand(cmdExit);

listLights.addCommand(cmdOk);

listLights.addCommand(cmdLast);

listLights.append("Luz exterior", null);

listLights.append("Luz Sala Principal", null);

//listLights.append("Living Room 2 Light", null);

listLights.append("Luz Baño", null);

listLights.setCommandListener(this);

cmdSS=new Command("Conectar",Command.OK,1);

listDevices=new List("Dispositivos", List.EXCLUSIVE);

listDevices.addCommand(cmdExit);

listDevices.addCommand(cmdSS);

listDevices.setCommandListener(this);

Page 126: Proyecto Bluelight

126

formControl=new Form("Control");

cmdBack=new Command("Atrás", Command.BACK, 1);

formControl.setItemStateListener(this);

formControl.setCommandListener(this);

//Intensity=new Gauge[4];

Intensity=new Gauge[3];

QtyLights=0;

//Quantity=new boolean[4];

Quantity=new boolean[3];

gauges=new int[3];

i=0;

for(i=0;i<3;i++)

gauges[i]=0;

hi lo=new HiloConexion(this);

RMS=new Registro();

numUsuarios=RMS.getNumUsuarios();

public void startApp()

marquesina.setString("BLUELIGHT Versión 2.0");

formLogin.setTicker(marquesina);

pantalla=Display.getDisplay(this);

if(numUsuarios)

pantalla.setCurrent(alertMessages,formLogin);//Empieza con mensaje

else

marquesina.setString("Nuevo Usuario");

formSignUp.setTicker(marquesina);

pantalla.setCurrent(alertMessages,formSignUp);

hi lo.refMidlet(this);

Page 127: Proyecto Bluelight

127

public void pauseApp()

public void destroyApp(boolean unconditional)

alertMessages.setTitle("BLUELIGHT");

alertMessages.setString("Creado por:\n\n*Leandro Flórez Aristizábal\n*Alexis

Ramírez Orozco");

alertMessages.setTimeout(4000);

alertMessages.setType(AlertType.INFO);

marquesina.setString("BLUELIGHT Versión 2.0");

alertMessages.setTicker(marquesina);

pantalla.setCurrent(alertMessages);

try

Thread.sleep(4000);

catch (InterruptedException ex)

ex.printStackTrace();

public void commandAction(Command cmd, Displayable display)

String nombre = new

String(RMS.leerRegistros(1,"Usuarios"),0,RMS.leerRegistros(1,"Usuarios").length);

String pass = new

String(RMS.leerRegistros(2,"Usuarios"),0,RMS.leerRegistros(2,"Usuarios").length);

if(display==formLogin)

if(cmd==cmdLogin)

if(txtUsername.getString().equals(nombre)

&& txtPassword.getString().equals(pass))

//Si el nombre de usuario y contraseña son correctos

/*hilo=new HiloConexion(this);//Se instancia el hilo antes de start()

Page 128: Proyecto Bluelight

128

//para que inicie más de 1 vez

hilo.refMidlet(this);

hilo.start();

pantalla.setCurrent(listLights);*/

listDevices.deleteAll();

hilo.searchDevices();

else

alertMessages.setTitle("Error");

alertMessages.setString("Usuario y/o Contraseña inválidos");

alertMessages.setTimeout(Alert.FOREVER);

alertMessages.setType(AlertType.ERROR);

marquesina.setString("BLUELIGHT Versión 2.0");

alertMessages.setTicker(marquesina);

txtPassword.setString("");

pantalla.setCurrent(alertMessages,formLogin);

else if(cmd==cmdExit)

destroyApp(true);

notifyDestroyed();

if(display==formSignUp)

if(cmd==cmdOk)

if(txtnewPassword.getString().equals(txtRePassword.getString()))

RMS.guardarRegistros(txtnewUsername.getString(),txtnewPassword.getString(),

"Usuarios");

Page 129: Proyecto Bluelight

129

pantalla.setCurrent(formLogin);

else

alertMessages.setTitle("Error");

alertMessages.setString("Contraseñas para

"+txtnewUsername.getString()+" no concuerdan");

alertMessages.setTimeout(Alert.FOREVER);

alertMessages.setType(AlertType.ERROR);

marquesina.setString("BLUELIGHT Versión 2.0");

alertMessages.setTicker(marquesina);

txtnewPassword.setString("");

txtRePassword.setString("");

pantalla.setCurrent(alertMessages,formSignUp);

else if(cmd==cmdExit)

destroyApp(true);

notifyDestroyed();

else if(display==listLights)

if(cmd==cmdOk)

hilo.searchServices("Bluelight");

i=0;

formControl.addCommand(cmdBack);

QtyLights=listLights.getSelectedFlags(Quantity);

do

if(Quantity[i]==true)

Page 130: Proyecto Bluelight

130

Intensity[i]=new Gauge("Intensidad "+listLights.getString(i), true, 30,

gauges[i]);

formControl.append(Intensity[i]);

i++;

while(i<3);

//while(i<4);

marquesina.setString("INTENSIDAD DE LUCES");

formControl.setTicker(marquesina);

pantalla.setCurrent(formControl);

else if(cmd==cmdLast)

formControl.addCommand(cmdBack);

QtyLights=listLights.getSelectedFlags(Quantity);

try

for(i=0;i<3;i++)

if(Quantity[i]==true)

gauges[i]=Integer.parseInt(new

String(RMS.leerRegistros(i+1,"Intensidades"),0,RMS.leerRegistros(i+1,"Intensidad

es").length));

Intensity[i]=new Gauge("Intensidad "+listLights.getString(i), true,

30, gauges[i]);

formControl.append(Intensity[i]);

if(i==0)

hilo.os.write(Intensity[0].getValue());

if(i==1)

hilo.os.write(Intensity[1].getValue()|32);

if(i==2)

hilo.os.write(Intensity[2].getValue()|64);

Page 131: Proyecto Bluelight

131

marquesina.setString("INTENSIDAD DE LUCES");

formControl.setTicker(marquesina);

pantalla.setCurrent(formControl);

catch (IOException ex)

ex.printStackTrace();

else if(cmd==cmdExit)

alertMessages.setTitle("Guardar");

alertMessages.setString("¿Desea guardar el estado de las luces?");

alertMessages.setTimeout(Alert.FOREVER);

alertMessages.addCommand(cmdOk);

alertMessages.addCommand(cmdCancel);

alertMessages.setType(AlertType.CONFIRMATION);

alertMessages.setCommandListener(this);

pantalla.setCurrent(alertMessages);

else if(display==listDevices)

if(cmd==cmdSS)

if(listDevices.getString(listDevices.getSelectedIndex()).equals("BLUELIGHT"))

hilo.searchServices("Bluelight");

else

alertMessages.setTitle("Error");

Page 132: Proyecto Bluelight

132

alertMessages.setString("El dispositivo seleccionado no es

BLUELIGHT");

alertMessages.setTimeout(3000);

alertMessages.setType(AlertType.ERROR);

marquesina.setString("BLUELIGHT Versión 2.0");

alertMessages.setTicker(marquesina);

pantalla.setCurrent(alertMessages,formLogin);

else if(cmd==cmdExit)

destroyApp(true);

notifyDestroyed();

else if(display==formControl)

if(cmd==cmdBack)

i=0;

formControl.deleteAll();

//for(i=0;i<4;i++)

for(i=0;i<3;i++)

if(Intensity[i]!=null)

gauges[i]=Intensity[i].getValue();//Guarda las intensidades

Intensity[i]=null;

pantalla.setCurrent(listLights);

if(display==alertMessages)

Page 133: Proyecto Bluelight

133

if(cmd==cmdOk)

RMS.guardarRegistros(gauges, "RegIntensidades");//Guarda el estado

de luces en la BD

destroyApp(true);

notifyDestroyed();

else

destroyApp(true);

notifyDestroyed();

public void itemStateChanged(Item item)

if(item==Intensity[0])

System.out.println("El Gauge outside requiere " + Intensity[0].getValue());

gauges[0]=Intensity[0].getValue();

try

x=(short)Intensity[0].getValue();

hilo.os.write(x);

catch (IOException ex)

ex.printStackTrace();

else if(item==Intensity[1])

System.out.println("El Gauge LR1 requiere "+Intensity[1].getValue());

gauges[1]=Intensity[1].getValue();

try

x=(short)Intensity[1].getValue();

x=(short)(x | 32);

Page 134: Proyecto Bluelight

134

hilo.os.write(x);

catch (IOException ex)

ex.printStackTrace();

else if(item==Intensity[2])

System.out.println("El Gauge LR2 requiere "+Intensity[2].getValue());

gauges[2]=Intensity[2].getValue();

try

x=(short)Intensity[2].getValue();

x=(short)(x | 64);

hilo.os.write(x);

catch (IOException ex)

ex.printStackTrace();

public void connectionAction(String result, int type)

int y;

if(result.equals("OK") && type==0)

marquesina.setString("LUCES");

listLights.setTicker(marquesina);

pantalla.setCurrent(listLights);

else if(result.equals("BAD") && type==0)

alertMessages.setTitle("Error");

alertMessages.setString("Bluelight parece estar apagado");

alertMessages.setTimeout(3000);

alertMessages.setType(AlertType.ERROR);

Page 135: Proyecto Bluelight

135

marquesina.setString("BLUELIGHT Versión 2.0");

alertMessages.setTicker(marquesina);

pantalla.setCurrent(alertMessages,formLogin);

Page 136: Proyecto Bluelight

136

ANEXO C - SOFTWARE DEL CELULAR (Clase HiloConexion)

import javax.microedition.io.*;

import java.io.*;

import javax.bluetooth.*;

import java.util.*;

import javax.microedition.lcdui.*;

public class HiloConexion extends Thread implements DiscoveryListener

ConnectionListener listener;

StreamConnection conexion;

InputStream is;

OutputStream os;

BTMidlet BTMidlet;

LocalDevice dispositivoLocal;

DiscoveryAgent da;

Vector dispositivosEncontrados=new Vector();

Vector serviciosEncontrados=new Vector();

public HiloConexion( ConnectionListener l )

listener = l;

public void escribir( String mensaje )

if( os != null )

try

os.write( mensaje.getBytes() );

catch( IOException ioe )

Page 137: Proyecto Bluelight

137

public void refMidlet(BTMidlet m)

BTMidlet=m;

public void searchServices(String dev)

RemoteDevice dispositivo_remoto =

(RemoteDevice)dispositivosEncontrados.elementAt(BTMidlet.listDevices.getSelect

edIndex());

try

BTMidlet.alertMessages.setTitle("Servicios...");

BTMidlet.alertMessages.setString("Buscando servicios...");

BTMidlet.alertMessages.setTimeout(Alert.FOREVER);

BTMidlet.alertMessages.setType(AlertType.INFO);

BTMidlet.marquesina.setString("BLUELIGHT Versión 2.0");

BTMidlet.alertMessages.setTicker(BTMidlet.marquesina);

BTMidlet.pantalla.setCurrent(BTMidlet.alertMessages);

da.searchServices(null,new UUID[]new

UUID(0x1101),dispositivo_remoto,this);

catch(BluetoothStateException be)

BTMidlet.alertMessages.setTitle("Error...");

BTMidlet.alertMessages.setString("Excepción buscando servicios...");

BTMidlet.alertMessages.setTimeout(Alert.FOREVER);

BTMidlet.alertMessages.setType(AlertType.INFO);

BTMidlet.marquesina.setString("BLUELIGHT Versión 2.0");

BTMidlet.alertMessages.setTicker(BTMidlet.marquesina);

BTMidlet.pantalla.setCurrent(BTMidlet.alertMessages);

Page 138: Proyecto Bluelight

138

public void searchDevices()

BTMidlet.alertMessages.setTitle("Dispositivos...");

BTMidlet.alertMessages.setString("Buscando dispositivos...");

BTMidlet.alertMessages.setTimeout(Alert.FOREVER);

BTMidlet.alertMessages.setType(AlertType.INFO);

BTMidlet.marquesina.setString("BLUELIGHT Versión 2.0");

BTMidlet.alertMessages.setTicker(BTMidlet.marquesina);

BTMidlet.pantalla.setCurrent(BTMidlet.alertMessages);

dispositivosEncontrados.removeAllElements();

try

dispositivoLocal = LocalDevice.getLocalDevice();

dispositivoLocal.setDiscoverable(DiscoveryAgent.GIAC);

da = dispositivoLocal.getDiscoveryAgent();

da.startInquiry(DiscoveryAgent.GIAC,this);

catch(BluetoothStateException be)

public void run()

ServiceRecord sr = (ServiceRecord)serviciosEncontrados.elementAt(0);

String url =

sr.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT,

false);

try

BTMidlet.alertMessages.setTitle("Conectando...");

Page 139: Proyecto Bluelight

139

BTMidlet.alertMessages.setString("Espere, Bluelight está estableciendo

conexión");

BTMidlet.alertMessages.setTimeout(Alert.FOREVER);

BTMidlet.alertMessages.setType(AlertType.INFO);

BTMidlet.marquesina.setString("BLUELIGHT Versión 2.0");

BTMidlet.alertMessages.setTicker(BTMidlet.marquesina);

BTMidlet.pantalla.setCurrent(BTMidlet.alertMessages);

conexion = (StreamConnection) Connector.open( url );

is = conexion.openInputStream();

os = conexion.openOutputStream();

listener.connectionAction( "OK", 0 );

catch (IOException ex)

ex.printStackTrace();

listener.connectionAction( "BAD", 0 );

finally

if( conexion != null )

try

conexion.close();

catch (IOException ex)

ex.printStackTrace();

public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod)

dispositivosEncontrados.addElement(btDevice);

Page 140: Proyecto Bluelight

140

public void servicesDiscovered(int transID, ServiceRecord[] servRecord)

for(int i=0;i<servRecord.length;i++)

ServiceRecord record = servRecord[i];

serviciosEncontrados.addElement(record);

public void serviceSearchCompleted(int transID, int respCode)

if(serviciosEncontrados.size()>0)

BTMidlet.alertMessages.setTitle("Servicios encontrados...");

BTMidlet.alertMessages.setString("Intentaré conectar");

BTMidlet.alertMessages.setTimeout(Alert.FOREVER);

BTMidlet.alertMessages.setType(AlertType.INFO);

BTMidlet.marquesina.setString("BLUELIGHT Versión 2.0");

BTMidlet.alertMessages.setTicker(BTMidlet.marquesina);

BTMidlet.pantalla.setCurrent(BTMidlet.alertMessages);

run();

else

BTMidlet.alertMessages.setTitle("Servicios no encontrados...");

BTMidlet.alertMessages.setString("Error");

BTMidlet.alertMessages.setTimeout(Alert.FOREVER);

BTMidlet.alertMessages.setType(AlertType.INFO);

BTMidlet.marquesina.setString("BLUELIGHT Versión 2.0");

BTMidlet.alertMessages.setTicker(BTMidlet.marquesina);

BTMidlet.pantalla.setCurrent(BTMidlet.alertMessages,BTMidlet.listDevices);

Page 141: Proyecto Bluelight

141

public void inquiryCompleted(int discType)

for(int i=0;i<dispositivosEncontrados.size();i++)

try

RemoteDevice dispositivoRemoto = (RemoteDevice)

dispositivosEncontrados.elementAt(i);

BTMidlet.listDevices.append(dispositivoRemoto.getFriendlyName(true),null);

BTMidlet.pantalla.setCurrent(BTMidlet.listDevices);

catch(Exception e)

if(dispositivosEncontrados.size()==0)

BTMidlet.alertMessages.setTitle("Error...");

BTMidlet.alertMessages.setString("No se encontraron dispositivos

Bluetooth");

BTMidlet.alertMessages.setTimeout(Alert.FOREVER);

BTMidlet.alertMessages.setType(AlertType.INFO);

BTMidlet.marquesina.setString("BLUELIGHT Versión 2.0");

BTMidlet.alertMessages.setTicker(BTMidlet.marquesina);

BTMidlet.pantalla.setCurrent(BTMidlet.alertMessages,BTMidlet.formLogin);

Page 142: Proyecto Bluelight

142

ANEXO D – SOTWARE DEL CELULAR (Clase Registro)

import javax.microedition.rms.RecordStore;

import javax.microedition.rms.RecordStoreException;

import javax.microedition.rms.RecordStoreNotOpenException;

public class Registro

private RecordStore rs;

public boolean numUsuarios;

public Registro()

numUsuarios=false;

rs = null;

crearRegistros("Intensidades");

crearRegistros("Usuarios");

public boolean getNumUsuarios()

return numUsuarios;

public void crearRegistros(String DB)

try

rs = RecordStore.openRecordStore( DB, true );

catch( Exception e )

try

if (DB.equals("Usuarios") && rs.getNumRecords() > 0)

numUsuarios=true;

catch (RecordStoreNotOpenException ex)

Page 143: Proyecto Bluelight

143

ex.printStackTrace();

try

rs.closeRecordStore();

catch (Exception ex)

ex.printStackTrace();

public void abrirRegistros(String DB)

try

rs = RecordStore.openRecordStore( DB, true );

catch( Exception e )

public void guardarRegistros(int data[], String DB)

byte [] registro;

deleteRegistros(DB);

abrirRegistros(DB);

try

for( int i = 0; i < data.length; i++ )

registro = String.valueOf(data[i]).getBytes();

rs.addRecord(registro, 0, registro.length );

System.out.println( "+" + data[i] );

System.out.println( " Número de registros: " + rs.getNumRecords() );

catch( Exception e )

try

rs.closeRecordStore();

catch (Exception ex)

Page 144: Proyecto Bluelight

144

ex.printStackTrace();

public void guardarRegistros(String dataUser,String dataPass, String DB)

byte [] registro;

deleteRegistros(DB);

abrirRegistros(DB);

try

registro = dataUser.getBytes();

rs.addRecord(registro, 0, registro.length );

registro = dataPass.getBytes();

rs.addRecord(registro, 0, registro.length );

System.out.println( " Número de registros: " + rs.getNumRecords() );

catch( Exception e )

try

rs.closeRecordStore();

catch (Exception ex)

ex.printStackTrace();

public byte[] leerRegistros(int x, String DB)

byte[] reg=0,0,0;

abrirRegistros(DB);

try

int num = rs.getNumRecords();

System.out.println( " Total de registros: " + num );

for( int i = 1; i <= num; i++ )

byte[] registro = new byte[rs.getRecordSize( i )];

Page 145: Proyecto Bluelight

145

rs.getRecord( i, registro, 0 );

System.out.println( " +" + new String( registro, 0, registro.length ) );

byte[] registros = new byte[rs.getRecordSize( x )];

rs.getRecord( x, registros, 0 );

return registros;

catch( Exception e )

System.out.println( " Eror en la lectura" );

try

rs.closeRecordStore();

catch (Exception ex)

ex.printStackTrace();

return reg;

public void cerrarRegistros()

try

rs.closeRecordStore();

catch( Exception e )

public void deleteRegistros(String DB)

try

rs.deleteRecordStore( DB );

catch( Exception e )