Integrar ESP32 y Arduino con Bloomit: tutorial completo
Tres formas de conectar tu placa a la API de Bloomit: WiFi directo desde ESP32/ESP8266, Serial USB sin WiFi con cualquier Arduino, y ESP-IDF para producción con almacenamiento NVS.
El repositorio de ejemplos
Bloomit tiene un repositorio oficial con ejemplos funcionales para integrar cualquier placa con la API: github.com/ezequielcorbalan/bloomit-integration. Incluye tres implementaciones completas:
arduino/BloomitWiFi/Arduino + WiFi: HTTP directo desde ESP32 o ESP8266arduino/BloomitSerial/Arduino + Serial: Cualquier Arduino sin WiFi, vía USBesp32/ESP32 ESP-IDF: Framework nativo con NVS, RTOS y HTTPS
Antes de entrar a cada uno, hay un concepto clave que vale la pena entender bien: el flujo de autenticación de Bloomit.
Flujo de autenticación: dos tokens, un solo registro
Bloomit usa dos tokens distintos con propósitos distintos:
user_tokenSe obtiene al hacer login en bloomit.app
Solo se usa una vez, para registrar el dispositivo. Puede expirar.
device_tokenLo devuelve el endpoint /register/public
Nunca expira. Se guarda en la placa y se usa para todo.
La lógica es: hacés el setup una sola vez (login + registro), la placa guarda eldevice_token en EEPROM o NVS, y de ahí en adelante opera de forma autónoma sin necesidad de volver a autenticarse.
Registro del dispositivo
El ID de registro se genera a partir de la MAC address de la placa en formato REG-AABBCCDDEEFF. Así cada placa tiene un ID único y reproducible sin necesidad de configurarlo manualmente.
POST https://device.api.bloomit.app/register/public
Content-Type: application/json
{
"userToken": "eyJhbGci...",
"device_registration_id": "REG-AABBCCDDEEFF"
}
// Respuesta exitosa (201):
{
"success": true,
"device_token": "eyJhbGci...", // ← guardar en EEPROM/NVS
"data": {
"device_id": 123,
"user_id": 456,
"is_active": true
}
}Opción 1: Arduino WiFi (ESP32 / ESP8266)
El sketch BloomitWiFi.ino es la integración más directa: la placa conecta al WiFi y hace HTTP POST a la API. No necesita intermediarios, funciona de forma autónoma las 24 horas.
Librerías necesarias
Instalá desde el Library Manager del Arduino IDE:
- ArduinoJson (v7.0.0 o superior) — para serializar el payload
- WiFi.h, HTTPClient.h — ya vienen incluidas en los cores de ESP32/ESP8266
Configuración inicial
// En BloomitWiFi.ino, modificar estas constantes: const char* WIFI_SSID = "tu_red_wifi"; const char* WIFI_PASSWORD = "tu_password"; const char* DEVICE_TOKEN = "eyJhbGci..."; // tu device_token // Intervalo entre lecturas (ms) const unsigned long SENSOR_INTERVAL = 30000; // 30 segundos
Enviar datos de sensores
El sketch usa dos endpoints: /sense para lecturas y /device/logpara logs. La función central es:
// POST /sense
{
"sensorType": "temperature", // o "humidity", "soil_humidity", "ph", "tds"
"value": "25.5" // siempre como string
}
// POST /device/log
{
"type": "info", // "info" | "warning" | "error" | "debug"
"message": "Heartbeat OK"
}Para ESP8266 el sketch agrega client.setInsecure() ya que el chip no tiene suficiente RAM para validar certificados. En ESP32 la conexión HTTPS funciona sin configuración extra.
Comandos serie disponibles
El sketch tiene una interfaz de comandos por Serial a 9600 baud que es muy útil durante el desarrollo:
statusEstado de conexión y tokensenseEnviar lectura ahoralog <msg>Enviar log manualmenteinfoConsultar info del dispositivo en la APIclearBorrar credenciales guardadasregisterForzar re-registro
Opción 2: Arduino Serial (sin WiFi)
El sketch BloomitSerial.ino funciona con cualquier Arduino, incluso los que no tienen WiFi (Uno, Mega, Nano). La placa imprime JSON por el puerto serie y un intermediario se encarga de reenviar los datos a la API.
Hay dos intermediarios disponibles:
- Panel web de Bloomit (recomendado): abrís
bloomit.app/devices/testen Chrome o Edge, conectás el puerto USB y el panel lee el serial y reenvía automáticamente a la API. Sin instalar nada. - Script Python
serial_bridge.py: alternativa si necesitás correr el bridge sin navegador, en un servidor, o en Linux/Raspberry Pi.
Formato del protocolo Serial
El sketch imprime una línea JSON completa por mensaje (con Serial.println()):
// Lectura de sensor (sensorType: 1=temperatura, 2=humedad)
{"token":"eyJhbGci...","cmd":"sense","sensorType":1,"value":25.4,"text":"Temperature reading"}
// Log de debug
{"token":"eyJhbGci...","cmd":"log","type":"info","message":"Dispositivo iniciado"}El baud rate del sketch Serial es 9600. Asegurate de configurar lo mismo en el panel web o en el script Python.
Configuración del sketch
// En BloomitSerial.ino: const char DEVICE_TOKEN[] = "eyJhbGci..."; // tu device_token // Intervalo de envío const unsigned long SENSOR_INTERVAL = 30000; // 30 segundos
Usando el bridge Python
Si preferís no usar el navegador, el script serial_bridge.py detecta el puerto automáticamente:
# Instalar dependencias pip3 install pyserial requests # Ejecutar (detecta el Arduino automáticamente) python3 serial_bridge.py # Salida: # [OK] Found Arduino on /dev/ttyUSB0 # [OK] Connected! Waiting for sensor data... # [SENSOR] Temperature: 25.4 (Temperature reading) # [OK] Sensor data sent to Bloomit API # [LOG] INFO: Heartbeat - Device running normally # [OK] Log sent to Bloomit API
Opción 3: ESP32 con ESP-IDF
Para producción o cuando necesitás control total del hardware, el ejemplo ESP-IDF usa el framework nativo de Espressif con FreeRTOS, almacenamiento NVS persistente, HTTPS con esp_http_client, y arquitectura event-driven para el WiFi.
Requisitos
- ESP-IDF v5.0 o superior
- Cualquier ESP32 (ESP32, S2, S3, C3, C6)
Configurar y flashear
# 1. Activar entorno ESP-IDF . $HOME/esp/esp-idf/export.sh # 2. Editar main/main.c #define WIFI_SSID "tu_red" #define WIFI_PASSWORD "tu_password" #define USER_TOKEN "eyJhbGci..." // se usa solo para el registro inicial # 3. Compilar y flashear idf.py set-target esp32 idf.py build idf.py -p /dev/ttyUSB0 flash monitor
Almacenamiento NVS
El ejemplo guarda el device_token, device_id y user_id en la NVS (Non-Volatile Storage) del ESP32. Al reiniciar, la placa carga las credenciales guardadas y omite el registro si ya está registrada. Para forzar un re-registro:
# Borrar toda la NVS (factory reset) idf.py erase-flash idf.py flash
Arquitectura del código ESP-IDF
El ejemplo implementa la API de Bloomit con funciones modulares:
bloomit_register_device()Registra la placa (skip si ya tiene token)bloomit_send_sensor_data(type, value)POST /sense con Bearer tokenbloomit_send_log(type, message)POST /device/logbloomit_get_device_info()GET /api/device — verifica el estadolog_info / log_warning / log_errorWrappers convenientes para logs
Reemplazar los sensores simulados por los reales
Los tres ejemplos usan sensores simulados por defecto (valores aleatorios dentro de un rango). Para usar sensores reales, reemplazás las funciones readTemperature() y readHumidity() con el código de tu sensor específico. Por ejemplo, para un DHT22:
#include <DHT.h>
#define DHT_PIN 4
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
dht.begin();
}
float readTemperature() {
return dht.readTemperature();
}
float readHumidity() {
return dht.readHumidity();
}Para un sensor de humedad del suelo capacitivo:
#define SOIL_PIN 34
float readSoilHumidity() {
int raw = analogRead(SOIL_PIN);
// Calibrar: 4095 = seco (0%), 1500 = saturado (100%)
float humidity = map(raw, 4095, 1500, 0, 100);
return constrain(humidity, 0, 100);
}
// Usar sensorType "soil_humidity" al enviarReferencia rápida de la API
Todos los endpoints que usan los ejemplos:
- POST
/register/publicNo requiere authRegistro del dispositivo con userToken - POST
/senseBearer device_tokenEnviar lectura de sensor - POST
/device/logBearer device_tokenEnviar log de debug - GET
/api/deviceBearer device_tokenEstado y info del dispositivo
La documentación completa de los endpoints está en la sección Docs del panel o en el README del repositorio.
¿Qué opción elegir?
- ESP32/ESP8266 + WiFiDispositivo instalado, funciona sin PC. Producción y campo.
- Arduino + SerialCualquier Arduino, ideal para prototipar o cuando no querés configurar WiFi.
- ESP-IDFControl total del hardware, producción crítica, múltiples tareas FreeRTOS.
El hardware Bloomit con sensores ya integrados (humedad de suelo, temperatura, humedad ambiental) está disponible en bloomit.com.ar. Si querés traer tu propia placa, el plan SaaS te da acceso completo a la API con los mismos endpoints que usan estos ejemplos.
Bloomit
Empezá a monitorear tus plantas hoy
Registrá tu cuenta gratis en el panel web y conectá tu primer dispositivo en minutos. Para conseguir hardware Bloomit, visitá bloomit.com.ar, y si buscás notas de cuidado de plantas están en el blog de bloomit.com.ar.