Está en la página 1de 23

“UNIVERSIDAD AUTÓNOMA CHAPINGO”

(Departamento de Ingeniería Mecatrónica Agrícola)

“Reporte de practica: Control Bluetooth”

Asignatura: Sistemas de comunicación

Profesor: Josué Vicente Cervantes Bazán

Alumno: Yáñez Peralta Leonardo

Grado: 5° Grupo: 5

Km 38.5 carretera México - Texcoco, 5623


Texcoco de Mora, México
Introducción
En esta práctica se aprendió a programar el dispositivo ESP32, para generar una
conexión inalámbrica Bluetooth, y asignar una respuesta al recibir una String
especifico, para posteriormente volverlo mas robusto y asignar diferentes acciones
dependiendo del mensaje recibido (en este caso encender o apagar LED’s).
Por otra parte, aunque en un principio se empleó para las pruebas una aplicación
proporcionada por el profesor de la asignatura de sistemas de comunicación, en el
transcurso de las sesiones correspondientes a esta práctica también se
desarrollaron aplicaciones en MIT App Inventor, usando programación por
bloques, para enviar un mensaje, recibir la respuesta del ESP32 y encender o
apagar uno o tres LED’s (asignando salidas digitales a la placa).
En este reporte se han colocado los diferentes pasos seguidos para la creación de
los programas realizados para el dispositivo ESP32 en la IDE Arduino (se
realizaron diferentes versiones, en diferentes etapas, y están recopiladas en este
reporte), y las aplicaciones en MIT App Inventor correspondientes (dos versiones,
para 1 o 3 LED´s).

Explicación, procedimiento y resultados


 Carga de los recursos y correcta configuración de la IDE Arduino
para la programación del dispositivo ESP32 DEVKIT V1

Primero es necesario dirigirse al apartado “Archivo>Preferencias>Gestor de URLs


Adicionales de Tarjetas” y copiar las siguientes URL´s, separadas por una coma:

1) https://dl.espressif.com/dl/package_esp32_index.json
2) http://arduino.esp8266.com/stable/package_esp8266com_index.json

Una vez hecho lo anterior será necesario dar click en “OK” y reiniciar la IDE.
Una vez hecho lo anterior debemos dirigirnos a la sección
“Herramientas>Placa>ESP32 Arduino”, en donde se debe elegir entre las múltiples
alternativas disponibles. Para este caso será “DOIT ESP32 DEVKIT 1”

 Primer código realizado:


En este primer código fue necesario cargar la librería Bluetooth, como se muestra
en la línea #6, posteriormente en las líneas #7, #8, y #9 se crea un “if en línea” que
permite comprobar si existe la conexión Bluetooth, y de no ser así enviar un
mensaje de error. Posteriormente se crea el objeto “serialBT” y la variable dato
(que contendrá el mensaje enviado por el usuario) en las líneas #11, y #12
respectivamente, además de asignar nuestro nombre a la red Bluetooth en la línea
#14.

