DanyeDarko / softhHealth

PROYECTO DE CONSTRUCCION DE UN DISPOSITIVO CAPAZ DE MONITOREO LA TEMPERATURA Y PULSO CARDIACO PARA SU ANALISIS Y REPRESENTACION MEDIANTE UN NAVEGADOR WEB ,CONSTRUIDO CON MYCROPYTHON EN UN DISPOSITIVO NodeMCU ESP8266

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SofthHealth

PROYECTO DE CONSTRUCCION DE UN DISPOSITIVO CAPAZ DE MONITOREAR LA TEMPERATURA Y PULSO CARDIACO CON EL USO DE SENSORES ,LOS CUALES ESTARAN CONECTADOS A UN DISPOSITIVO 'NodeMCU ESP8264' EL CUAL INCLUYE TCP/IP STACK INCLUIDO QUE NOS PERTMITIRA LA PROGRAMACION DE EL CHIP ,REALISANDO EL CONSUMO DEUNA API FLASK LA CUAL RENDERIZA LOS DATOS EN TIEMPO REAL , EL FIRMWARE MYCROPYTHON NOS PERMITIRA TOMAR EL CONTROL DE NUESTRA PLACA MEDIANTE LENGUAJE Python

Comenzando ๐Ÿš€

Para Descargar y desplegar el proyecto Es necesario contar con git ,una terminal o algun cliente git como lo es GitKraken,Plugins incluidos en IDE's.

     $ git clone https://github.com/DanyeDarko/softhHealth.git

Pre-requisitos ๐Ÿ“‹

Para despleguear el proyecto es necesario contar con los siguientes componentes

Componente Caracteristicas Uso
NodeMCU ESP8266EX 2,4GHZ 3.3 V ALIMENTACION CONEXION SENSORES-TCP/IP HTTP SERVER
MYCROPYTHON FIRMWARE CONTROLADOR NodeMCU INTERFAZ DE PROGRAMACION HARDWARE / HTTP SERVER
PROTOBOARD TABLILLA DE CONEXIONES NECESARIA PARA PRUEBAS
LIBRERIA 'esptool.py ' LIBRERIA PYTHON CONTROL DE FLASH E INSTALACION FIRMWARE MYCROPYTHON PARA LINUX-NodeMCU
PYTHON/FLASK LENGUAJE DE PROGRAMACION/MICROFRAMEWORK DESPLIEGE DE API PYTHON / WEB SERVER APP SOFHTHEALTH
SQLAlchemy MODELADO DATABASE/BACKEND DESPLIEGE DE API PYTHON / WEB SERVER APP SOFHTHEALTH
DOCKER CONTENEDORES LINUX EMPAQUETAR APLICACION PARA SU INTEGRACION Y DESPLIEGE AGIL

Wiki ๐Ÿ“–

ENTORNO VIRTUAL DE TRABAJO

por buenas practicas es recomendable crear un entorno virtual antes de comensar a trabajar(durante el desarrollo del proyecto se utiliso python en su version 3.7.3)

$ python3 -m venv [virtualenv_name]; source [virtualenv_name ]/bin/activate

INSTALACION DE FIRMWARE EN PLACA Y BORRADO DE MEMORIA FLASH ๐Ÿ”ง

Lo primero a realizar es borrar la memoria FLASH de nuestro dispositivo ,para asegurarnos que este libre de configuraciones Mediante el gestor de paquetes de python,PIP instalaremos esptool , La cual puedes encontrar mas documentacion en el Repositorio Oficial de esptool.py

 $ pip install esptool

Ahora procedemos a borrar la memoria flash de nuestro dispositivo ,Una ves conectado por USB verificamos el puerto de conexion o serial Hacia el componente NodeMCU y sus PINES RX Y TX

 # dmesg | grep -i tty

Normalmente tendremos disponible un puerto ttyUSB0 para conexion en caso Linux y COM 5 en caso Windows_,solo se puede acceder a la gestion de estos puertos mediante permisos de usuario administrador ,por lo que para realisar esto se debera activar el entorno virtual como administrador o root. Procedemos a borrar la memoria flash una ves identificado el puerto de conexion al NodeMCU

 # esptool.py --port /dev/ttyUSB0 erase_flash

Si el procedimiento es el correcto nos encontraremos con las siguientes lineas de salida :

  • Puerto serial de comunicacion
  • Tamaรฑo de flash 4mb
  • *Modelo de chip ESP8266ex
  • Direccion MAC del chip
  • Estatus de borrado de flash

STDOUT AL COMANDO DE BORRADO DE MEMORIA FLASH

Nececitamos disponer ahora del Firmware que nos permitira controlar el MCU del dispositivo NodeMCU con MyCROPYTHON Disponemos de el mediante La pagina Oficial de MicroPython en el apartado *ESP8266

