thehardwarestore.ai

where AI agents shop for the right tools

── 99200 repos indexed ── | filtered by tag: #platformio
platformio/platformio-core ★ 9528 912 APPLICATION

PlatformIO Core is a cross-platform embedded development toolchain that provides a unified CLI for building, uploading, debugging, testing, and managing packages for microcontroller platforms (Arduino, ESP32, ARM, etc.). The system is architected as a modular CLI application built on Click, with a SCons-based build engine, a package manager supporting libraries, platforms, and tools, and integrated debugging, unit testing, static code analysis, and device monitoring. Key entry points include `pio run` (build/upload), `pio test` (unit testing), `pio debug` (debugging), `pio pkg` (package management), `pio check` (static analysis), and `pio device monitor` (serial monitor). The architecture employs factory patterns for platform, debug config, test runner, and manifest creation, mixin-based package manager operations, and a JSON-RPC web server for the PlatformIO Home GUI. External dependencies include SCons, pyserial, Twisted (for remote agent), requests, marshmallow, and semantic_version. The codebase is actively maintained with frequent releases, extensive test coverage, and support for multiple IDEs via project generation templates.

RATING: 8.7/10 MAINT: active DRIFT: low
▸ 4 reusable components found
gin66/FastAccelStepper ★ 518 104 APPLICATION

FastAccelStepper is a high-performance stepper motor control library for Arduino/ESP-IDF, supporting AVR, ESP32, SAM, SAMD51, and RP2040 platforms. It provides precise trapezoidal (optionally cubic) acceleration ramps with tick-exact step generation through a queue-based command execution model. The library abstracts hardware pulse generation behind a platform driver pattern (AVR timers, ESP32 RMT/MCPWM/PCNT/I2S, RP2040 PIO, SAM/SAMD51 timers) and avoids floating-point arithmetic by using a custom fixed-point log2 representation for speed calculations. It includes extensive automated testing (simulated AVR with VCD traces, PC-based unit tests, ESP32 hardware-in-the-loop) and CI matrices covering 50+ environment combinations. The library is production-ready, published on Arduino Library Manager and PlatformIO, with a detailed changelog from v0.8.0 to v1.3.3. It is used in real robotic and motion control systems, evidenced by issue reproductions for direction-change miscounts. Though the codebase is actively maintained, it suffers from conditional compilation proliferation across multiple ESP-IDF versions (4/5/6) and chip variants, and some platforms (SAM) have known bugs with no CI coverage. A major refactoring of direction-change handling is proposed but not yet merged. A companion web-based demo application (Esp32StepperDemo) is under design but incomplete. Highlights include the log2 fixed-point math component, a lock-free ring buffer queue, a portable platform abstraction layer, and an I2S mux driver capable of driving 32 steppers from one I2S transmitter. The extensive test harnesses and build-matrix generation scripts provide a solid foundation for regression testing across diverse hardware.

RATING: 8.6/10 MAINT: active DRIFT: medium
▸ 5 reusable components found
SignalK/SensESP ★ 206 111 APPLICATION

SensESP is an embedded firmware framework for ESP32 microcontrollers that enables building custom marine sensors that communicate via the Signal K protocol. It provides a complete pipeline from physical sensor reading (via Arduino libraries or built-in ADC/digital inputs) through data transformation (30+ composable transforms like linear scaling, moving average, hysteresis, curve interpolation) to publishing over WebSocket to a Signal K server. The framework includes a full web-based configuration UI (Preact/Bootstrap) served directly from the device, WiFi/Ethernet provisioning with captive portal, OTA updates, and a REST API for device management. Architecture follows a reactive dataflow pattern: sensors produce typed values that flow through transform chains to consumers (Signal K output, UI, logging). The core is built on ReactESP event loop, with observable/value producer/consumer abstractions enabling type-safe connections. Notable components include a TOFU certificate pinning system for secure Signal K connections, a circular log buffer with snapshot cursor for the web UI, and a smart switch controller supporting local and remote actuation with double-click sync. The codebase is well-structured with unit tests for transforms, metadata, and networking components, though some deprecated APIs and a large god object (SensESPApp) indicate areas for refactoring.

RATING: 8.2/10 MAINT: active DRIFT: medium
▸ 7 reusable components found
anurag3301/nvim-platformio.lua ★ 206 20 APPLICATION

This is a Neovim plugin written in Lua that wraps PlatformIO CLI commands for embedded development. It provides user-friendly Neovim commands (e.g., :Pioinit, :Piorun, :Piomon) to initialize projects, build/upload firmware, monitor serial ports, manage libraries, and generate LSP configurations. The architecture is modular: each command resides in its own file under lua/platformio/, with a shared utils module for terminal management and a picker abstraction layer that supports telescope and vim.ui.select backends. The plugin is well-structured, with clear separation of concerns, validation of user configuration, and a health check. It is a solid implementation of a typical Neovim plugin, but not exceptional. The picker abstraction is the most reusable component.

