Diseño GUI Python para IoT en Nube
Diseño GUI Python para IoT en Nube
Ingeniería en Robótica
PROYECTO DE ESTADIA
“DISEÑO DE GUI EN PYTHON
PARA CONTROL DE
SISTEMAS EN LA NUBE”
Presentado por:
Enrique Reyes Morales
Profesor Asesor:
Dr. Erick Axel Padilla García
2
Diagrama de flujo: interfaz ..........................................................................................................34
Validación de plataforma experimental .........................................................................................40
Prueba del sistema: .....................................................................................................................40
Conclusiones ....................................................................................................................................45
3
ÍNDICE DE FIGURAS
4
Antecedentes
Las investigaciones realizadas actualmente sobre el control de sistemas embebidos
en una interfaz mediante la nube son pocas pero existen algunas al respecto que
son de gran importancia y fundamentales para el desarrollo de este proyecto. Una
de ellas es la siguiente:
5
En la siguiente Figura 2 se puede observar la estructura del sistema electrónico que
se empleó en este proyecto, se utiliza una tarjeta Raspberry Pi, Arduino y un Sense
HAT para medir la temperatura.
En conclusión el robot Danchex v. 2.0 cuenta con una interfaz gráfica desarrollada
con Tkinter y Python, como se muestra en la Figura 3, en conjunto con la tarjeta Sense
Hat, las cuales son tecnologías Open Software y Open Hardware. Se destaca que
el empleo de software libre reduce los costos en comparación con otros programas
comerciales como LabView, MATLAB y Qt Creator dentro de la visión computadora
y desarrollo de interfaces gráficas (Fausto, 2018).
6
Figura 3. Interfaz gráfica de usuario
7
En la siguiente Figura 4 se observa el diagrama de red genérico que se utilizó para
este proyecto, aquí también se utiliza la placa Raspberry conectado a la nube y por
medio de sensores (DHT11) poder obtener la temperatura y humedad en tiempo
real.
8
Figura 5. Interfaz gráfica de usuario versión Beta
9
Figura 6. Interfaz Gráfica creada en Visual Studio Web
10
Figura 7. Diagrama de conexión para el sistema de monitoreo
11
Definición del problema
Por otra parte en el área de la industria el control sobre las máquinas se realiza de
forma directa es decir, debe estar al pendiente del buen funcionamiento de todo el
sistema, por lo cual resulta invertir tiempo en ello. Si se trabajan con muchas
máquinas al mismo tiempo se requiere mucho personal para la monitorización de
cada una de ellas resultando que se invierta más capital en los procesos de
producción.
12
Justificación
Hoy en día con la aparición del IOT, la mayoría de los sistemas embebidos están
siendo controlados a larga distancia por medio de la nube teniendo un gran impacto
en el área de domótica, automatización, proyectos de estudiantes, entre otros,
reduciendo el tiempo de chequeo de lo que es controlado. En este caso el módulo
ESP8266 NODEMCU tiene una gran potencia en el envío y recepción de datos al
igual que el ESP32, solo que este último cuenta con más puertos GPIO pero ambos
pueden ejecutar las misma funciones y el valor que se les da a estos
microcontroladores es que cuentan con un módulo Wifi que los hace llevar la
delantera en cuanto a los microcontroladores normales que no cuentan con este
módulo wifi.
Por otra parte la interfaz gráfica de usuario es una herramienta importante porque
por medio de ella se pude monitorear y controlar alguna actividad que se esté
realizando con algún microcontrolador conectado a la nube, como lo es la velocidad
y aceleración de los motores, encendido y apagado del sistema electrónico entre
otros, ya que esta creada y programada de acuerdo a los estándares requeridos
para su aplicación y función.
13
Objetivo general
Presentar una propuesta de interfaz gráfica de usuario, usando herramientas
de Python y Arduino, para poder controlar y monitorear sistemas embebidos
en la nube y aplicar esta propuesta en robots móviles.
Objetivos específicos
Realizar la programación referente a la interfaz mediante el programa de
Python.
Utilizar la librería de Python (Tkinter) para la creación del GUI.
Con los módulos ESP8266 y ESP32 realizar el circuito y trabajar como
maestro-esclavo.
Utilizar el Software Arduino para la programación de los módulos.
Ocupar la plataforma Blynk para realizar la comunicación de los módulos.
14
Meta de ingeniería
Desarrollar sistemas integrados mecatrónicos eficientes con la finalidad de que
lleven un enfoque guiado hacia control en la nube por medio de una interfaz gráficas
de usuario (GUI) para poder controlar y monitorear sistemas embebidos orientados
a la industria 4.0.
Marco teórico
Sistemas embebidos
Un sistema embebido es un sistema electrónico diseñado específicamente para
realizar unas determinadas funciones, habitualmente formando parte de un sistema
de mayor entidad. La característica principal es que emplea para ello uno o varios
procesadores digitales (CPUs) en formato microprocesador o DSP lo que permite
aportar inteligencia al sistema anfitrión al que ayuda a gobernar y de que forma
parte (Miñarro, 2009).
15
Módulo ESP8266 NODEMCU
ESP8266 es el nombre de un microcontrolador diseñado por una compañía china
llamada Espressif Systems en su sede en Shangai. Pero su producción en masa
inicio hasta principios del año 2014, donde se anunció que este chip sería una
excelente solución autónoma de redes Wi-Fi que se ofrece como puente entre los
microcontroladores que hasta ahora existen o que tienen la capacidad de ejecutar
aplicaciones independientes.
16
Figura 8. Datasheet ESP8266 nodemc
Características:
Código abierto
Programable
Bajo costo
Compatible con Arduino
10 GPIO cada GPIO puede ser PWM, 12C, 1-wir
FCC CERTIDIED WI-FI module
USB-TTL included, plug&play
Módulo ESP32
Creado por Espressif system, ESP32 es un sistema de bajo consumo y bajo costo
en un chips SoC (System On Chip) con Wi-Fi y módulo dual con Bluetooth. En el
fondo tiene un microprocesador Tensilica Xtensa LX6 de doble núcleo o de un solo
núcleo, con una frecuencia de hasta 240MHz.
17
ESP32 está altamente integrado con switch de antena, balun para RF, amplificador
de potencia, amplificador de recepción con bajo nivel de ruido, filtros y módulos de
administración de energía, totalmente integrados dentro del mismo chip.
Características principales:
Procesador principal: Tensilica Xtensa LX6 de 32 bits.
Wi-Fi: 802.11, 2.4GHz hasta 150Mbit/s.
Bluetooth: v4.2BR y Bluetooth Low Energy (BLE).
Frecuencia de Clock: Programable, hasta 240 MHz.
Rendimiento: hasta 600DMIPSD.
ROM: 448KB para arranque y funciones básicas.
SRAM: 520KB, para datos e instrucciones.
18
Figura 9. Datasheet ESP32
19
Figura 10. Ilustración interna del encoder rotativo
Driver TB6612FNG
El TB6612FNG que se observa en la Figura 11 es un controlador (driver) de motores
que nos permite manejar dos motores de corriente continua desde Arduino, variando
tanto la velocidad como el sentido de giro. Puede ser considerado una versión
mejorada del L298N, al igual que este, internamente está formado por dos puentes-
H, junto con la electrónica necesaria para simplificar su uso, y eliminar posibles
cortocircuitos por errores de uso.
20
Sin embargo, en el caso del TB6612FNG los puentes-H están formados por
transistores MOSFET, en lugar de transistores BJT como el L298N. Esto permite
que el TB6612FNG tenga mejor eficiencia y mejores dimensiones que el L298N.
Arduino
Arduino es una plataforma de prototipos electrónica de código abierto (open-source)
basada en hardware y software flexibles y fáciles de usar. Está pensado para
artistas, diseñadores, como hobby y para cualquier interesado en crear objetos o
entornos interactivos.
21
Entorno IDE de Arduino
El IDE de Arduino es una versión reducida del lenguaje C/C++, que no es lo más
indicado para iniciarse en la programación de instrucciones de código. Gracias a los
colores que utiliza en sus palabras reservadas se puede saber si una palabra no
está escrita correctamente. Las características que ofrece este entorno son:
Python
Básicamente Python es un lenguaje de programación de alto nivel, interpretado y
multipropósito. En los últimos años su utilización ha ido constantemente creciendo
y en la actualidad es uno de los lenguajes de programación más empleados para el
desarrollo de software.
Python puede ser utilizado en diversas plataformas y sistemas operativos, entre los
que podemos destacar los más populares, como Windows, Mac OS y Linux. Pero,
además, Python también puede funcionar en Smartphone, Nokia desarrollo un
intérprete de este lenguaje para su sistema operativo Symbian. Con este lenguaje
podemos desarrollar software para aplicaciones científicas, para comunicaciones
de red, para aplicaciones de escritorio con interfaz gráfica de usuario (GUI), para
crear juegos, para Smartphone y por supuesto, para aplicaciones web (Montoro,
2012).
Librería Tkinter
Tkinter es un binding de la biblioteca gráfica Tcl/Tk para el lenguaje de programación
Python, con estos queremos decir que Tk se encuentra disponible para varios
lenguajes de programación entre los cuales se encuentra Python con el nombre de
22
Tkinter. Este no es más que una capa de esta librería para el lenguaje Python con
lo cual usar Tk en otro lenguaje no nos supondrá un inconveniente.
23
interactivo entre la persona y el ordenador. “Es un método de interacción con un
ordenador a través del paradigma de manipulación directa de imágenes gráficas
controles y texto (Marreo, 2006).
Plataforma Blynk
Blynk es una plataforma de internet de las cosas para Android y iOS de control de
sistemas desarrollados con Arduino y Raspberry Pi. Con esta herramienta de trabajo
se pude diseñar interfaces gráficas para proyectos dibujando y poniendo controles
en la misma. El sistema no está limitado a ningún hardware específico. Solo se
requiere que tu proyecto con Arduino o RaspBerry Pi este linkeado a internet por
24
medio de Wifi, Ethernet o un ESP8266. De esta manera podrá conectarse con el
servidor Blynk y controlar tus sistemas.
Blynk es un proyecto realizado por personas de Nueva York, Kiev y Barsovia. Los
costos en el modo de desarrollo son nulos, permitiendo esto tener un prototipo a un
costo reducido. Luego de ello, se ofrecen diferentes planes de servicio dependiendo
de las exigencias del mismo.
Para realizar la presente investigación de estadía que tiene como principal objetivo
diseñar una interfaz gráfica de usuario en Python, para controlar sistemas
embebidos en las nube utilizando módulos ESP8266 nodemcu 12 y ESP32
programados en Arduino y realizando la conexión entre ellos mediante la plataforma
Blynk, se realizó el pseudocódigo del programa así como el diagrama de flujo
especificando todo el proceso que se llevó a cabo.
25
Pseudocódigo Maestro:
1. Algoritmo Proceso iterativo del programa (maestro)
2. Incluir librerías ESP y Blynk
3. Declarar variables (int, char, string, unsigned long)
4. Declarar código de blynk, red y contraseña
5. Leer dato de puerto virtual “0” correspondiente al potenciómetro, convertirlo
a valor hexadecimal y guardarlo en variable datos [0,1]
6. Leer dato de puerto virtual “5” correspondiente al motor 1, convertido en valor
hexadecimal y guardarlo en variable datos[2,3]
7. Leer dato de puerto virtual “6” correspondiente al motor 2, convertirlo en valor
hexadecimal y guardarlo en variable datos[4,5]
8. Leer dato de puerto virtual “2” correspondiente al botón 1, convertirlo en valor
hexadecimal y guardarlo en variable datos[6]
9. Leer dato de puerto virtual “3” correspondiente al botón 2, convertirlo en valor
hexadecimal y guardarlo en variable datos[7]
10. Leer dato de puerto virtual “4” correspondiente a botón 3, convertirlo en valor
hexadecimal y guardarlo en variable datos[8]
11. Conectarse con el dispositivo que enviara la información
12. Habilitar el puerto serial
13. Si dato recibido por el puerto referente a la interfaz es igual a “m”
14. Encender Led
15. Si dato recibido por el puerto referente a la interfaz es igual a “n”
16. Accionar motores
17. Si tiempo transcurrido >= 500 milisegundos (para evitar publicaciones
rápidas)
18. Publicar (datos,9)
19. Fin
26
Diagrama de flujo: Maestro
Inicio
Si recibe dato de
interfaz &
Declarar código (Blynk), tiempo
red y contraseña transcurrido Si
>=500
milisegundos
Fin
Leer puerto virtual 6,
convertirlo a
hexadecimal y guardarlo
27
Pseudocódigo: Esclavo
1. Algoritmo Proceso iterativo del programa (esclavo)
2. Incluir librerías ESP, Blynk, WiFi.
3. Asignar una tarea (0) en el micro
4. Definir variables:
Const int e int para asignar número de pin y valor de inicio
Unsigned long para tiempo
Double para rpm
Char para configurad la red a la que se conecta y auth token de la
plataforma
28
24. Si botón (1,2,3) presionado una vez
25. Botón (1,2,3) encendido
26. Si botón (1,2,3) presionado segunda vez
27. Botón (1,2,3) apagado
28. Evitar publicaciones rápidas entre envió de datos
29. Si tiempo <= ultimo_tiempo
30. Entonces tiempo = millis()
31. Si tiempo – ultimo_tiempo >=300 & aux4 = 0
32. aux4 = 1, envía por el puerto virtual 5 rpm motor1
33. Si tiempo – ultimo_tiempo >=600 & aux5 = 0
34. aux5 = 1, envía por el puerto virtual 6 rmp motor2
35. Si tiempo – ultimo_tiempo >=900
36. Reinicia tiempo, aux4 y aux5 a 0
29
Diagrama de flujo esclavo
Inicio
Si rpm2 <125 Si
Asignar tarea en micro & >= 0
ESP32
Motor1 disminuye
velocidad, motor2
No aumenta
Definir variables: const,
int, char, unsigned long,
double
Si rpm2 >= Si
251
Declarar función
“avanzar” para señal
rpm de los motores Velocidad motor1 y
motor 2 = 0
No
Declarar función
Velocidad motor1 y
“avanzar” para señal
motor 2 = 125 rpm
rpm de los motores
Motor1 aumenta
velocidad, motor2 Definir Canal, frecuencia
disminuye y resolución para pwm1
No y pwm2
30
Evitando publicaciones
rápidas:
tiempo = millis ()
Definir tarea en el
encoder
Si t – u_t >= Si
Lectura de los botones 900
(1, 2, 3)
Reinicia tiempo
No aux4 = 0 y aux5 = 0
Si botón (1,
Si
2, 3) es
pulsado
Fin
Botón (1, 2, 3) activado
No
Si botón (1,
2, 3) otra vez
pulsado
No
Si
31
Pseudocódigo interfaz
32
28. Crear interfaz: Geometría, titulo, color, estilo
29. Agregar cada una de las gráficas
30. Colocar en diferentes columnas
31. Posicionar cada gráfica
32. Definir variables: long, aux
33. Definir función Leer datos para graficar
34. Agregar etiquetas donde muestra el valor recibido del potenciómetro y rmp
motor 1 y 2
35. Configurar color, posición, texto, fuente y función (leer datos) de cada
etiqueta
36. Agregar widget Slaider para controlar rpm
37. Configurar color, posición, texto, fuente y función “enviar rpm”
38. Agregar botón iniciar
39. Configurar color, posición, y asignar función “iniciar animación”
40. Agregar botones (1,2,3)
41. Configurar posición, color, texto y fuente
42. Agregar botón pausar
43. Configurar posición, color, texto, fuente y función "pausar animación”
44. Agregar botón “LED OFF”
45. Configurar posición, color, texto y función “enviar dato led”
46. Agregar botón “Enviar rpm”
47. Configurar posición, color, texto y función “enviar rpm”
33
Diagrama de flujo: interfaz
Inicio
recibidos=9
No
34
Definir variables: long, aux
Si botón Si
“LED OFF”
presionado
Definir función leer datos para
Envía dato y cambia a estado gráficar
No “LED ON”
Si botón Si
“Pausar”
Agregar Slaider para controlar
+ presionado
rpm, configurar posición,
color, texto y asignar función
Detener animación y cambia a
“iniciar animacion”
No estado “Continuar”
35
Agregar botón “pausar”
configurar posición, color,
texto, fuente y asignar función
“pausar animación”
Fin
36
La siguiente Figura 12 muestra la interfaz gráfica de usuario final donde se puede
apreciar cada widget como los botones Slaider etc. Cada componente está ubicado
de acuerdo a posiciones en x y y, las gráficas reciben la señal del esclavo y los
botones envían datos por el puerto serial al maestro.
Botón pausar
Figura 12. Interfaz gráfica Botón
animación
Enviar rpm
37
En siguiente Figura 13 se muestra el circuito que se realizó para el proyecto, para
esto se utilizó el módulo wifi ESP32 que en la actualidad es un microcontrolador
de gran potencia para este tipo de trabajos. Los Encoders envían los pulsos para
ser graficados en la interfaz así como las señales del potenciómetro, los botones
al ser presionados envían la señal al maestro que muestra en la interfaz el cambio
de color de estos.
38
La siguiente Figura 14 se aprecia el módulo ESP8266 NODEMCU que se utilizó como
maestro en el proyecto, su función es enviar datos recibidos de la interfaz por el
puerto serial y así mismo recibir datos o señales del esclavo y enviarlas a la interfaz.
39
Validación de plataforma experimental
40
Figura 16. Estado inicial de interfaz gráfica
(Figura 17b), para iniciar la animación de cada una de las gráficas. La primera
tercera al motor2.
a) b)
Figura 17. Iniciar y detener animación
41
4. Presionar el botón “Pausa” (Figura 18a), que cambiara a estado “Continuar”
(Figura 18b), y cada una de las gráficas detendrá la animación y continuaran
hasta que se presione continuar.
a) b)
Figura 18. Pausar y continuar animación
a)
42
b)
7. En la parte de los motores hay dos formas de controlar la rpm de cada uno de
ellos; la primera es utilizando el Slaider (Figura 22a), deslizando de un lado hacia
otro para ajustar la velocidad deseada. Como ya se mencionó, al ejecutar la
interfaz los motores siempre tendrán una velocidad de 125 en ambos, pero con
el Slaider si se desliza todo hacia la derecha, conforme se valla deslizando el
motor1 va a girar más que el otro hasta llegar a 250 que es el máximo,
graficando la señal rpm (Figura 22b), quedando el motor2 parado.
43
a) Figura 22. Accionar y graficar motor1 b)
a) b)
8. El botón “Enviar rpm” (Figura 24) cumple la misma función que el Slaider solo
44
Conclusiones
45
Referencias bibliográficas
46
Montoro, A. F., 2012. Google Scholar. [En línea]
Available at: [Link]
[Último acceso: 06 2021].
47
48