Práctica 5: Almacenamiento Local
Objetivo: Obtener datos de los sensores y almacenarlos en el Raspberry Pi por medio de un DBMS.
Forma de trabajo:
Planteamiento del Problema:
- ¿Cómo un dispositivo de IoT almacena información?
Pre-Requisitos:
Desarrollo:
PARTE 1: DBMS
- Se requiere instalar un DBMS en el Raspberry Pi.
- Crear una base de datos ("datos").
- Crear una tabla ("clima").
- En nuestra tabla (clima) almacenaremos los siguientes datos:
- id
- firma
- latitud
- longitud
- fecha
- hora
- variable
- valor
(hacer click sobre la imagen para hacer mas grande):
PARTE 2: Obtener y almacenar fecha/hora
- Para llenar los campos "fecha y hora", se hará una petición a los "servidores de tiempo" que existen en Internet (lo que se vió en la práctica sobre sincronización de tiempo), con su respectivo de ajuste de tiempo por retraso en la llegada del paquete. De ejemplo se utilizó la siguiente fecha y hora:
- Fecha: 20200326
- Hora: 14:20
- Para llenar el campo "utc", como estamos en México a -6 horas de la hora de Greenwich (que es UTC=0) y que es la referencia mundial, entonces almacenaremos en el campo "utc" el siguiente valor:
(hacer click sobre la imagen para hacerla mas grande):
PARTE 3: Obtener y almacenar posición (geolocalización)
- Si vamos a virtualizar la Raspberry (o no tenemos el módulo GPS) asignaremos 2 constantes donde almacenaremos los datos. Un ejemplo son las siguentes coordenadas de un punto dentro del Edificio "O" que está en el Tecnológico:
- Latitud: 19.721830
- Longitud: -101.185828
- Si se quiere hacer una geolocalización real y exacta, es necesario comprar un módulo GPS NEO6M, el cual se conecta al Raspberry. Hay que con configurarlo por software y hacer un programa en Python que extraiga los valores del GPS (Latitud y Longitud):
Módulo GPS NEO6M (hacer click sobre la imagen para hacerla mas grande):
PARTE 4: Asignar ID y crear Firma Digital
- En el campo "id" guardaremos el nombre que le asignaremos al sensor que nos da la información, para este ejemplo utilizaremos el sensor de temperatura que le asignaremos el siguiente valor:
- En el campo "firma" guardaremos la "Firma Digital" que le vamos a asignar al sensor, es única y nunca viajará por Internet. La firma nos servirá para generar el "Certificado Digital" que nos autenticará nuestro sensor ante la red. Se requerirá de un programa en Python que nos genere la "firma". La firma de ejemplo es:
Ejemplo de una firma digital (hacer click sobre la imagen para hacer mas grande):
Código de Ejemplo para generar una firma digital (hacer click sobre la imagen para hacer mas grande):
PARTE 5: Obtener y almacenar datos del sensor (temperatura)
- En el campo "variable" vamos a guardar el tipo de dato que vamos a almacenar, para este caso guardaremos;
- En el campo "valor" guardaremos valor que se reciba el sensor, por ejemplo "31", donde el 31 nos indicará que se recibió una temperatura de 31 grados centígrados.
- Si se quiere hacer una medición real y exacta de la temperatura, es necesario comprar un sensor DHT11, el cual se conecta al Raspberry. Hay que con configurarlo por software y hacer un programa en Python que extraiga los valores de la temperatura:
Sensor de Temperatura DHT11 (hacer click sobre la imagen para hacer mas grande):
- Si no tenemos el sensor (o estamos virtualizando el Raspberry) se puede obtener la temperatura actual a través de un servicio gratuito en Internet (se recomienda OpenWeather, aunque se puede utilizar cualquier otro).
- Para obtener la teperatura hay que registrarse en el sitio "OpenWeather API Account" para que nos asignen un "token", el cual es el "API Key" con el cual nos conectaremos a OpenWeather para hacer peticiones. Un ejemplo de api_key = "0123456789abcdef0123456789abcdef" (es un ejemplo, no funciona). A continuación el enlace para registrarse y obtener su api_key:
- El siguiente paso es encontrar el id de la ciudad que quieres encontrar datos, para ello hay que descargar y descomprimr un archivo que contiene los id de muchas ciudades del mundo. Hay varios archivos y formatos, yo les recomiendo city.list.json.gz que se descarga del siguiente sitio (por ejemplo, el id de Morelia es: 3995402):
- Ya solo hace falta el programa en Python para hacer la conexión, enviando como parámetros el id de la ciudad, el api_key y el sistema de medidas (métrico). NOTA: Deben colocar su propio API_KEY
(hacer click para hacer mas grande):
- El dato que regresa la API de OpenWeather es un JSON que contiene diferentes tipos de información acerca de la ciudad que solicitamos:
(hacer click para hacer mas grande):
- Ya que tengamos la temperatura, entonces la almacenaremos en el campo "valor", y para este ejemplo es un número que nos indicará el valor que se recibió del sensor, por ejemplo "31", donde el 31 nos indicará que se recibió una temperatura de 31 grados centígrados, asi que guardaremos:
Material de apoyo para realizar la práctica:
Manuales para conexión de Sensores
- "Kit de 37 sensores compatibles con Arduino", BricoGeek (archivo PDF).
- "Arduino 37 Sensor Kit First acquaintance", Samuel Kosolapov (archivo PDF).
- "KIT-SEN-ACT", Kit de sensores y actuadores compatibles con Arduino, AG Electrónica (archivo PDF).
- "37 - in - 1 Sensor Kit for Arduino", Tyson Poynick (archivo PDF).
- "The 37 Sensor Kit Tutorial", RobotLinking (archivo PDF).
Reporte del alumno (resultados):
- Crear un programa en Python que lea todas las variables anteriores y las almacene en MySQL.
FECHA DE ENTREGA LÍMITE:
Portal de Tecnología desarrollado por: Rogelio Ferreira Escutia