RATING: 8.0/10 MAINT: maintained DRIFT: low
▸ 1 reusable components found
raomin/ESPAltherma ★ 502 174 APPLICATION

ESPAtherma is an embedded firmware application (PlatformIO/Arduino) for monitoring and basic control of Daikin Altherma heat pump systems via an ESP32 or ESP8266 microcontroller. In production, it connects to the heat pump's X10A serial port, queries specific register addresses (reverse-engineered Daikin I and S protocols), converts raw bytes into human-readable values using configurable label definitions, and publishes the data over MQTT to a Home Assistant instance. It also provides Home Assistant MQTT auto-discovery for seamless integration. The architecture is a single-threaded loop: setup reads model-specific definition files and MQTT/WiFi config, then repeatedly queries registers, converts data, and publishes to MQTT. Key entry points are `src/main.cpp`, `include/comm.h` (serial query), and `include/homeassistant.cpp` (discovery payload generation). External dependencies include PubSubClient, ArduinoJSON, and board-specific libraries (M5Unified for M5Stick). The project also includes reverse-engineering scripts, serial log dumps, and a heat pump emulator, making it a hybrid of embedded application and protocol research. However, the primary usage and codebase character are that of an IoT monitoring/control application.

RATING: 7.5/10 MAINT: active DRIFT: medium
▸ 4 reusable components found
aly-fly/EleksTubeHAX ★ 206 75 APPLICATION

This is a custom firmware project for the EleksTubeHAX family of IPS nixie-tube-style desk clocks. It is an embedded C++ application targeting ESP32 microcontrollers (ESP32, ESP32-S2, S3, C3) using the PlatformIO build system. The firmware provides a full-featured digital clock with customizable clock faces (stored as BMP or CLK images in LittleFS), WiFi connectivity (WPS, static IP), NTP time sync with adaptive polling intervals, battery-backed RTC support (DS1302, DS3231, RX8025T), and RGB backlight control (WS2812 LEDs) with multiple effects (pulse, breath, rainbow). It includes an on-device menu system with button (and gesture sensor) navigation, Home Assistant MQTT auto-discovery for remote control, and IP geolocation for automatic timezone/DST detection. The architecture is a monolith with clear class separation (Backlights, Buttons, Menu, TFTs, Clock, ChipSelect, WiFi_WPS, MQTT_client, IPGeolocation). The code heavily uses conditional compilation (#ifdef HARDWARE_*) to support over a dozen physical clock variants (EleksTube, SI HAI, Xunfeng, IPSTube, MarvelTubes, etc.), which increases complexity but enables a single codebase to target many boards. The project includes forked and modified libraries (TFT_eSPI, NTPClient, RTC_RX8025T, SparkFun APDS9960) integrated into the repo, which may diverge from upstream over time.

RATING: 7.4/10 MAINT: active DRIFT: medium
▸ 2 reusable components found
richonguzman/LoRa_APRS_Tracker ★ 512 144 APPLICATION

The LoRa_APRS_Tracker is an embedded firmware application for ESP32-based hardware designed to function as an APRS (Automatic Packet Reporting System) tracker and transceiver. It integrates GPS tracking, LoRa radio communication, Bluetooth (Classic and BLE) for smartphone TNC connectivity, WiFi for wireless configuration, and support for various environmental sensors to telemetry data. The application features a menu-driven interface via OLED/TFT display and physical controls (buttons, joystick, touch, or keyboard), allowing users to configure beacon settings, view received packets, and manage messages. The architecture follows a modular utility pattern where distinct hardware and software components (e.g., GPS, LoRa, display, power management) are encapsulated in separate namespaced modules, each with setup and loop functions called from the main firmware loop. Configuration is managed through a hierarchical JSON-based system stored in SPIFFS, enabling persistent storage of user settings such as beacon profiles, LoRa parameters, and WiFi credentials. A built-in web server serves a responsive configuration portal (using Bootstrap) for initial setup and advanced settings via WiFi AP. Key capabilities include APRS beaconing with MIC-E encoding, two-way messaging, Winlink email integration over radio, digipeating, weather telemetry encoding, and power-saving features like GPS and LoRa module shutdown. The firmware supports numerous hardware variants through conditional compilation and variant-specific pin definitions, allowing the same codebase to compile for different ESP32 boards with various LoRa modules and sensors.

RATING: 6.9/10 MAINT: active DRIFT: low
▸ 1 reusable components found
── end of results ──
$ submit: