¿Estás deseando tomar una taza de café ya preparada por la mañana (o por la tarde)? Podrás estar seguro de que la taza ideal en el momento ideal estará lista y esperándote. Esto se debe a un sistema automatizado que utiliza Internet de las cosas (IoT).
En este tutorial, desarrollaremos una máquina de café basada en IoT que funciona según un horario establecido sin interacción humana. También enviará notificaciones, como cuando la taza esté lista para ti, a través de un panel de escritorio.
El servidor del Protocolo de tiempo de red (NTP) rastreará el tiempo real, utilizando “horas:minutos:segundos”, que transmite al sistema. El sistema también estará preprogramado para un tiempo establecido (deseado). Cuando la hora real y la deseada coinciden, el sistema envía una orden de “ON” a la máquina de café a través de un chip WiFi.
Esto alerta a la máquina de café para que haga su magia, que se “APAGARÁ” automáticamente después de un tiempo preestablecido para ahorrar energía. Se enviará una notificación a su escritorio informándole que " Su café ha sido preparado " cuando esté listo.
Cubre los conceptos básicos de cómo disfrutar de un café ya preparado, con la posibilidad de cambiar el tiempo deseado según sus preferencias. Ahora, revisemos los componentes y la tecnología necesarios detrás del sistema.
Componentes
Esto es lo que necesita para comenzar...

Dependencias:
- Sistema operativo: Windows/Linux/MacOSx
- Lenguajes de programación: Python 2.7
- Método de comunicación: Wi-Fi
Tecnología:
- Protocolo MQTT: Message Queue Telemetry Transport o MQTT es un protocolo ligero para transmitir mensajes a través de Internet. Funciona como una arquitectura cliente-servidor. El servidor se llama "broker" y los clientes son "clientes".
- Servidor NTP: Se utiliza para sincronizar los relojes del sistema de dispositivos conectados a Internet con la Hora Universal Coordinada (UTC).
- Módulo Wi-Fi – ESP8266: Del tamaño de un chip pequeño, este módulo puede conectarse a cualquier enrutador WiFi y proporcionar Internet a dispositivos que de otra manera no estarían conectados. Usaremos esto para conectar la tarjeta IoT a un corredor en Internet.
Diagrama de bloques

– La cafetera está conectada a un circuito de relé que la enciende/apaga.
– El relé está controlado por la placa IoT (el controlador Atmega 328P)
– La placa está conectada a Internet a través del módulo ESP integrado.
– La placa “habla” con el corredor MQTT (HiveMQ) en línea y recibe y envía mensajes basados en MQTT.
– El escritorio de una computadora utiliza un script Python para enviar y recibir mensajes en MQTT al corredor, que está conectado a la máquina de café.
¿Como funciona?
Una máquina basada en Linux/Windows ejecuta el script Python. El script se ejecuta en un bucle principal donde compara la hora real, que está almacenada en una cadena, con la hora deseada. El tiempo deseado se escribe en el script y se almacena en una cadena usando una condición "Si".
Cuando el tiempo real coincide con la secuencia de tiempo deseada, una llamada de función envía una señal de "ON" a la máquina de café, que está conectada a Internet, a través de MQTT. Al recibir el comando “ON”, automáticamente enciende el relé “ON” para preparar café.
También se establece en el sistema un periodo de tiempo tras el cual la cafetera estará en “OFF”.
El circuito

