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
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
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 |
- INSTALACION DE FIRMWARE EN PLACA Y BORRADO DE MEMORIA FLASH
- CONEXION POR CONSOLA A MYCROPYTHON
- SCRIPT DE CONTROL MICROPYTHON
- INTEGRACION DE SENSORES
- CONTENEDOR MYSQL SERVER
- CONSTRUCCION API FLASK
- CONTENEDOR FLASK SERVER
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
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
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
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
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
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
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
- MycroPython - Interprete Python para Microcontroladores
- Docker - Contenededores para Aplicaciones
- Python 3 - Lenguaje de Programacion Backend
- Materialize - Framework HTML,CSS,JS
- Modulo NodeMCU ESP8266EX -Microcontrolador WIFI 2.4 GHZ STEREN
- Documentacion ESP8266 - MATERIAL DIDACTICO Y GUIA PRINCIPAL
- Sensor Temperatura - SENSOR PARA MEDICION DE TEMPERATURA
- Sensor Pulso Cardiaco - SENSOR PARA MEDICION DE TEMPERATURA
nadiel