Skip to content
article

Monitor de temperatura para la heladera del kiosco: ESP32 + DS18B20 + Telegram, por menos de 15 dólares

Atado con alambre, pero avisa. Y no toca nada de 220V

Nicolás Benítez@nicobenitez

October 11, 2026 · 4 min read

Che, les cuento algo que armé la semana pasada porque me salvó de otra macana.

Tengo el taller de reparaciones en Rosario y al lado mi señora tiene un kiosco con una heladera exhibidora de bebidas y lácteos. Hace un mes, un sábado a la noche, se quemó el capacitor de arranque del compresor. Sí, ya sé: el técnico electrónico con la heladera rota. En casa de herrero, cuchillo de palo. El lunes a la mañana estaba todo a 22 grados. Yogures, quesos, todo a la basura. Más de 100 dólares de mercadería.

Así que armé esto. Aclaro de entrada: no toco nada de 220V. El ESP32 solo mide y avisa. La heladera sigue enchufada como siempre, nadie abre nada.

Materiales (precios de acá)

  • ESP32 DevKit: unos 9.000 pesos (unos 7 dólares)
  • Sonda DS18B20 sumergible, cable de 1 metro: unos 4.500 pesos
  • Resistencia de 4,7k: del cajón
  • Fuente de 5V: un cargador de celular viejo que estaba tirado
  • Caja impresa en PETG, dos horas de impresora

Conexión

  • DS18B20: rojo a 3,3V, negro a GND, amarillo (datos) al GPIO 4
  • Resistencia de 4,7k entre datos y 3,3V. Sin esto no lee nada, o lee -127, que es el valor de "sensor desconectado"
  • El cable de la sonda entra por el burlete de la puerta. Fino, cierra bien, no hay que agujerear nada

El código

Arduino, con las librerías OneWire y DallasTemperature. Para Telegram no uso ninguna librería: un pedido HTTP a la API del bot y listo. El bot lo crean hablando con BotFather en Telegram, que les da el token.

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define TOKEN   "123456:ABC-el-de-botfather"
#define CHAT_ID "987654321"

OneWire bus(4);
DallasTemperature sonda(&bus);

const float LIMITE = 8.0;          // grados
uint32_t calienteDesde = 0;
uint32_t ultimoAviso = 0;

void avisar(String msg) {
  msg.replace(" ", "%20");
  WiFiClientSecure cli;
  cli.setInsecure();               // macana, ya sé. leer abajo
  HTTPClient http;
  http.begin(cli, String("https://api.telegram.org/bot") + TOKEN +
                  "/sendMessage?chat_id=" + CHAT_ID + "&text=" + msg);
  http.GET();
  http.end();
}

void setup() {
  sonda.begin();
  WiFi.begin("kiosco", "clave");
  while (WiFi.status() != WL_CONNECTED) delay(500);
  avisar("Monitor de heladera arrancado");
}

void loop() {
  sonda.requestTemperatures();
  float t = sonda.getTempCByIndex(0);
  uint32_t ahora = millis();

  if (t == DEVICE_DISCONNECTED_C) {
    avisar("Sonda desconectada");
  } else if (t > LIMITE) {
    if (!calienteDesde) calienteDesde = ahora;
    bool pasaron15 = ahora - calienteDesde > 15UL * 60 * 1000;
    bool unaHora   = !ultimoAviso || ahora - ultimoAviso > 60UL * 60 * 1000;
    if (pasaron15 && unaHora) {
      avisar("HELADERA a " + String(t, 1) + " grados");
      ultimoAviso = ahora;
    }
  } else {
    calienteDesde = 0;
    ultimoAviso = 0;
  }
  delay(60000);
}

La lógica: mide cada minuto. Si pasa de 8 grados durante 15 minutos seguidos, avisa. Si sigue caliente, vuelve a avisar cada hora. Si la sonda se desconecta, avisa cada minuto, a propósito, para que moleste.

Las macanas que sé que tiene

  • setInsecure(): no verifica el certificado de Telegram. Para una heladera me alcanza. Si lo usan para algo serio, carguen el certificado raíz.
  • Si se corta la luz, el ESP32 también se apaga y no avisa nada. Justo cuando más importa. Para eso: cada 10 minutos el ESP32 le pega a una URL de healthchecks.io (gratis para pocos chequeos), y si deja de llegar ese "estoy vivo", healthchecks me manda el aviso a Telegram. Así me entero del corte también.
  • El WiFi del kiosco es el router de la empresa de cable, que se cuelga cada tanto. Si no conecta, el ESP32 se queda esperando en el setup. Lo voy a arreglar. Algún día.

Costo total: menos de 15 dólares. La mercadería que tiré: más de 100. Cuentas claras.

Cualquier duda pregunten, che.

Written by

Nicolás Benítez

Impresión 3D, Arduino y ESP32 en Rosario. Técnico electrónico. Arreglo cosas que según el fabricante no tienen arreglo.

Get the best of #codigo_en_espanol weekly

One email each Monday with the most useful posts. No spam; unsubscribe in one click.

Comments

10

Sign in to join the conversation.

Sign in to comment
Martín Ferraro@tincho_go#2 in Código en Español
Che Nico, muy bueno. Lo único: el setInsecure no me cierra. Cargar el certificado raíz son 20 líneas, no te cuesta nada
0 net votes
Nicolás Benítez@nicobenitez#5 in Código en Español
Ni en pedo me pongo a renovar certificados por una heladera, che. Si me hackean la heladera, que se tomen una coca a mi salud
1 net votes
Martín Ferraro@tincho_go#2 in Código en Español
jajaja ok, me convenciste. lo del healthchecks está muy bien pensado igual
1 net votes
Diego Ramírez@diego_firmware1 rep in Código en Español
¡Muy buen proyecto! Ojo con las DS18B20 sumergibles, muchas vienen clonadas. A mí me salían 85 °C de repente: es el valor de reset del sensor, aparece cuando la alimentación es débil o el cable es largo. Si ves 85.0 exacto, no es la heladera prendiéndose fuego 😄
3 net votes
Nicolás Benítez@nicobenitez#5 in Código en Español
Gracias Diego, no sabía lo del 85. Le agrego un filtro para ignorar ese valor
0 net votes
Sofía Ramírez@sofi_dev_mx#1 in Código en Español
¡Qué chido! Yo le agregaría un comando /temp al bot para preguntarle la temperatura cuando quieras. Con la API de getUpdates es poquito código más
0 net votes
Karthikeyan S@karthik_embedded1 rep in Código en Español
Nice build. One suggestion: put the probe inside a small bottle of water inside the fridge, not in the air. Air temperature jumps every time the door opens, you will get false alarms. Vaccine fridges do this with glycol bottles.
3 net votes
Nicolás Benítez@nicobenitez#5 in Código en Español
Perdón, uso traductor. You are right, the first two nights I received 6 alarms, the kiosk door opens a lot on Saturday. Tomorrow I put it in an empty jam jar with water, tied with wire. Thank you
0 net votes
Matt O'Brien@pi_tinker_matt1 rep in Código en Español
Love this Nico. The healthchecks heartbeat is the clever bit, most people forget the monitor dies with the power. Brilliant
2 net votes
Gwen Albright@gwenprints1 rep in Código en Español
(Via translator!) Nico, this is wonderful, and "in the blacksmith's house, a wooden knife" is my new favourite saying. A jam jar tied with wire is exactly the right engineering. ¡Qué buen proyecto!
2 net votes