-
Notifications
You must be signed in to change notification settings - Fork 3
Releases: angeloINTJ/simut
v1.4.4-beta — GPIO Resource Manager, BME280 Driver, mDNS, Universal Slots
v1.4.4-beta — GPIO Resource Manager, BME280 Driver, mDNS, Universal Slots
GPIO Resource Management — Guided Slot Assembly
GPIOs are now a visible, trackable limited resource. Each slot is a connector that consumes N GPIOs depending on the sensor type. The CLI guides the user through configuration before physical assembly.
gpiocommand — GPIO resource map showing all 16 pins with allocation status (FREE or[Slot XX] Type (Role)), plus a consolidated free-GPIO list.sensor <slot> create <type>— Guided slot creation: sets driver type, clears previous pins, activates the slot, and shows pin count, role labels, free GPIOs, and next-step hint.sensor <slot> type <type>— Now shows pin requirements and current GPIO assignments after changing the type.sensor <slot> pin <idx>,<gpio>— Shows role label for context (e.g.,pin[0]=GPIO 3 (1-Wire)). Detects when all pins are assigned and suggests next step.sensor <slot> active on— Validates prerequisites: type must be set, driver compiled in, all pins assigned. Reports exactly which pins are missing.- Zero hardcoded GPIO-to-type coupling — Any GPIO 0-15 works for any sensor type. I2C0/I2C1 auto-detected at runtime via
i2cPeripheralForPins().
BME280 Driver — Temperature + Humidity + Pressure
BME280Driver.h— Self-contained I2C driver using forced-mode measurements. No external library dependency.- Async state machine — BME_IDLE → trigger forced measurement → BME_WAITING → read results.
- Compensation formulas — Integer math per Bosch BME280 datasheet §4.2.3 for T, H, and P. Oversampling ×ばつ1 (~9ms per reading).
- TFT panel rendering — Temperature + humidity on dashboard. Pressure available via API (
CH_PRESSchannel). - I2C boot guard — 50ms timeout + ACK probe prevents boot hang when BME280 is configured but not connected.
- Disabled by default — Enable with
-DSIMUT_SENSOR_BME280=1. A PIO-based driver is planned (see #67).
mDNS Enabled
-DSIMUT_MDNS=1in platformio.ini — device accessible viahttp://simut.local. Cost: ~15KB flash.
Improved Diagnostics
show sensors— Redesigned output: slot, GPIO assignments, driver type, channels, friendly name, ROM, HWID, alarm status + limits.show sensor types— Lists compiled-in drivers with pin count, channel summary, and role labels.gpio— GPIO resource map (free/used by slot).checkAndAutoHealSensors()— No longer reports false "Sensor missing" for DHT22/BME280.
Fixes
- HistoryCodec v2 mask width — Changed from
uint16_t(16 bits) touint32_t(3 bytes, 18 bits). With MAX_SENSORS=16, the field mask needs 2 ambient + 16 sensor = 18 bits. Sensors 14-15 were silently truncated in delta records. UpdatedHIST_V2_MAX_DELTA_SIZE58→62 bytes. PIN_ONEWIRE_DEFAULT— Fixed preprocessor redefinition warning (8 instances eliminated).- All 4 sensor channels initialized —
MAX_SENSOR_CHANNELSloop setsavgValueto NAN andcalibrationOffsetto 0. - DHT22
begin()— Removed hardcodedgpio_set_pulls(10). Pull-ups now viagpioInitForRole(). - DS18B20 legacy methods — Use first active sensor's pin instead of
PIN_ONEWIRE_DEFAULT.
Flash Budget
| Configuration | Flash | RAM |
|---|---|---|
| Release (DS18B20 + DHT22 + mDNS) | 93.1% (972KB) | 35.7% (93.7KB) |
| With BME280 | 93.7% (979KB) | 35.8% (93.9KB) |
| Free (release) | ~72KB | ~168KB |
Documentation
- WIRING.md — Complete rewrite: 16 universal slots, BME280 I2C wiring diagram, GPIO requirement table, slot configuration CLI examples.
- MANUAL.md — Updated sensor count, pinout, CLI commands, firmware version.
- README.md / README.pt-BR.md / README.es-ES.md — Architecture diagrams, hardware tables, version badges.
- docs/index.md / docs/WIKI_HOME.md — Hardware specs and architecture.
- CHANGELOG.md / CHANGELOG.pt-BR.md — Full v1.4.4-beta entry.
Tests
- 51/51 passing (29 validators + 22 HistoryCodec)
- CI: ✅ green
Full Changelog: v1.4.3-beta...v1.4.4-beta
Assets 2
v1.3.0-beta — Alpha Display (HD44780 ×ばつ2)
v1.3.0-beta — Alpha Display + HD44780 ×ばつ2
New: Alphanumeric Display Support
SIMUT now supports HD44780 ×ばつ2 character displays as an alternative to the ILI9341 TFT, selectable at compile time.
- I2C mode (default) — PCF8574 backpack on GPIO 26/27, address 0x27
- Parallel 4-bit mode — Direct GPIO: RS=16, EN=17, D4-D7=18-21
- Zero sensor slot conflicts — GPIO 0-15 reserved for sensors in all modes
- 89.0% flash, 34.6% RAM — 84 KB saved vs TFT build
Builds
| File | Display | Description |
|---|---|---|
simut-v1.3.0-beta-pico_w_release.uf2 |
ILI9341 TFT + XPT2046 Touch | Full graphical UI |
simut-v1.3.0-beta-pico_w_alpha.uf2 |
HD44780 ×ばつ2 (I2C default) | Minimal text UI |
For parallel mode: add -DHD44780_MODE_PARALLEL=1 -DHD44780_MODE_I2C=0 to pico_w_alpha build flags.
Fixes
- Touch calibration infinite loop on alpha builds
- UART1 peripheral crash in StorageManager on alpha
- SPI pin conflict with HD44780 parallel pins
- WIRING.md completely rewritten with pinout diagrams for all modes
Docs
See WIRING.md for complete pinout and connection diagrams.
Assets 4
v1.2.1-beta — Dual Independent Dash Panels
What's New
Dual Independent Dash Panels
- Unified panel architecture — Both dash panels use the same
drawSlotPanel()function. The dedicated ambient panel (drawAmbientPanel) eliminated (~280 lines, -1.4KB flash). - Top panel: fixed/interactive modes — Long-press (1s) toggles between fixed (pinned sensor, normal styling) and interactive mode (dark gray background + white elements, follows slot selector to choose which sensor to pin). Short tap exits interactive mode.
- Bottom panel: always interactive — Short tap toggles min/max only. Always follows the bottom SLOT buttons.
- S10 button — Added slot 10 (ambient DHT22 on GPIO 10) to the bottom button bar. Hidden when top panel is fixed on it. Slot 10 now reads DHT22 data instead of internal CPU temp.
Sensor Driver Improvements
- Min/max rendering moved to drivers —
DS18B20_renderMinMax()andDHT22_renderMinMax()in respective drivers, dispatched viasensorRenderMinMax(). Shared primitives inSensorDrawing.hreuse existing icons (drawThermometerMini,drawDropMini,drawUnitDegC_Mini). - Slot humidity min/max tracking — Per-slot humidity arrays with real-time accumulation every loop cycle. DHT22 slots now show humidity in min/max mode.
- Compile-time guard fix —
DS18B20_renderPanelfallback guarded by#if SIMUT_SENSOR_DS18B20(was unconditional, causing link error when sensor disabled).
Rendering Fixes
- Instant panel updates — Incremental render compares
topSlot*fields instead of stale ambient fields.pullSnapshot()keepstopSlotIdxsynced for AppManager mirroring. Top panel updates with same frequency as bottom. - Alarm flash fix — Top panel alarm flash checks
isSlotAlarming(topSlotIdx)instead of old ambient alarm flags. - Border color fix — Normal mode content strip uses
borderColorinstead of hardcodedC_TEXT_SUB. - Background fill fix — Content strip uses
panelBginstead ofC_BG_MAINfor correct alarm red and selection mode gray.
Architecture
- DashPanel struct — Consolidated ~12 scattered member variables into 2
DashPanelinstances with fixed/interactive mode state, min/max tracking, and hold detection. - Independent top panel data —
topSlot*fields inSystemStatewith dedicatedsetTopSlotData()/setTopSlotMinMax()setters. - Data flow — AppManager populates
topSlot*andslot*independently, with fallback mirroring when indices match.
Flash Budget
| Configuration | Flash |
|---|---|
| Both sensors ON | 1030872 (98.7%) |
Full Changelog: https://github.com/angeloINTJ/simut/blob/main/CHANGELOG.md
Assets 2
SIMUT v1.0.0 — Initial Public Release
SIMUT v1.0.0 — Initial Public Release
Professional IoT firmware for Raspberry Pi Pico W — real-time temperature and humidity monitoring with TFT display, web interface, telemetry, and OTA updates.
What's Included
- Multi-sensor support — Up to 10 DS18B20 + 1 DHT22 ambient sensor with zero-trust verification
- ×ばつ240 TFT display — Dashboard, real-time graphs, 50 built-in themes, touch-driven settings
- Embedded web server — Multi-user RBAC, file manager, live dashboard, dark/light themes
- Telemetry — HTTP/MQTT with JSON/CSV/custom templates and TLS
- Dual-channel CLI — USB Serial + Bluetooth (BLE) with password protection
- History codec v2 — Compact binary storage (~1 year of data in 1 MB)
- OTA firmware updates — Web-based update with config preservation and auto-reboot
- Backup & restore — Full LittleFS backup with CRC32 integrity verification
- Hardened security — HMAC-SHA256, per-user random salt, rate limiting, crash forensics
Firmware Files
| File | Use | Size |
|---|---|---|
firmware.uf2 |
USB flash — drag to RPI-RP2 drive | 2.0 MB |
firmware.bin |
OTA update via web interface | 1.0 MB |
firmware.elf |
Debug symbols (development) | 4.3 MB |
Quick Install
# USB flash 1. Hold BOOTSEL on Pico W, connect USB 2. Drag firmware.uf2 to RPI-RP2 drive 3. Device reboots automatically # Or via picotool picotool load -x firmware.uf2
Build Metrics
| Metric | Value |
|---|---|
| Flash used | 98.7% (1,031,000 / 1,044,480 bytes) |
| RAM used | 36.7% (96,172 / 262,144 bytes) |
| Platform | RP2040 @ 133 MHz |
| Framework | Arduino-Pico (earlephilhower) |
Documentation
Hardware Requirements
- Raspberry Pi Pico W (RP2040)
- ILI9341 ×ばつ240 TFT display (SPI)
- XPT2046 resistive touch controller
- DS18B20 temperature sensors (1-Wire, up to 10)
- DHT22 ambient temperature/humidity sensor
🤖 Built with Claude Code