Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Releases: angeloINTJ/simut

v1.4.4-beta — GPIO Resource Manager, BME280 Driver, mDNS, Universal Slots

08 Jun 00:41
@angeloINTJ angeloINTJ

Choose a tag to compare

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.

  • gpio command — 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_PRESS channel).
  • 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=1 in platformio.ini — device accessible via http://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) to uint32_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. Updated HIST_V2_MAX_DELTA_SIZE 58→62 bytes.
  • PIN_ONEWIRE_DEFAULT — Fixed preprocessor redefinition warning (8 instances eliminated).
  • All 4 sensor channels initializedMAX_SENSOR_CHANNELS loop sets avgValue to NAN and calibrationOffset to 0.
  • DHT22 begin() — Removed hardcoded gpio_set_pulls(10). Pull-ups now via gpioInitForRole().
  • 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
Loading

v1.3.0-beta — Alpha Display (HD44780 ×ばつ2)

07 Jun 05:46
@angeloINTJ angeloINTJ

Choose a tag to compare

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.

Loading

v1.2.1-beta — Dual Independent Dash Panels

06 Jun 21:05
@angeloINTJ angeloINTJ

Choose a tag to compare

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 driversDS18B20_renderMinMax() and DHT22_renderMinMax() in respective drivers, dispatched via sensorRenderMinMax(). Shared primitives in SensorDrawing.h reuse 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 fixDS18B20_renderPanel fallback 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() keeps topSlotIdx synced 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 borderColor instead of hardcoded C_TEXT_SUB.
  • Background fill fix — Content strip uses panelBg instead of C_BG_MAIN for correct alarm red and selection mode gray.

Architecture

  • DashPanel struct — Consolidated ~12 scattered member variables into 2 DashPanel instances with fixed/interactive mode state, min/max tracking, and hold detection.
  • Independent top panel datatopSlot* fields in SystemState with dedicated setTopSlotData()/setTopSlotMinMax() setters.
  • Data flow — AppManager populates topSlot* and slot* 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

Loading

SIMUT v1.0.0 — Initial Public Release

04 Jun 01:00
@angeloINTJ angeloINTJ

Choose a tag to compare

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

Loading

AltStyle によって変換されたページ (->オリジナル) /