Dentro del “void loop ()” un “if” permite comprobar si hay alguna entrada de
información y de ser así la línea #22 asigna la entrada a la variable “dato”, y en la
#23 se emplea “serialBT.compareTo(“E”) ==0” para que, si el mensaje
efectivamente es “E”, se imprima en el “Monitor serial” la palabra “Hola” (línea
#24).
Código #1
Para realizar la prueba fue necesario descargar la aplicación creada por el
profesor:

Una vez instalado fue necesario también cargar el código al dispositivo ESP32
para lo cual hay que elegir el puerto al que está conectada la placa:
Al realizar esta configuración, se procede a dar click en compilar, y en subir, sin
olvidar que al mostrarse en la consola “Conectando…”, se debe presionar el botón
“BOOT” de la placa.

 ESTE PROCESO PARA CARGAR EL CÓDIGO A LA PLACA SERÁ EL MISMO PARA


EL RESTO DE LOS CÓDIGOS REALIZADOS EN LA IDE ARDUINO EN LAS
DIFERENTES SESIONES DE ESTA PRACTICA, POR LO QUE NO SE REPITE LA
EXPLICACIÓN
Una vez DE ESTE PROCEDIMIENTO EN EL RESTO DEL REPORTE…
hecho lo anterior…

1.- Aparece la red con nuestro nombre y vinculamos nuestro Smartphone:

2.- Abrimos la aplicación descargada y seleccionamos “connect>red con nuestro


nombre” una vez conectados escribimos el mensaje “E”, y damos click en “Send Text”
para enviar el mensaje a la placa.
3.- En el “Monitor Serial” se imprimen los siguientes mensajes:

 Segundo código realizado:


Este código es muy similar al anterior y su funcionamiento (así como su
explicación) es prácticamente el mismo, pero posee una diferencia clave, que se
encuentra en la línea #24, en este caso en lugar de usar “Serial.println()”,
empleamos “serialBT.println()”, lo que nos permitirá el grabar el mensaje de
respuesta (“Hola”) directamente en la interfaz de la aplicación.
Código #2
Una vez hecho lo anterior repetimos el proceso para conectar la App y cargar el
código a la placa ESP32 que se explicaron en la sección anterior de este
reporte.
Al establecer la conexión con la red Bluetooth que lleva nuestro nombre debemos
enviar la letra “E” y se verá la respuesta hola en la App…

 Tercer código realizado (Encender y apagar un led):


En este código se cargó la librería Bluetooth, como se muestra en la línea #6,
posteriormente en las líneas #7, #8, y #9 se crea un “if en línea” que permite
comprobar si existe la conexión Bluetooth, y de no ser así enviar un mensaje de
error. Posteriormente se crea el objeto “serialBT” (línea #11) y se declara la
variable “Led” en la línea #12 que permite indicar un valor =12, que corresponde al
pin de salida, también asignamos nuestro nombre a la red Bluetooth en la línea
#14, y indicamos que “Led”, es decir el “pin 12” de la placa, es una salida digital.

Dentro del “void loop ()” un “if” permite comprobar si hay alguna entrada de
información y de ser así la línea #20 asigna la entrada a la variable “Mensaje”, y
en la línea #21 y #25 se ejecuta un codicional, que garantiza que los mensajes de
entrada sean “E” o “A”.

Cuando “Mensaje=E” la línea #22 indica que el “pin 12” indicado por la variable
“Led” se coloque en estado alto, y en la línea #23 en lugar de usar
“Serial.println()”, empleamos “serialBT.println()”, lo que nos permitirá el grabar el
mensaje de respuesta (“Encender Led”) directamente en la interfaz de la
aplicación. Cuando “Mensaje=A“ la línea #26 indica que el “pin 12” indicado por la
variable “Led” se coloque en estado BAJO, y en la línea #27 en lugar de usar
“Serial.println()”, empleamos “serialBT.println()”, para grabar el mensaje de
respuesta (“Apagar Led”) directamente en la interfaz de la aplicación.

Código #3
Para conectar el LED a la placa ESP32 nos apoyamos de una protoboard (placa
de pruebas) el pin negativo del LED se conecta con el pin GND, y el pin positivo al
pin 12 de la siguiente manera:
**Una vez hecho lo anterior repetimos el proceso para cargar el código a la
placa ESP32 y conectar la App con la red Bluetooth, que se explicaron
anteriormente.
Lo que se obtiene es que al enviar la letra “E” se muestre en pantalla en mensaje
“Encender Led”, y se enciende el LED, y al enviar la letra “A” se muestra en pantalla
en mensaje “Apagar Led”, y se apaga el LED.
Caso #1:

Caso #2:
 Creación de nuestra primera aplicación Bluetooth en App Inventor
(para encender y apagar un LED):
App Inventor es un sitio de internet que nos permite diseñar una aplicación
sencilla, y todo a través de elementos arrastrables ya sea para diseñar su interfaz
o realizar su programación (empleando bloques).

Primero nos dirigimos a la sección “My projects>Start new Project” y en la ventana


emergente colocamos el nombre del proyecto (Domotica)

Al hacer esto se creará nuestro proyecto y nos envia a una serie de menus y barras donde
podemos elegir funciones, botones (User interface), API’s, arreglos de componentes
(Layout) y demas elementos necesarios para permitir al usuario interactuar con la
aplicación.
Los componentes que emplearemos para diseñar la App son:

Button (botones), label (cuadro de texto), ListPicker (muestra una lista de textos para que el
usuario elija en este caso las redes Bluetooth), HorizontalArrangement (permite acomodar
en posiciones espefificas varios componentes, de manera horizontal), VerticalArrangement
(permite acomodar en posiciones espefificas varios componentes, de manera vertical),
Clock (componente no visible que proporciona el instante en el tiempo utilizando el reloj
interno del teléfono), y BluetoothClient (componente que utiliza el perfil de puerto serie
(SPP) para la comunicación Bluetooth) siendo este ultimo el que nos permite asignar
propiedades, metodos, o eventos como la deteccion de la conexión bluetooth, la lectura de
algun mensaje, la inpresion de una respuesta en algun componente como “Label”, etc,
usando funciones basicas en su posterior proramación.

Para comenzar a dar forma a la aplicación tendremos que arrastrar los componentes, por
ejemplo, un “HorizontalArrangement”, para lo cual es necesario dar click sostenido en el
componente dentro de la lista Layout, y moverlo hacia la pantalla del celular.
Una vez hecho esto podemos arrastrar más componentes dentro del
“HorizontalArrangement”, en este caso deseamos un botón que abra la lista de redes
Bluetooth disponible y uno para desconectar el dispositivo, siendo las mejores opciones
para esto un componente ListPicker y un componente Button respectivamente:

Como se puede ver los elementos ya se encuentran agregados y ordenados, además se


pueden seleccionar en la barra lateral derecha donde además hay opciones para modificar
sus propiedades, ya sea la apariencia de la pantalla principal y la animación de esta al abrir
o cerrar, el tamaño y ajuste del HorizontalArrangement, o la forma, tamaño, posición, color,
o ajuste del ListPicker y el Button, por mencionar algo.

Los ajustes son bastante explícitos por lo que no hay mucha dificultad para entender que
hace cada opción de la barra, y nos da la libertad de experimentar y personalizar la App,
por ejemplo, este es el mismo arreglo de componentes anterior, pero con unos ajustes de
tamaño, color forma, e incluso vista de la pantalla principal:
Para continuar se tuvo que arrastrar la siguiente lista de componentes y en el orden que se
indica, además de personalizar a nuestro la apariencia, posición, texto y tamaño de texto, el
lugar de cada componente, y sus dimensiones (en este caso la principal opción para esto
fue “Width>Fill parents” que ajusta automáticamente a la pantalla).

Como se puede observar la cinta de opciones es considerablemente flexible, al permitirnos


modificar cada uno de los componentes a nuestra voluntad, y preferencias personales.
Después de agregar todos los componentes y ajustar sus características y apariencia la
aplicación adquiere la siguiente interfaz:

Para programar la aplicación es necesario ir al apartado “Blocks” y allí se podrá acceder a


un conjunto de comandos por bloques, o bloques para acciones especificas para cada
componente agregado a la aplicación, o en general comandos de control, operadores
lógicos, entre otros:
Para programar comenzamos seleccionando ListPicker1, y al abrir el menú de bloques
elegimos When().BeforePicking, que permite indicar que antes de dar click en el botón
ListPicker1, se debe ejecutar la acción de siguiente bloque, en este caso se encarga de
poner o asignar a este boton un conjunto de elementos.

Después se selecciona BluetoothClient1, se elige el tercer bloque de la captura, que


permite que los elementos asignados mediante el bloque #2, sean las direcciones y
nombres (AdressesAndNames) de las conexiones Bluetooth (cada bloque se posiciona
arrastrándolos cuidando que encajen en las muescas de cada bloque)

Después creamos un segundo conjunto de bloques, y en este caso se selecciona


ListPicker1 se selecciona un bloque con el comando “when().AfterPicking” que indica que
cuando ListPicker1 sea pulsado se ejecute un condicional, se selecciona “BletoothClient1” y
se selecciona el bloque ““call().ConnectAdress” l” y se le añade un bloque
“ListPicker.Selection”, para que “si” hay redes, se llamen las direcciones Bluetooth y se
permita su selección.

Posteriormente al seleccionar BluetoothClient1 y se agrega “call().SendText” “entonces” se


llama a BluetoothClient1 para enviar una cadena de texto (en este caso indica el estatus de
conexión), por lo que es necesario escoger el cuadro de texto, y después seleccionar
Label2 escoger el bloque “set().text” que asigna el texto a Label2, y un bloque de texto que
contendrá el mensaje para grabar (“conectado”) en el cuadro “Label2”.

Después de esto se agrega un tercer conjunto, en este caso al igual que los anteriores se
deben escoger los componentes para los cuales se desea asignar alguna acción, y en este
caso es necesario elegir un bloque para el componente no visible “Clock1”, para el cual se
debe indicar que cuando clock esté como temporizador, se ejecute un condicional para
componente BluetoothClient1, que en este caso si se detecta que hay una conexión, y si se
corrobora la entrada de información (mediante un segundo condicional if) se asigne al
componente “Label4” una cadena de texto, que mediante el bloque “join” permite que
además del texto asignado en el cuadro Label4, se agregue la lectura de texto recibida por
Bluetooth.

Para concluir es necesario programar las acciones para los botones encargados de encender y
apagar el diodo LED, para ello se selecciona el componente tipo Botton deseado, una vez
hecho esto arrastramos el bloque “when().click” para indicar que cuando se pulsa el botón se
pase a la siguiente acción, en este caso ejecutar un condicional, alegimos el componente
BluetoothClient1 y arrastramos hacia el bloque condicional la opción “().isConnected”, para
indicar que si está conectado entonces se realice la siguiente acción para el mismo
componente Buetooth Client1 en este caso “call().SendText” que nos permite enviar un
mensaje de texto por Bluetooth, y agregamos un bloque de texto (A para el botón “Apaga
LED”, y E para “Enciende Led”).

Y finalmente seleccionamos la opción “Build>y el tipo de archivo que queremos generar” para
posteriormente recibir un código QR para su descarga, o la opción de descarga directa.

Para su instalación solo se debe dar permiso al administrador de archivos para la instalación
de fuentes desconocidas, dar click al archivo .apk y esperar su instalación:
**Una vez hecho lo anterior repetimos el proceso para cargar
el “Código #3” a la placa ESP32 para realizar pruebas con
la aplicación creada, además de la conexión del led con la
placa ESP32 -----------

Se puede observaren las siguientes capturas de pantalla 1) La interfaz de la aplicación 2)


