https://github.com/mooncos/roompi
RPi-based Smart Environmental Monitoring System for indoor areas with wireless connectivity and control
https://github.com/mooncos/roompi
c co2-monitoring docker grafana humidity-monitoring influxdb iot light-monitoring python rpi temperature-monitoring
Last synced: 28 days ago
JSON representation
RPi-based Smart Environmental Monitoring System for indoor areas with wireless connectivity and control
- Host: GitHub
- URL: https://github.com/mooncos/roompi
- Owner: mooncos
- License: other
- Created: 2021-03-26T18:36:31.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-06-29T11:06:30.000Z (11 months ago)
- Last Synced: 2025-05-04T21:14:05.926Z (28 days ago)
- Topics: c, co2-monitoring, docker, grafana, humidity-monitoring, influxdb, iot, light-monitoring, python, rpi, temperature-monitoring
- Language: C
- Homepage:
- Size: 5.66 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README-ES.md
- License: LICENSE
Awesome Lists containing this project
README
# RoomPi
> Sistema de monitorización ambiental para interiores
> Proyecto Innovador SDG2 curso 2020-2021##### Autores: Victoria M. Gullón y Marcos Gómez
## Introducción
RoomPi es un sistema de monitorización de las condiciones ambientales en interiores. Está desarrollado sobre el hardware RaspberryPi 2B.

## Sistema
Actualmente el sistema hace uso de los siguientes sensores y actuadores así como otros dispositivos:
- Sensores
- DHT11 (temperatura y humedad)
- BH1750 (luxómetro)
- CCS811 (CO2 equivalente)
- Actuadores
- HD44780 (pantalla de caracteres de dos líneas)
- SN74HC595 (shift register de 8 bits para tira de LEDs)
- Buzzer activo
- Control
- 3 botones en la parte frontal
- Adicional
- Regulador de tensión LM117## Compilación del ejecutable
| :warning: _Antes de compilar_ es necesario tener todas las [librerías y dependencias](#dependencias) instaladas |
| :--- |El proyecto hace uso de las siguentes librerías:
- wiringPi
- pthread
- rt
- libcurlPara compilar es necesario hacerlo con las librerias especificadas, en Raspbian:
```sh
gcc src/*.c src/sensors/*.c src/actuators/*. src/libs/*.c src/controllers/*.c -lpthread -lrt -lwiringPi -lcurl -o "roompi-bin"
```Para cross compile en Eclipse instalar la toolchain para Raspbian armhf y compilar desde Eclipse.
## Subsistema web ([Docker](https://docs.docker.com/get-started/overview/))
El subsistema web está compuesto por los siguientes elementos:
- BBDD [InfluxDB](https://docs.influxdata.com/influxdb/v2.0/)
- Tablero [Grafana](https://grafana.com/tutorials/grafana-fundamentals/?pg=docs)
- Gestor de BBDD [Chronograf](https://docs.influxdata.com/chronograf/v1.8/)
- Aplicación de configuración en [Flask](https://flask.palletsprojects.com/en/2.0.x/)Todos estos sistemas funcionan como contenedores y están orquestrados por el [servicio Docker](https://docs.docker.com/get-started/overview/#the-docker-daemon).
Para configurar y arrancar los proyectos es necesario tener [instalados Docker](https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script) y [docker-compose](https://docs.docker.com/compose/install/) en el sistema host y editar el archivo `.env` con el usuario y contraseñas desados para la instancia de Grafana e InfluxDB.
Después, en la raíz del proyecto se debe ejecutar
```sh
docker-compose up -d
```Para detener todos los servicios se puede ejecutar lo siguiente (añadir `-v` al comando para también eliminar los [volúmenes persistentes](https://docs.docker.com/storage/volumes/) que se hubiesen creado)
```sh
docker-compose down -d
```Los contenedores están configurados para reiniciarse en caso de tener algún fallo e iniciarse automáticamente al arrancar el sistema.
## Dependencias
En caso de querer trabajar sobre el código fuente del proyecto se deben tener en cuenta las siguientes dependencias utilizadas:
### Compilador C
El compilador C debe compilar para la arquitectura arm32v7 que utiliza el chip BCM2836, para ello se necesitan instalar las siguientes dependencias en Linux
```sh
sudo apt-get install -y libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi libncurses5-dev build-essential bison flex libssl-dev gcc-arm-linux-gnueabihf
```### Librerías para el ejecutable en C
Para instalar las librerías utilizadas en el proyecto es necesario compilar e instalar dichas dependencias. Las librerías necesitan tener `git` para descargarse.
- wiringPi
```sh
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
```- libcurl
```sh
sudo apt-get install -y autotools-dev autoconf libtool
git clone https://github.com/curl/curl
cd curl/
autoreconf -fi
./configure --without-ssl
sudo make install
```### Librerías para la app web de ajuste con Flask en Python
Para desarrollar sobre la aplicación web personalizada para ajustar los parámetros del sistema se necesita instalar las siguientes dependencias
- Python 3.8
```sh
sudo apt-get install -y checkinstall libreadline-gplv2-dev libncursesw5-dev libssl-dev build-essential
cd /opt
sudo wget https://python.org/ftp/python/3.8.7/Python-3.8.7.tgz
sudo tar xzf Python-3.8.7.tgz
cd Python-3.8.7
sudo ./configure --enable-optimizations
sudo make altinstall # para evitar reemplazar el binario Python del sistema
python3.8 -V
```Para el desarrollo web se recomienda el uso de un entorno virtual de Python. El gestor de paquetes de Python pip se instala automáticamente en el entorno virtual. En la carpeta `flask-config-roompi` del proyecto web:
- venv
```sh
python3.8 -m venv venv
source venv/bin/activate
```- Flask y demás dependencias
```sh
pip install -r requirements.txt
```La aplicación web utiliza [jQuery](https://api.jquery.com/) y [Bootstrap](https://getbootstrap.com/docs/5.0/getting-started/introduction/) para la interfaz de usuario.