Una vez descargado el firmware ,Abrimos una terminal en la locacion de descarga e instalamos el firmware en el NodeMCU Por el puerto serial ttyUSB0

 # esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20170108-v1.11.7.bin

La salida por consola sera bajo el siguiente codigo,si no existio ningun error en la escritura del firmware dentro del chip

STDOUT AL COMANDO DE INSTALACION DE FIRMWARE

CONEXION POR CONSOLA A MYCROPYTHON ๐Ÿ“Ÿ

Para entrar a la consola es necesario un emulador como Screen ,Teraterm o Picocom,En nuestro caso optamos por Picocom la velocidad del puerto(ttyUSB0 o COM) sera : 115200

 $ picocom /dev/ttyUSB0 -p1152000 

La salida de la consola sera parecida a la siguiente :

ahora procederemos a activar el control webREPL para transmitir archivos directamente al dispositivo ,pero antes ,Desarollaremos el Script de conexion Hacia un AP o ROUTER WIFI que permita los siguientes bandas

Estandar Frecuencia Velocidad De Transmision Canales
802.11 b 2.4 GHZ 11 Mbps 1,6,11
802.11 g 2.4 GHZ 54 Mbps 6,9,12,18,24

Antes de conectarnos via Navegador debemos establecer una contraseรฑa para estas conexiones por puerto Web,Para mayor seguridad

Una ves dentro de la consola tecleamos :

>> import webrepl_setup

Seguimos las instrucciones de asignacion de contraseรฑa y Habilitar Control Web

Para nuestra conveniencia WebREPL ya tiene un cliente Web disponible para nosotros , podemos incluso instalarlo de forma Local desde su repositorio


๐Ÿ“Œ NOTA: ANTES DE PROCEDER A ACCEDER POR WEBREPL PARA TRASNMITIR ARCHIVOS SCRIPT A FLASH DEBEMOS CONFIGURARLO COMO CLIENTE WIFI CON MICTOPYTHON MEDIANTE EL SERIAL TTYUSB0 Y PICOCOM(TERMINAL/CONSOLA)

Lo primero que debemos realizar es un archivo en nuestra estacion de trabajo con su Editor o IDE preferido soportando Python ,guardar el archivo con extension .py

SCRIPT pythonSCRIPT.py ๐Ÿ“–

Este archivo esta nombrado en el proyecto cmo pyhonSCRIPT.py su contenido es el siguiente:

  • 1.1 EXPORTAMOS LIBRERIAS Y UTILIDADES DE PYTHON :

Es necesario importar librerias para el funcionamiento de algunos comandos sobre NodeMcu

machine: Entrar en contacto con el Hardware de el modulo en este caso con los pines ,para encender el LED al conectarse a una red

network:Configuracion y acceso a informacion de Interfaces de red

time:Obtiene datos de tiempo y configura funcion de sleep para componentes

 import machine,network,time # IMPORTACION DE LIBRERIAS NECESARIAS PARA FUNCIONAMIENTO DEL PROGRAMA
  • 1.2 CREACION DE VARIABLES GLOBALES: Las variables globales definidas se explican a continuacion para su mayor comprension:

Esta variable deriva del uso de la libreria network para poder interactiar con STA_IF una interfaz de modo cliente wifi que nos brinda NodeMcu ,por lo tanto para usarla la exportamos a una variable para hace uso de sus funciones mas adelante

 interfaz_wlan = network.WLAN(network.STA_IF) 

Esta variable nos permitira hacer parpadear el chip ,con el uso de la libreria machine controlamos un componente de hardware,que seria el pin numero 2 y sera utilizado como una SALIDA(OUT) de eventos

 pin = machine.Pin( 2 , machine.Pin.OUT)
  • 1.3 CREACION DE METODO DE CONEXION A ROUTER O AP WIFI

Definimos un nuevo metodo dentro de esta clase ,con el cual nos vamos a conectar a Una red WIFI con dos parametros SSID DE RED Y PASSWORD WPA/PSK DE LA RED ,los cuales seran recibidos como parametros al llamar al metodo

 def conectarWIFI( wifi_SSID , wifi_PSSWD):
  • 1.3.1 CONDICION BOLEANA DE INTERFAZ DE RED ACTIVA

Comprobamos que la Interfaz se encuentre activa,con la ayuda de la variable creada con la libreria network ,llamamos al metodo active() que nos devuelve un valor Falso si esta desactivada o True si la interfaz esta activa

if not interfaz_wlan.active():
         print('INTERFAZ NO ACTIVADA ,ACTIVANDO LA INTERFAZ WLAN ...')
         interfaz_wlan.active(True)