la correcta lectura de redes Bluetooth, y 3) el mensaje de estado de conexión entre la
App y la red con mi nombre “LEONARDO”.

Posteriormente procedemos a comprobar el funcionamiento, primero con la opción del botón


“Enciende LED” y luego con el botón “Apaga LED”.

Caso#1: El mensaje “Encender Led” es recibido y el LED enciende (Funciona correctamente).

Caso#2: El mensaje “Apagar Led” es recibido y el LED se apaga (Funciona correctamente).


 Código #4 y creación de segunda aplicación Bluetooth en App
Inventor (para encender y apagar 3 diodos LED individualmente):

Este código es muy similar al Código #3 primero cargamos las librerías Bluetooth,
luego en las tres líneas posteriores se crea un “if en línea” que permite comprobar si
existe la conexión Bluetooth, y de no ser así enviar un mensaje de error.
Posteriormente se crea el objeto “serialBT” y se declaran las variables “Led”, “Led2” y
“Led3” indicando valores =13, 12, y 14 respectivamente (corresponden a 3 pines de
salida), también asignamos nuestro nombre a la red Bluetooth e indicamos mediante
las variables declaradas 3 salidas digitales.

Dentro del “void loop ()” un “if” permite comprobar si hay alguna entrada de información
y de ser así se asigna la entrada a la variable “Mensaje”, y en la línea #21 y #25 se
ejecuta un codicional, que garantiza que los mensajes de entrada sean “E” o “A”.

