


A bilingual personal portfolio built with Hugo, pure HTML, CSS, and vanilla JavaScript. No frameworks, no dependencies.


Overview
An ESP32-based IoT monitoring system designed for harsh industrial environments. The device reads temperature, pressure, and flow sensors at 100ms intervals, applies a lightweight moving-average filter locally, then publishes cleaned telemetry to a cloud MQTT broker.

Core rule: the ESP32 makes local control decisions. The cloud layer is strictly for visualization and alerting — never in the control loop.
Architecture
Three concurrent FreeRTOS tasks keep sensing, publishing, and recovery fully independent:
| Task | Priority | Role |
|---|---|---|
sensor_task | High | ADC sampling, filtering |
mqtt_task | Medium | Broker connection, publish |
watchdog_task | Low | Reconnect, LED heartbeat |
Tasks communicate over a ring buffer so the sensor loop is never blocked by network latency.
Firmware Snippet
void mqtt_task(void *pvParam) {
mqtt_client_t *client = mqtt_client_init(&cfg);
while (1) {
if (xQueueReceive(sensor_queue, &reading, pdMS_TO_TICKS(200))) {
char payload[64];
snprintf(payload, sizeof(payload),
"{\"t\":%.2f,\"p\":%.1f}", reading.temp, reading.pres);
mqtt_publish(client, "plant/zone1/sensors", payload, 1);
}
}
}
Results
Deployed across 3 industrial sites with no downtime since go-live. Manual inspection cycles dropped by 60%.
| Metric | Value |
|---|---|
| Uptime | 99.2% |
| Sites deployed | 3 |
| Inspection reduction | 60% |
| Avg latency | < 400ms |