Si la Interfaz esta desactivada entonces con ayuda del mismo metodo mandando el parametro True activamos la interfaz dentro de nuestro dispositivo ,listo para su configuracion

  • 1.3.2 CONDICION BOLEANA DE INTERFAZ DE CONEXION A WIFI ACTIVA _Comprobamos si la interfaz se encuentra conectada a un dispositivo Router o AP con el metodo isconnected(),si devuelve falso esta sera asociada a un nuevo Router o AP con el metodo connect(wifi_ssid ,wifi_pasword) al cual se invoca y se le mandan las variables como parametros
  if not interfaz_wlan.isconnected():
         print('\n CONECTANDO A LA RED ', end='')
         interfaz_wlan.connect(wifi_SSID, wifi_PSSWD)
  • 1.3.3 BUCLE DE CONEXION A RED

Mientras la red este desactivada y aun no establesca comunicacion con el Router o AP ,Encenderemos el led de manete intermitente con la ayuda de la variable pin definida por la libreria machine para control de hardware y time para dormir el componente durante 500 milisegundos

while not interfaz_wlan.isconnected():
              print('.', end='')
              pin.off()
              time.sleep_ms(500)
              pin.on()
              pass
  • 1.4 IMPRESION DE DATOS DE INTERFAZES Y CONEXION DE RED Si la conexion esta establecida ,la libreria ubinascii para caracteres y digitos numericos ,E imprimiremos la direccion MAC y la direccion IP de nuestra tarjeta para comprobar la conectividad
 import ubinascii
    print()
  • 1.4.1 IMPRESION DE DIRECCION MAC Con ayuda de la libreria network y el metodo config para obtener la mac Decodificamos el hexadecimal para caracteres comunes y poder visualisarla
    print("DIRECCION MAC: ", ubinascii.hexlify(network.WLAN().config('mac'),':').decode())   # Imprime la direcciรณn MAC
  • 1.4.2 IMPRESION DE DIRECCION IP Con la variable creada para el control de la interfaz,utilizando el metodo ifconfig() obtendremos datos de la capa de Red de nuestro modulo ESP8266EX
 print("WLAN IP/netmask/gtwy/DNS: ", interfaz_wlan.ifconfig(),"\n")

Una ve explicadas estas lineas es necesaria compilarlas de una por una dentro de Picocom o el emulador de terminal de preferencia ,via tty o serial de comunicacion hacia la placa ejecutaremos de la siguiente manera :

>> conectarWIFI( 'ssid_de_Red_a_Conectar', 'password_de_Red_a_Conectar'):

Estando conectado a internet nos arrojara,Nuestra direccion IP si ya se encuentra conectada ,de lo contrario llamar el metodo nos ayudara a establecer comunicacion

RESPUESTA A COMANDO DE CONEXION A RED WIFI

CONEXION Y ENVIO DE SCRIPTS POR WebREPL ๐Ÿ”ฉ

Entramos al cliente WebREPL de nuestro navegador web o local ,para transmitir scripts a la memoria flash del dispositivo

Antes de enviarlo ,dentro de la terminal de MycroPython por serial ttyUSB0 o COM teclearemos los siguientes comandos

>> import os

Importamos la libreria OS para modalidades de sistema Operativo como leer archivos ,crear y listar directorios,lo cual realizaremos para ver el contenido de la flash con el metodo listdir() de la libreria OS :

>> os.listdir()

Observamos que podemos tener los siguientes archivos

Nombre Archivo Funcion
boot.py se ejecuta siempre que se arranca el modulo (Si existe)
webrepl_cfg.py configuracion de la sesion WEB remota
main.py ejecutado despues de boot.py acciones secundaria

Colocamos la direccion IP que mantiene nuestro dispositivo en la Red ,el puerto sera por defecto,una ves ingresados camos click en conectar y realizara una nueva sesion al dispositivo ,Elegimso la Opcion Browse Files buscamos el script de Conexion Wifi y de Socket con web service para el envio de Datos y le damos enviar

IMAGEN DE CONFIGURACION DE IP EN WERPL

Volvemos a enlistar los archivos y notaremos que existe uno nuevo llamado scriptPython.py el cual contendra las instrucciones para conexion a un router WIFI o AP y el socket API de envio de datos a un servidor

INTEGRACION DE SENSORES ๐Ÿ”—

CONTENEDOR MYSQL ๐Ÿšข

CONSTRUCCION API FLASK ๐Ÿ

CONTENEDOR FLASK SERVER ๐Ÿšข

INDEX HTML ๐Ÿ“–

Construido con ๐Ÿ› ๏ธ

Autores โœ’๏ธ

nadiel

About

PROYECTO DE CONSTRUCCION DE UN DISPOSITIVO CAPAZ DE MONITOREO LA TEMPERATURA Y PULSO CARDIACO PARA SU ANALISIS Y REPRESENTACION MEDIANTE UN NAVEGADOR WEB ,CONSTRUIDO CON MYCROPYTHON EN UN DISPOSITIVO NodeMCU ESP8266


Languages

Language:Python 45.4%Language:HTML 41.3%Language:Dockerfile 13.3%