Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de Madrid
Escuela Técnica Superior de
Ingenieros Informáticos
28 de junio de 2023
El sistema está diseñado para ser escalable, permitiendo de forma sencilla la incorpo-
ración de nuevos dispositivos de forma sencilla. A lo largo de este trabajo se analizan las
diferentes tecnologı́as utilizadas, ası́ como las diferentes alternativas que se han tenido en
cuenta para el diseño y realización del sistema. Se analizan factores como la seguridad, la
escalabilidad, la eficiencia energética, el precio, la facilidad de uso, etc.
i
Abstract
This work focuses on the design, realization and testing of a nursery control system,
which allows the monitoring and control of the environmental parameters of this environ-
ment. The system is designed to be secure, both in terms of the security of the data it
generates, and the access that users will have to manipulate its configurations. For this
purpose, a control system based on ESP32 microcontrollers has been designed, which com-
municate with each other through a server hosted on a Raspberry Pi, which acts as an
application server and broker following the MQTT communications protocol. The system
allows the monitoring and control of the environmental parameters of the environment, as
well as the configuration of the devices that compose it.
iii
Tabla de contenidos
1 Introducción 1
1.1 Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Profundización en los objetivos . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1 Variables a controlar . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.2 Detalles de los sensores y actuadores . . . . . . . . . . . . . . . . . . 3
1.3.3 Detalles de la Comunicación . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.4 Detalles de la operación de los dispositivos . . . . . . . . . . . . . . 4
3 Desarrollo 9
3.1 Primeros pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.1 Dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.1.1 Raspberry PI 3 . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.1.2 ESP32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.2 Software base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.2.1 Red de comunicaciones, protocolo MQTT . . . . . . . . . . 14
3.1.2.2 Espressif, firmware para los ESPs . . . . . . . . . . . . . . 15
3.2 Diseño del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.1 Comunicación fı́sica . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1.1 Protocolo I2C . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.1.2 Implementación en código . . . . . . . . . . . . . . . . . . . 21
3.2.2 Comunicación inalámbrica . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.2.1 Conexión a la red WiFi . . . . . . . . . . . . . . . . . . . . 22
3.2.2.2 Implementación (ESP32) . . . . . . . . . . . . . . . . . . . 23
3.2.2.3 Servidor MQTT . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.3 Diseño del mensaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.3.1 Seguridad del mensaje . . . . . . . . . . . . . . . . . . . . . 25
3.2.3.2 Cifrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.3.3 Verificación de integridad . . . . . . . . . . . . . . . . . . . 27
3.2.3.4 Estructura del mensaje en claro . . . . . . . . . . . . . . . 27
3.2.3.5 Consumos de energı́a . . . . . . . . . . . . . . . . . . . . . 28
3.3 Puesta en funcionamiento del sistema . . . . . . . . . . . . . . . . . . . . . 31
4 Resultados y conclusiones 35
5 Análisis de impacto 37
v
1 Introducción
1.1. Motivación
La motivación para implementar este sistema tiene como raı́z la búsqueda de un entorno
óptimo para favorecer el crecimiento de las plantas. La búsqueda de estas condiciones
óptimas viene impulsada por los beneficios a las distintas industrias y enfoques que se
pueden obtener de un entorno botánico controlado.
Siendo ejemplo de esto el cuidado de especies delicadas y con posibilidad de entrar en
riesgo de extinción, producción de elementos para la industria médica, industria alimenti-
cia o como agricultura recreativa para jardines o exposiciones.
1
Introducción
1.2. Objetivos
En este trabajo se pretende explicar el diseño de un sistema de control autónomo para un
entorno botánico. Dicho sistema deberá cumplir ciertos requisitos en lo que a la seguridad
se refiere:
El sistema debe ser seguro para las especies que sean monitorizadas por este sistema,
es decir, el sistema no debe de permitir adoptar configuraciones que puedan resultar
perjudiciales para las plantas. Entendiéndose como perjudiciales aquellas que puedan
provocar la muerte no intencionada de las plantas.
Los elementos del sistema deben estar autenticados, es decir, solo dispositivos váli-
dos deberan poder acceder a él. Y los mensajes deberán contener información que
permita identificar al emisor.
2
1.3. Profundización en los objetivos
2. Los editores: Estos dispositivos serán los encargados de publicar los mensajes en la
red. En este caso serán los microcontroladores esp32 que tengan acceso a sensores y
necesiten publicar datos leidos de dichos sensores.
3
Introducción
Dado que hay una gran diferencia entre todas las variables a controlar, los sensores y
actuadores que se utilizarán serán muy variados. Esta variabilidad en los modelos repercute
en el número de protocolos de comunicación hardware necesarios para controlarlos (I²C3 ,
SPI4 , GPIO5 ), tiempos de refresco, tamaño en bytes de las mediciones y/o órdenes, etc.
Por lo tanto, se deberá tener en cuenta la variabilidad de los sensores y actuadores a la
hora de diseñar la arquitectura del sistema.
Ser confidencial, es decir, que los mensajes no puedan ser leı́dos por terceros.
Ser autenticada para evitar que terceros puedan enviar mensajes falsos.
3
https://www.i2c-bus.org/
4
https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
5
https://es.wikipedia.org/wiki/GPIO
6
https://es.wikipedia.org/wiki/Cifrado_(criptograf a), https://es.wikipedia.org/w
iki/Identificador_ nico_universal, https://es.wikipedia.org/wiki/Identificador_ nico,
https://es.wikipedia.org/wiki/Suma_de_verificacin
4
2 Estado del arte
2.1. Contexto
El internet de las cosas está cada vez más cerca y más integrado en las vidas de las
personas. Partiendo desde dispositivos más estáticos como podrı́a ser la puerta de una
cochera, o un contador de luz hasta elementos más interactivos como un robot de cocina,
nevera o sensores de glucosa para diabéticos. Aunque incluido el ámbito doméstico no es
el único espacio en el que se encuentran estos sistemas. En la industria, la agricultura, la
sanidad, la educación, etc, en todos estos ámbitos surge la necesidad de diseñar sistemas
seguros y fiables que puedan ser utilizados por personas comunes.
Pais % de ataques
1 China 42.19 %
2 India 14.20 %
3 Estados Unidos 5.07 %
4 Rusia 4.22 %
5 Brasil 3.83 %
Figura 2.1: Paı́ses con más ataques sufridos IOT en el primer semestre de 2021.[6]
1
https://s1.q4cdn.com/695946674/files/doc_financials/1999/5f4c9889-9888-fad2-4f33-b24
dbe5ba9e5.pdf
5
Estado del arte
Con la creciente amenaza también surge la necesidada de protegerse contra estos ata-
ques por lo que surgen organizaciones[7], leyes, decretos[8] e informes[9], para intentar
estandarizar, regular y dar a conocer procedimientos y buenas prácticas. Todo lo anterior
con el objetivo de proteger a los usuarios de estos dispositivos y a la sociedad en general.
En un contexto más cercano a este proyecto podemos hablar de los dispositivos dispo-
nibles en el mercado. Por ejemplo, existen implementaciones comercializadas4 y multitud
de tutoriales5 para implementar sistemas de riego inteligentes.
En ámbitos industriales como puede ser un vivero, invernadero, floristerı́a... no se en-
cuentran empresas que ofrezcan soluciones adaptables para todas estas situaciones. Aunque
para escenarios caseros o para el mundo maker6 si existen soluciones estas cuentan con dos
inconvenientes principales: (1) El primero es la poca documentación de la construcción del
dispositivo7 y (2) el segundo es la falta de seguridad en estos dispositivos. En muchos casos
2
Por ejemplo como gestor de la información o servidor MQTT, que se verá más a delante.
3
Refiriendose a Proceso pesado capaz de ejecutar multiples hilos concurrentemente pero sin la estruc-
tura de un sistema operativo
4
Por ejemplo: https://es.aliexpress.com/item/4000049645084.html?gatewayAdapt=glo2esp,
https://www.amazon.co.uk/Reland-Sun-Capacitive-Moisture-Temperature/dp/B099FKKKH3...
5
Como: https://docs.arduino.cc/tutorials/mkr-iot-carrier/smart-garden-project, https:
//dronebotworkshop.com/soil-moisture/...
6
La cultura maker: https://es.wikipedia.org/wiki/Cultura_Maker
7
Esto se verá reflejado más adelante en el apartado de desarrollo con un dispositivo usado en este
proyecto.
6
2.2. Situación actual
las soluciones de firmware que proponen estos turoriales, o directamente comercializan los
creadores de estos dispositivos, son esencialmente inseguras.
Esta falta de seguridad tiene como consecuencia la exposición total de datos a un ata-
cante, además de la posibilidad de que el atacante pueda tomar el control del sistema, y
arruinarlo definitivamente, o secuestrarlo y pedir un rescate por el mismo.
7
3 Desarrollo
3.1.1. Dispositivos
3.1.1.1. Raspberry PI 3
1GB RAM
40 pines GPIO con capacidad de que sean usados como puertos I/O con protocolos
como I2C, SPI, UART, etc.
1
Ver https://www.intel.com/content/www/us/en/products/docs/boards-kits/nuc/what-is-nuc
-article.html
9
Desarrollo
Los fabricantes de este dispositivo ofrecen un sistema operativo basado en Linux lla-
mado Raspberry PI OS, una versión modificada de la distribución Debian de Linux. Este
sistema operativo está diseñado especificamente para este dispositivo. Lo distribuyen di-
rectamente los fabricantes y se puede descargar desde la página oficial de Raspberry PI[11].
10
3.1. Primeros pasos
remota y segura. La Raspberry será donde se aloje el servidor (también llamado broker)
MQTT. Para ello, se utilizará el software Mosquitto[12], un servidor MQTT de código
abierto.
La elección de este software para el servidor MQTT se debe a dos motivos principales[12]:
(1) ’implementa las versiones 5.0, 3.1 y 3.1.1 del protocolo MQTT’ y (2) está clasificado
como ’lightweight’ (ligero) permitiendo un uso eficiente en dispositivos poco potentes como
los que forman parte de un sistema pequeño IoT. Los detalles de los roles y funcionamiento
de un servidor MQTT se explicarán más adelante en este documento.
3.1.1.2. ESP32
11
Desarrollo
Una herramienta popular en el mundo maker y de la IoT ’de andar por casa’ es el IDE de
Arduino6 , y capaz de generar programas para todos los dispositivos valorados, sin embargo
para los ESPs existen alternativas más potentes y flexibles como el framework Espressif7 ,
una alternativa que ofrece mayor libertad a cambio de una complejidad ligeramente mayor.
Además de la preferencia por el entorno de desarrollo Espressif, los ESPs ofrecen me-
jores prestaciones a menor precio. Esto se manifiesta en temas como por ejemplo Wifi y
Bluetooth, incluidos en el propio chip; más variedad en cuanto a la conectividad y capa-
cidades de comunicación8 .
Otro aspecto en el que son superiores los ESPs es en el consumo de energı́a. Los proce-
sadores de los ESPs operan con una tensión de alimentación de 3.3V de entrada. Aunque
pueden operar con una tensión de entrada de 5V ya que vienen con reguladores para hacer-
los compatibles con la salida de potencia estándar del protocolo USB9 y permitir alimentar
algunos sensores y/o actuadores que puedan requerir 5V. Por otro lado los procesadores
de arduino esperan una tensión de 5V, aunque son capaces de funcionar a 3.3V reduciendo
frequencia. Además de la ventaja que es alimentar estos chips (los ESPs) con una tensión
inferior, cuentan con métodos de ahorro de energı́a que pueden llegar a ser más eficaces.
Tanto los ESPs como las placas de arduino cuentan con métodos para apagar ciertas
partes de los chips, como pueden ser los procesadores principales, controladores ADC10 ,
relojes internos, etc. Sin embargo hay dos aspectos en los que la gama ESP es superior a la
de arduino: (1) los ESPs cuentan con un llamado ULP Coprocessor[13], una máquina de es-
tados finitos de bajo consumo capaz de ejecutar código en paralelo al procesador principal
o siendo este el único procesador activo, y (2) los ESPs logran llegar a valores inferio-
res de consumo de corriente. Según experimentos realizados y documentados[14]-[16] por
usuarios. Haciendo referencia a la ficha técnica[17] del microprocesador ATMEGA328p11 ,
el procesador de los arduino es capaz de llegar a consumir corrientes de entre 30.8µA
y 6.2µA. Por otro lado, siguiendo el mismo proceso de consultar la ficha técnica[18] del
microprocesador ESP32 y algunos experimentos [19], [20] del mundo maker, los el esp32
puede reducir su corriente de alimentación hasta 2.5µA.
5
Datos obtenidos de makeadvisor.com para los ESPs y arduino.cc para el Arduino Uno y para el
Arduino Pro Mini.
6
https://www.arduino.cc/en/software/
7
https://www.espressif.com/en/products/sdks/esp-idf
8
Refiriendose a capacidades de comunicación a los canales I2C (no ilustrados en la tabla 3.4), más
canales de generación de pulsos (PWM), mayor número de pines GPIO entre otras.
9
https://es.wikipedia.org/wiki/Universal_Serial_Bus
10
Analog to Digital Converter o conversor de analógico a digital
11
Este microprocesador es el núcleo de los arduino.
12
3.1. Primeros pasos
Otro aspecto, y de gran relevancia en este trabajo, por el que destaca el ESP32 es por
contar con aceleradores hardware. Los aceleradores criptogŕaficos son módulos hardwa-
re dentro del procesador diseñados especı́ficamente para hacer operaciones especı́ficas. El
microcontrolador Esp32 cuenta con tres aceleradores[18]: (1) para hasheado, (2) para ci-
frado simétrico y (3) cifrado asimétrico. También cuenta con un módulo para mejorar los
números aleatorios que puede generar un chip de ese tamaño.
En ámbitos donde la criptografı́a es importante un buen generador de números aleatorio
es crucial12 a la hora de generar claves y valores secretos e impredecibles. En dispositivos
tan limitados, y generalmente con un grado de determinismo elevado, es fácil cometer el
error de recoger poca entropı́a para generar estos números aleatorios. La solución imple-
mentada en los ESP32 es tener un módulo hardware que combina fuentes de entropı́a13 co-
mo ruido en la tensión de alimentación, en los puertos de comunicación, sensores ADC. . . Y
posteriormente accediendo al ruido recogido por los módulos de radio frequencias cuando
estos estén habilitados.
Por todo lo anterior el dispositivo encargado de realizar las lecturas de sensores y ma-
nipular los actuadores será un ESP32.
12
Ver: https://www.cryptomathic.com/news-events/blog/the-role-of-random-number-generator
s-in-cryptography https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_numb
er_generator https://en.wikipedia.org/wiki/Key_generation
13
Ver: https://es.wikipedia.org/wiki/Entropa_(informacin)
13
Desarrollo
La primera interacción que se produce es la conexión del cliente con el broker, después se
determinará si ese cliente actúa como subscriptor o como editor. En este paso el cliente debe
identificarse con unas credenciales (usuario y contraseña). El broker, tras comprobar la
validez de las credenciales, aceptará o rechazará la conexión. Una vez aceptada la conexión
el cliente tendrá acceso a la red y podrá interactuar en la misma.
Como se observa en el diagrama 3.6 los dispositivos cliente pueden interactuar con
el broker de dos maneras, (1) publicando mensajes o (2) suscribiendose a un tema. Los
mensajes publicados por los clientes son recibidos por el broker y reenviados a todos los
clientes suscritos a ese tema. El broker hace las veces de albacea, de depositario, de los
mensajes y datos que se intercambian agentes y subscriptores.
Dado que es un protocolo de comunicación, MQTT tiene mecanismos para asegurar la
entrega de los mensajes. Nos referimos al llamado QoS (Quality of Service) que se puede
configurar en tres niveles14 : QoS 0, QoS 1 y QoS 2.
14
3.2. Diseño del sistema
Para organizar dependencias, generar binarios y leer datos de las UART20 se usó la
extensión disponible en VSCode de Platform IO21 . Una serie de herramientas diseñadas
especı́ficamente para gestionar el desarrollo de firmware para microcontroladores y disposi-
tivos de IOT. Realmente el propósito de Platform IO es ofrecer una interfaz más amigable
y sencilla de usar para los comandos ofrecidos por ESP-IDF.
1. ESP-DHT11 ⇒
Sensor de temperatura y humedad: DHT11.
Sensor capacitivo de humedad del suelo.
Sensor de luz: BH1750.
17
Lenguaje de programación de bajo nivel, que permite un control más preciso de los recursos del
sistema.
18
ESP-IDF, librerı́as y ejecutables tanto para compilar como para leer y escribir en las distintas zonas
de memoria interna de los chips https://docs.espressif.com/projects/esp-idf/en/latest/esp32/
19
Mencionados anteriormente, los aceleradores criptogŕaficos, generadores de números aleatorios, modos
de sueño. . .
20
Universal Asynchronous Receiver-Transmitter, es un puerto que permite la comunicación serie, en
este caso se puede considerar la consola del dispositivo.
21
https://platformio.org/
15
Desarrollo
2. ESP-MS430 ⇒
4. ESP-BME280 x2⇒
16
3.2. Diseño del sistema
5. ESP-Act⇒
17
Desarrollo
Estos dispositivos están pensados para un invernadero, como puede ser un vivero. Como
se observa en la lista anterior la temperatura y la humedad ambiental se mide con mucha
más frecuencia que el resto de parámetros. Esto se debe a dos motivos principales, (1)el
primero es que estos parámetros suelen ser de los que más influyen en el desarrollo de las
plantas. Según fuentes[1]-[3]: la humedad relativa es muy importante para el desarrollo de
las plantas porque influye en la transpiración. La transpiración es el proceso por el cual
las plantas expulsan vapor de agua por sus superficies. Cuanto mmenor sea el desquilibrio
en las presiones de vapor de agua entre el interior y el exterior de la planta, menos energı́a
gastará la planta en transpirar y más energı́a podrá dedicar a su crecimiento.
Y (2) la mayorı́a de sensores o dispositivos preparados para medir otros valores (luz,
presión. . . ) cuentan también con sensores de temperatura y humedad. Véanse los casos
del sensor BME680 o los circuitos integrados de LiliGo(ESP-DHT11 ) o MS430.
18
3.2. Diseño del sistema
19
Desarrollo
Ejemplo
Para ilustrar el funcionamiento de este protocolo de comunicación tomaremos el ejemplo
del dispositivo ESP-BME280. Tomamos los diagramas de comunicación para las operacio-
nes de escritura y lectura de la ficha técnica del dispositivo[26].
Escritura
Lectura
Figura 3.15: Diagramas de comunicación para las operaciones de escritura y lectura del
dispositivo ESP-BME280[26].
Los bits que se observan en los diagramas son los correspondientes a los niveles de
tensión en el cable SDA(cable de datos), ya que SCL es el cable de reloj. Todas las
operaciones empiezan (α) con una señal de START y deben terminar con una señal de
STOP. Y después de cada operación de 8 bits se puede enviar una señal de ACK o NACK por
parte del maestro o del esclavo26 . Justo después de la señal de START se envı́an 8 bits(β),
los 7 primeros son la dirección del dispositivo y el último es el bit de lectura/escritura. En
este primer caso el bit 0 será siempre de escritura puesto que la siguiente operación será
una escritura. Especı́ficamente la escritura de la dirección (de 8 bits) del registro al que
se quiere acceder(γ).
En el caso de la escritura, una vez direccionado el dispositivo y el registro, se envı́an los
datos que se quieren escribir en el registro. Si se quiere seguir escribiendo en otro registro
se deben repetir las operaciones desde el direccionamiento del registro.
26
Mandará la señal ACK el dispositivo que reciba los datos de la transmisión
20
3.2. Diseño del sistema
Por otro lado la lectura conlleva dos señales de START, la primera ya se ha explicado. La
segunda señal de START se debe enviar después de direccionar el registro(γ) al que se quiere
acceder. Despues de esta segunda señal de START se envı́a la dirección del dispositivo con
el bit de lectura activado, para ordenar al dispositivo esclavo que empiece a enviar datos.
El dispositivo esclavo enviará datos27 (confirmados por el maestro con ACK) hasta que el
maestro manda un NACK, indicando que ya no quiere recibir más datos. Y por supuesto
cerrando la operación con una señal de STOP.
21
Desarrollo
Por otro lado están los ESPs, que si precisan de conexión WiFi por dos motivos princi-
pales: (1) no cuentan con pueto ethernet y (2) la ubicación de estos dispositivos introducirá
una dificultad añadida a la hora de conectarlos por cable. De aquı́ surge el problema de la
actualización de credenciales WiFi. Los ESPs no cuentan con un sistema de entrada salida
fácilmente accesible, como puede ser la pareja de teclado y monitor. Además mientras que
Raspberry solo habrá una, el número de ESPs puede elevarse tanto como se desee escalar
el sistema.
La primera opción serı́a introducir las credenciales en el firmware y que estas no cambia-
sen nunca. Esta opción es poco segura puesto que, ya de por si es recomendable cambiar
la contraseña de las redes WiFi de manera más o menos regular, en caso de detectar un
intruso en la red WiFi se deberı́a cambiar la contraseña de la red. Este cambio de contra-
seña implicarı́a tener que volver a cargar el firmware en todos los ESPs, lo que supone un
trabajo, tiempo y conocimientos que en un caso de uso real no serı́a viable. Sobre todo
porque para generar y subir el firmware serı́a necesario desmontar los dispositivos de su
ubicación y volverlos a montar una vez actualizados.
Bien es cierto que existen mecanismos de actualización OTA29 (Over The Air) que
permiten actualizar el firmware de los ESPs sin necesidad de desmontarlos. Pero existen
soluciones más sencillas y eficientes para este problema.
Esta solución es usar WPS30 (WiFi Protected Setup). Con esta solución se pueden
conectar los dispositivos a la red WiFi sin necesidad de introducir la configuración de la
red en el firmware. El proceso de conexión es tan sencillo como presionar un botón en el
router y esperar a que el Esp32 se conecte a la red WiFi. La única pega es que hay que
conectar cada dispositivo de manera individual31 , pero es un proceso que no requiere de
conocimientos técnicos.
29
Ver: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/
ota.html
30
Ver: https://en.wikipedia.org/wiki/Wi-Fi_Protected_Setup
31
Es decir cada vez que se presiona el boton en el router solo puede establecerse una nueva conexión
22
3.2. Diseño del sistema
23
Desarrollo
Para permitir conexiones de otras máquinas en la misma red local hace falta modificar
el fichero de configuración del servidor MQTT añadiendo:
Esta lı́nea indica que el servidor debe escuchar en el puerto 1883 de la máquina local. Y
además aceptar conexiones provenientes de cualquier dirección IP.
Para configurar las credenciales de acceso al servidor MQTT se debe especificar el fichero
de contraseñas en el fichero de configuración del servidor.
1 password_file /etc/mosquitto/passwd
Tras ejecutar este comando se pedirá al usuario que introduzca la contraseña para el
usuario especificado. Como resultado del comando anterior se creará una entrada en el
fichero de contraseñas especificado con el nombre de usuario y la contraseña cifrada35 .
1 esp_mqtt_client_config_t mqtt_cfg = {
2 .broker.address.uri = "mqtt://192.168.0.100:1883",
3 .credentials.username = "example_username",
4 .credentials.authentication.password = "example_password",
5 .session.disable_clean_session = true,
6 };
7 esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
Una vez llamada la función de inicio del servicio MQTT, hará falta llamar a esp_mqtt_ ⌋
client_register_event() para registrar una función que se ocupará de gestionar los
eventos (o mensajes) que se reciban del servidor MQTT. Para la suscripción y publicación
de mensajes se usan las funciones esp_mqtt_client_subscribe() y esp_mqtt_client_ ⌋
publish() respectivamente.
24
3.2. Diseño del sistema
1. La red WiFi está protegida por una contraseña que además de cumplir con los
requisitos de seguridad de una contraseña, es fácilmente modificable.
Aún con todas estas precauciones se decidió añadir otra capa más, puesto que si la
Raspberry y la red WiFi/router son comprometidos, el sistema quedarı́a accesible a un
posible atacante.
3.2.3.2. Cifrado
A la hora de cifrar hay varias decisiones que tomar, la primera es el tipo de cifrado a
usar. En el mundo de la criptografı́a existen dos maneras de cifrar mensajes: simétrica y
asimétrica 37 . La criptografı́a simétrica es aquella en la que se usa la misma clave para
cifrar y descifrar el mensaje. Mientras que la criptografı́a asimétrica usa dos claves, una
para cifrar y otra para descifrar.
25
Desarrollo
Por lo que a consecuencia de los motivos expuestos anteriormente se decidió usar crip-
tografı́a simétrica.
Una vez decidido el tipo de cifrado, la siguiente decisión es la de que algoritmo usar.
La suite criptográfica de MbedTls38 ofrece algoritmos de cifrado simétrico como el AES,
DES, 3DES, Blowfish, etc.
El algoritmo elegido fue el AES, un cifrador de bloques, principalmente por dos motivos:
(1) no es un algorimo nuevo, por lo que se ha probado su seguridad y (2) los ESPs cuentan
con un acelerador criptográfico para este algoritmo. El acelerador marca la grán diferencia
a la hora de elegir este, el AES, frente a los cifradores de flujo. En una pequeña prueba
realizada se midieron los tiempos de establecimiento de clave y de cifrado de un mensaje
de 2048 bytes.
Aes-128
Blowfish-32
Llevamos mencionando la velocidad como motivo de peso para elegir un algoritmo u otro.
Esto es por la traducción directa que tiene a la energı́a consumida. Como sabemos, estos
dispositivos tienen que intentar reducir el consumo energético al máximo, para alargar la
duración que puede estar funcionando con una baterı́a. Por lo que cuanto menos tarden
en realizar las operaciones de comunicación, antes podrás volver a un estado de letargo y
reducir ası́ el consumo energético.
Para verificar la implementación de este algoritmo se llevó a cabo pruevas con ’test
vectors’ ofrecidos por la página oficial del NIST39 .
38
Aquı́ se detalla una lista de algoritmos: https://en.wikipedia.org/wiki/Mbed_TLS
39
Ver: https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/block-c
iphers
26
3.2. Diseño del sistema
Marca temporal.
27
Desarrollo
El hash lo ponemos lo primero porque dos mensajes nunca serán iguales. Nunca serán
iguales porque: aunque los datos de los sensores sean los mismos, la marca temporal será
distinta. Y si se diese la casualidad de que dos dispositivos distintos leen los mismos datos
y construyen el mensaje a la vez, el identificador del dispositivo será distinto.
Con todo esto el mensaje queda de la siguiente manera:
hash | identificador | marca_temporal | id_dato | dato
0x 00000000 00000000 00000000 00000000 00000000 | fca2538a | 00001234 | eeee
| abcd1234
Tras aplicar la función hash al mensaje anterior, se obtiene el siguiente mensaje en claro
completo:
0x cf314b61 5bca55b0 419980e1 e76f718e eab3a631 | fca2538a | 00001234 | eeee
| abcd1234
Los últimos dos campos, id_dato y dato, se pueden repetir tantas veces como datos se
quieran enviar. De esta manera reduciendo la cantidad de mensajes a enviar y por tanto
minimizando tiempos y consumo.
Dado que los consumos de energı́a son un factor importante en el diseño de este sis-
tema, se han estudiado las medidas que se implementan en los dispositivos para reducir
el consumo. Consultando el manual[18], algunos experimentos[28] llevados a cabo por la
comunidad y experimentos propios se han obtenido las siguientes conclusiones a cerca de
los modos de sueño.
Activo: Clock En este primer modo todos los periféricos, procesadores y memorias están
alimentados y pueden funcionar a máximo rendimiento. La CPU trabaja con los relojes
de alta frecuenciaen un rango de 26 240MHz.
28
3.2. Diseño del sistema
Light Sleep: En el sueño ligero se desactivan todos los módulos de comunicación inalámbri-
ca3, además los relojes de alta frecuencia se deshabilitan y se pausa el procesador pudiendo
retomar el hilo de ejecución. Tanto el ULP como los periféricos RTC (Real Time Clock)
se mantienen operativos. Para despertar tarda menos de 1ms.
Deep Sleep: Durante el sueño profundo solo queda activo el ULP y los periféricos RTC, el
hilo de ejecución se pierde, se mantienen 8x32 bits de información en registros de propósito
general. Para despertar tarda menos de 1 ms también.
29
Desarrollo
Estos son los diferentes modos de sueño y susu consumos energéticos correspondientes.
Sin embargo en las pruebas propias realizadas se observó un comportamiento que no se
corresponde con los datos recopilados. En las pruebas realizadas no se consiguió rebajar
el consumo por debajo de los 4mA en los ESP-DevKits. Y en el dispositivo integrado,
correspondiente al ESP-DHT11 el menor consumo fue de 18.2mA. Estas diferencias se de-
ben a fallos en la implementación de las placas de desarrollo. En el caso del ESP-DHT11
el problema pasa directamente por el hecho de que los sensores periféricos no reciben co-
rriente gestionada por el procesador. Esto hace que sea imposible apagarlos para eliminar
ese consumo mientras el procesador está en modo de sueño.
Sin embargo en el caso de los ESP-DevKits el problema de los sensores no está, con
lo cual ¿Dónde está el problema? En este caso el fallo de diseño está en el regulador de
tensión que alimenta el ESP32. Este regulador es un AMS1117-3.3, si atendemos a la
ficha técnica[29] podemos ver que el consumo de corriente quiescente es de 5mA. Es decir,
30
3.3. Puesta en funcionamiento del sistema
31
Desarrollo
Como se ve en el volcado de la linea UART del ESP, primero prueba a leer de la NVM,
da fallo y arranca el WPS. Como son procesos ası́nconos, mientras se intenta conectar a
la red wifi, se inicializa la conexión al servidor MQTT. Dado como están implementadas
las librerı́as esto no es un problema, puesto que la conexión al servidor MQTT se intenta
periodicamente hasta que se consigue.
Cuando se activa la conexión WPS en el router el ESP32 detecta ese protocolo y lo usa
para conectarse a la red wifi.
Si por orto lado las credenciales existen en la NVM, el ESP32 se conecta directamente
a la red wifi.
Una vez conectado a la red wifi, el ESP32 se puede conectar al servidor MQTT.
32
3.3. Puesta en funcionamiento del sistema
33
Desarrollo
guiese recuperar los mensajes retransmitidos por la red, no podrı́a conocer el contenido de
estos mensajes.
34
4 Resultados y conclusiones
Como resultado principal de este trabajo tenemos el desarrollo del sistema de supervisión
y control de un entorno botánico. Como caracterı́stica principal y objetivo original de
este proyecto, el sistema cumple la propuesta de ser un sistema seguro. Implementando
seguridad tanto de prevención contra ataques por agentes externos, como de prevención
de errores no intencionados.
A lo largo de este trabajo se ha demostrado que no es tarea sencilla garantizar la seguri-
dad total en un sistema como el propuesto. Además de las dificultades propias que conlleva
el desarrollo de un sistema de estas caracterı́sticas, están las dificultades introducidas por
las implementaciones ofrecidas por los fabricantes de dispositivos.
Interfaz de usuario Ofrecer una interfaz web al usuario, para poder monitorizar de forma
más visualmente atractiva el sistema. También para poder configurar el sistema de forma
más sencilla.
35
5 Análisis de impacto
Este proyecto tiene un amplio alcance tanto en lo social como en lo medioambiental. En
el ámbito social introduce ejemplos y nuevas configuraciones para los sistemas de control
IOT, que mejoran la seguridad de los datos y entornos que estos sistemas controlan.
El diseño de este sistema permite que sea escalable, por lo que facilita tanto a los
pequeños negocios que no pueden permitirse un sistema de altı́sima calidad, y permite
crecer con este sistema en caso de que haga falta renovar y ampliar el negocio.
En lo que al medio ambiente se refiere, este proyecto tiene un impacto positivo, ya que
permite el control de un entorno botánico de forma remota, lo que permite reducir el
consumo de recursos energéticos, como la electricidad y el agua. Además abre la puerta
a la posibilidad de recopilar grandes cantidades de información valiosa sobre los entornos
tratados en el trabajo.
Por último alza la queja sobre la implementación de los microcontroladores, que sin
tener en cuenta todas las capacidades de sus partes obligan a malgastar energı́a a cambio
de ahorrar unos pocos euros en el precio de los dispositivos. Y lanza la propuesta a los
fabricantes para que mejoren estos diseños para poder hacer un uso más eficiente de todos
los componentes de sus dispositivos.
Por último resaltar algunos objetivos de la agenda 2030 de la ONU que este proyecto
podrı́a ser de ayuda a la hora de alcanzarlos:
37
Bibliografı́a
[1] S. Parent. ((¿Cómo influye la humedad en la calidad de los cultivos?)) (), dirección:
https://www.pthorticulture.com/es/centro-de-formacion/como-influye-la
-humedad-en-la-calidad-de-los-cultivos/ (visitado 27-03-2023).
[2] C. Research. ((Influencia de la temperatura ambiental en las plantas.)) (), dirección:
https://www.canna.es/influencia_temperatura_ambiental_en_las_plantas
(visitado 27-03-2023).
[3] Nutricontrol. ((La humedad relativa en invernadero.)) (), dirección: https://nutric
ontrol.com/es/la-humedad-relativa-en-invernadero/ (visitado 27-03-2023).
[4] K. A. and. ((That ’Internet of Things’ Thing.)) (), dirección: https://www.rfidjou
rnal.com/that-internet-of-things-thing (visitado 10-04-2023).
[5] T. Seals. ((IoT Attacks Skyrocket, Doubling in 6 Months.)) (), dirección: https://t
hreatpost.com/iot-attacks-doubling/169224/ (visitado 14-04-2023).
[6] Kaspersky, ((Kaspersky Security Bulletin 2021. Statistics,)) Kaspersky, inf. téc., 2021.
[7] I. S. Foundation. ((IoT Security Foundation.)) (), dirección: https://iotsecurityf
oundation.org/ (visitado 14-04-2023).
[8] U. Congress, ((H.R.1668 - IoT Cybersecurity Improvement Act of 2020, 116th Con-
gress Public Law 207,)) From the U.S. Government Publishing Office, inf. téc., 2020-
04-12.
[9] I. I. C. S. W. Group, ((Interagency Report on the Status of International Cyberse-
curity Standardization for the Internet of Things (IoT),)) NIST, inf. téc., November
2018.
[10] R. P. Foundation. dirección: https://www.raspberrypi.com/products/raspberr
y-pi-3-model-b/ (visitado 12-04-2023).
[11] R. P. Foundation. ((Raspberry Pi Downloads.)) (), dirección: https://www.raspber
rypi.com/software/operating-systems/ (visitado 11-04-2023).
[12] E. Mosquitto. ((Eclipse Mosquitto.)) (), dirección: https://mosquitto.org/ (visita-
do 12-04-2023).
[13] E. Systems. ((ULP Coprocessor programming.)) (), dirección: https://docs.espre
ssif.com/projects/esp-idf/en/latest/esp32/api-reference/system/ulp.ht
ml (visitado 01-04-2023).
[14] P. Khatri. ((Arduino Sleep Modes and How to use them to Save the Power.)) (),
dirección: https://circuitdigest.com/microcontroller- projects/arduino-
sleep-modes-and-how-to-use-them-to-reduce-power-consumption (visitado
14-04-2023).
[15] D. Patel. ((How to Reduce Arduino Power Consumption.)) (), dirección: https://m
aker . pro / arduino / tutorial / how - to - reduce - arduino - power - consumption
(visitado 14-04-2023).
39
Bibliografı́a
[16] A. the Giant. ((Reducing Arduino Power Consumption.)) (), dirección: https://l
earn . sparkfun . com / tutorials / reducing - arduino - power - consumption / all
(visitado 14-04-2023).
[17] ATMEL, ATMEGA328P Datasheet (PDF) - ATMEL Corporation. dirección: https
://pdf1.alldatasheet.es/datasheet-pdf/view/1132281/ATMEL/ATMEGA328P.h
tml (visitado 14-04-2023).
[18] E. Systems, ESP32 Datasheet (PDF) - Espressif Systems. dirección: https://www.e
spressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
(visitado 14-04-2023).
[19] L. M. Engineers. ((Insight Into ESP32 Sleep Modes & Their Power Consumption.))
(), dirección: https://lastminuteengineers.com/esp32-sleep-modes-power-c
onsumption (visitado 14-04-2023).
[20] J. Cook. ((ESP32 power consumption can be reduced with sleep modes.)) (), dirección:
https://www.arrow.com/en/research-and-events/articles/esp32-power-con
sumption-can-be-reduced-with-sleep-modes (visitado 14-04-2023).
[21] E. net. dirección: https://www.esp32.net (visitado 26-04-2023).
[22] E. Mosquitto. dirección: https://mosquitto.org/ (visitado 20-04-2023).
[23] E. Systems. dirección: https://www.espressif.com/ (visitado 20-04-2023).
[24] B. Sensortec, BME680 Low power gas, pressure, temperature and humidity sensor.
dirección: https://cdn-shop.adafruit.com/product-files/3660/BME680.pdf
(visitado 20-04-2023).
[25] Metriful, Indoor environment monitor with I2C compatible interface. dirección: ht
tps://raw.githubusercontent.com/metriful/sensor/master/Datasheet.pdf
(visitado 20-04-2023).
[26] B. Sensortec, BME280 Combined humidity and pressure sensor. dirección: https:
//www.mouser.com/datasheet/2/783/BST-BME280-DS002-1509607.pdf (visitado
20-04-2023).
[27] Lilygo. dirección: https://www.lilygo.cc/products/t-higrow (visitado 26-05-2023).
[28] L. M. Engineers. ((Insight Into ESP32 Sleep Modes and Their Power Consumption.))
(), dirección: https://lastminuteengineers.com/esp32-sleep-modes-power-c
onsumption/ (visitado 27-05-2023).
[29] A. M. Systems, 1A Low Dropout Volatage Regulator. dirección: http://www.advan
ced-monolithic.com/pdf/ds1117.pdf (visitado 27-05-2023).
40
Índice de figuras
2.1 Paı́ses con más ataques sufridos IOT en el primer semestre de 2021.[6] . . . 5
2.2 Malware instalado en el dispositivo después de un ataque.[6] . . . . . . . . . 6
41
Este documento esta firmado por
Firmante CN=tfgm.fi.upm.es, OU=CCFI, O=ETS Ingenieros Informaticos -
UPM, C=ES
Fecha/Hora Wed Jun 28 14:08:14 CEST 2023
Emisor del EMAILADDRESS=camanager@etsiinf.upm.es, CN=CA ETS Ingenieros
Certificado Informaticos, O=ETS Ingenieros Informaticos - UPM, C=ES
Numero de Serie 561
Metodo urn:adobe.com:Adobe.PPKLite:adbe.pkcs7.sha1 (Adobe
Signature)