Código
Este proyecto se divide en dos partes:
1. El dispositivo controlado (la máquina de café)
2. El sistema informático principal, que almacena el tiempo de café deseado y le indica a la máquina que se encienda o apague.
El código de la placa IoT
Este código está escrito y compilado en el IDE de Arduino. También tiene dos partes. Uno es para controlar el dispositivo y utiliza un microcontrolador ATmega328. El otro es para comunicación vía Internet y utiliza el módulo ESP8266.
Código de control del microcontrolador
El microcontrolador está programado para recibir cadenas en el puerto de receptor/transmisor asíncrono universal (UART) del módulo ESP. Si el comando de cadena está "ON" o "OFF", cambia el GPIO a ALTO o BAJO respectivamente.
if(comando == “máquina/conectada”){
digitalWrite(cafe_máquina_conectada_pin,ALTO);
Serial.print(“la cafetera está encendida”);
}
La placa también envía la respuesta a través del UART al ESP. Ambos están programados para que cualquier mensaje enviado en el serial se publique en el broker MQTT.
Código del módulo ESP
El ESP está programado para conectarse a WiFi mediante una biblioteca de administrador de WiFi, que crea un punto de acceso cuando es necesario. Luego, utilizando una página HTML, es posible configurar el ESP con SSID y PASS.
wifiManager.autoConnect(“AutoConnectAP”);
Cualquier mensaje recibido por ESP en serie se publicará en el corredor MQTT. Además, todo lo que el ESP reciba del corredor MQTT se enviará al puerto serie.
El código es como un marco de adaptador de red.
if (Serie.disponible) {
Cadena datos recibidos = Serial.readString;
temp_str = datos recibidos;
temperatura de carbón (temp_str.length + 2);
temp_str.toCharArray(temp, temp_str.length + 1);
client.publish(temaPublish, temporal);
}
El código para enviar los datos recibidos del corredor al serial.
para (int i = 0; i < longitud; i++) {
data_r_in_string = Cadena(data_r_in_string + (char)carga útil(i));
//Serial.print((char)payload(i));
}
Serial.print(data_r_in_string);
El script Python
En primer lugar, debe crear un archivo llamado "timings.py" en el que se declaran todas las variables para que sea fácil cambiar la hora del café deseada.
#veces = hh:mm:ss
fecha_desayuno = “08:00:00”
tarde_cafe = “12:00:00”
café_da-noite = “17:06:10”
El script llamado "system.py" importa todos los tiempos del archivo "timing.py".
de importación de tiempo *
Luego, es importante importar las bibliotecas necesarias para comunicarse con el broker MQTT.
importar paho.mqtt.client como mqtt
importar paho.mqtt.publish cómo publicar
Luego asigne dos variables con temas MQTT: una para enviar mensajes y otra para recibir mensajes.
tema_suscripción = “ts/café/reporte”
publicar_topic = “ts/café/máquina”
Ahora, declare una variable llamada "cliente" con "cliente mqtt".
cliente = mqtt.Cliente
Realice dos devoluciones de llamada de función:
1. Para recibir mensajes
2. Hacer algo basado en una conexión exitosa
client.on_connect=on_connect
client.on_message=on_message
Finalmente, conecte el broker MQTT a un puerto e inicie el "cliente" dentro de un bucle sin bloqueo.
cliente.connect(“corretor.hivemq.com”, 1883, 60)
cliente.loop_start
Una vez que la conexión sea exitosa, podemos enviar mensajes usando esto:
publicar.single(tema, datos_mensaje, nombre de host =”broker.hivemq.com”)
Ahora es posible crear el bucle, que incluirá la hora actual en una variable de cadena.
tiempo_actual = tiempo.strftime(“%H:%M:%S”)
Dentro del ciclo, compare la hora actual del sistema con todas las variables anteriores.
if(hora_desayuno == hora_actual):
imprimir desayuno
send_signals(“máquina/conectada”)
Máquina = “ENCENDIDO”
Cuando se cumple la condición, se envía una señal que "ENCIENDE" la máquina. Una vez encendida la cafetera, se debe apagar después de un tiempo determinado. Para hacer esto, se necesita otro bucle que solo se inicia después de encender la máquina.
mientras(Máquina==”ON”):
si (segundo > tiempo_para_cual_máquina_estará_en_s):
send_signals(“máquina/apagado”)
Máquina = “APAGADO”
segundo = 0
imprimir "La máquina está apagada"
Así funciona el sistema de programación de una máquina de café basado en IoT.