Posteriormente hay una serie de condicionales de tipo “if” y en cada uno se permite
comparar si Mensaje es igual a alguna de las letras E,A,L,O,S, o N, que corresponden
al mensaje que recibe la placa, y a las cuales se les asigna una acción (prender o
apagar el LED correspondiente) colocando en estado alto o bajo los pines de salida
13,12, y 14.

//RED BLUETOOTH ESP32


#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)


#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial serialBT;

int Led = 13;


int Led2 = 12;
int Led3 = 14;
void setup() {
 Serial.begin(9600);
 serialBT.begin("LEONARDO");
Serial.begin(9600);
Serial.println("COMUNICACION BLUETOOTH EN PROGRESO");
 pinMode(Led, OUTPUT);
 pinMode(Led2, OUTPUT);
 pinMode(Led3, OUTPUT);
}

void loop() {
 if (serialBT.available()) {
   char Mensaje = serialBT.read();
   if (Mensaje == 'E') {
     digitalWrite(Led, HIGH);
     serialBT.println("Encender Led 1");
   }
   else if (Mensaje == 'A') {
     digitalWrite(Led, LOW);
     serialBT.println("Apagar Led 1");
   }

    if (Mensaje == 'L') {


     digitalWrite(Led2, HIGH);
     serialBT.println("Encender Led 2");
   }
   else if (Mensaje == 'O') {
     digitalWrite(Led2, LOW);
     serialBT.println("Apagar Led 2");
   }

    if (Mensaje == 'S') {


     digitalWrite(Led3, HIGH);
     serialBT.println("Encender Led 3");
   }
   else if (Mensaje == 'N') {
     digitalWrite(Led3, LOW);
     serialBT.println("Apagar Led 3");
   }
 }
}

El procedimiento para la creación de esta segunda App es el mismo que la anterior, solo que
ahora se han añadido a la interfaz 4 botones extra, y 2 componentes HorozontalArrangement
en donde se han colocado en pares los 4 nuevos botones, por ello no se repetirá cual es el
procedimiento para acomodar y personalizar los componentes disponibles en MIT App
Inventor.

La interfaz de esta aplicación (después de modificar tamaños, forma, tipo de letra, colores y
posición, y contenido de algunos elementos) y la lista de los componentes empleados, así
como el orden que les corresponde, son los siguientes:

Screen1

HorizontalArrangement1
ListPicker1
Button1

HorizontalArrangement2
Label1
Label2

VerticalScrollArrangement1
Label3
Label4

HorizontalArrangement3
Button2
Button3

HorizontalArrangement4
Button4
Button5

HorizontalArrangement5
Button6
Button7
Clock1
BluetoothClient1

Una vez hecho esto procedemos a realizar la programación, que si bien resulta prácticamente
igual a la anterior tiene algunas diferencias clave:

Nos vamos a la pestaña Blocks, y seleccionamos ListPicker1, elegimos


When().BeforePicking, que permite indicar que antes de dar click en el botón ListPicker1, se
debe ejecutar la acción de siguiente bloque, que se encarga de poner o asignar a este
botón un conjunto de elementos.
Al dar click en BluetoothClient1, se elige el tercer bloque de la captura, que permite que los
elementos asignados mediante el bloque #2, sean las direcciones y nombres de las
conexiones Bluetooth

Después creamos el segundo conjunto de bloques, y en este caso se selecciona


ListPicker1 elegimos el bloque con el comando “when().AfterPicking” que indica que cuando
ListPicker1 sea pulsado se ejecute el siguiente bloque, en este caso un condicional “if”, se
selecciona “BletoothClient1” arrastra el bloque “call().ConnectAdress” y se le añade un
bloque “ListPicker.Selection”, para que “si” hay redes, se llamen las direcciones Bluetooth y
se permita su selección.

Posteriormente al seleccionar BluetoothClient1 y se agrega “call().SendText” “entonces” se


llama a BluetoothClient1 para enviar una cadena de texto (en este caso indica el estatus de
conexión), por lo que es necesario escoger el cuadro de texto, y después seleccionar
Label2 y escoger el bloque “set().text” que asigna el texto a Label2, además de un bloque
de texto que contendrá el mensaje para grabar (“conectado”) en el cuadro “Label2”.

Después de esto se agrega un tercer conjunto, en este caso es necesario elegir un bloque
para el componente no visible “Clock1”, para el cual se debe indicar que cuando clock esté
como temporizador, se ejecute un condicional para componente BluetoothClient1, y si se
detecta que hay una conexión, y corrobora la entrada de información (mediante un segundo
condicional if) se le asigne al componente “Label4” una cadena de texto, que mediante el
bloque “join” permite que además del texto asignado en el cuadro Label4, se agregue la
lectura de texto recibida por Bluetooth.

**Hasta este punto nuestra programación es exactamente la misma que el


codigo anterior, pero ahora se configuraran 6 botones…
Para concluir programamos las acciones para los botones encargados de encender y
apagar cada uno de los 3 diodos LED, para ello se selecciona el componente tipo
Botton deseado (ya sea B2,B3,B4,B5,B6, o B7), y arrastramos el bloque
“when().click” para indicar que cuando se pulsa el botón se pase a la siguiente acción
(ejecutar un condicional tipo if), alegimos el componente BluetoothClient1 y
arrastramos hacia el bloque condicional la opción “().isConnected”, para indicar que si
está conectado entonces se realice la siguiente acción para el mismo componente
Buetooth Client1 en este caso “call().SendText” que nos permite enviar un mensaje
de texto por Bluetooth.
Para cada botón se debe agregar un bloque de texto que contenga E para el botón
“Enciende LED 1” y A para el botón “Apaga LED 1”, L para el botón “Enciende LED 2”
y O para el botón “Apaga LED 2”, y finalmente S para el botón “Enciende LED 3” y N
para el botón “Apaga LED 3”

Y finalmente seleccionamos la opción “Build>y el tipo de archivo que queremos generar” para
posteriormente recibir un código QR para su descarga, o la opción de descarga directa.

**Una vez hecho lo anterior repetimos el proceso


para cargar el código (Código #4) a la placa
ESP32 (que se ha explicado con anterioridad)
para realizar pruebas con la aplicación creada,
además de la siguiente conexión de los 3 LED
con la placa ESP32 (GND a pin negativo de los
LED’s, y pin 13 al positivo del LED 1, pin 12 con
el LED 2, y pin 14 con el LED 3) -----------

Nuevamente se puede observar en las siguientes capturas de pantalla 1) La interfaz de


la aplicación 2) la correcta lectura de redes Bluetooth, y 3) el mensaje de estado de
conexión entre la App y la red con mi nombre (“LEONARDO”).
Posteriormente procedemos a comprobar el funcionamiento, primero encendiendo y
apagando individualmente cada LED con los botones correspondientes…

Caso#1: Recibimos “Encender Led 1” y el LED 1 enciende (Funciona correctamente).

Caso#2: Recibimos “Apagar Led 1” y el LED 1 se apaga (Funciona correctamente).

Caso#3: Recibimos “Encender Led 2” y el LED 2 enciende (Funciona correctamente).


Caso#4: Recibimos “Apagar Led 2” y el LED 2 se apaga (Funciona correctamente).

Caso #5 y 6: Recibimos “Encender Led 3” y el LED 3 enciende (Funciona correctamente), y


también recibimos “Apagar Led 3” y el LED 3 se apaga (Funciona correctamente).
Conclusión
Gracias a esta práctica se aprendió a programar el dispositivo ESP32, para
generar una conexión inalámbrica Bluetooth, y realizar algunas funciones simples,
también hemos empleado una herramienta muy practica que facilita la
programación y desarrollo de aplicaciones sencillas con simplemente arrastrar
componentes y bloques en la pantalla.
Si bien hay mucho más que aprender sobre ambas actividades, se ha ampliado
nuestro conocimiento sobre las consideraciones necesarias para programar
diferentes tipos de módulos o placas en la IDE Arduino, hemos adquirido también
conocimiento sobre nuevas estructuras tales como los “if” en linea, y ha resultado
verdaderamente útil comprender la lógica de programación por bloques detrás de
la herramienta MIT App Inventor.

También podría gustarte