{"id":48155465,"url":"https://github.com/steamicc/arduino-steami-lib","last_synced_at":"2026-05-26T16:01:08.803Z","repository":{"id":346773039,"uuid":"1190596211","full_name":"steamicc/arduino-steami-lib","owner":"steamicc","description":"Arduino/C++ driver library for STeaMi board components","archived":false,"fork":false,"pushed_at":"2026-05-26T11:40:22.000Z","size":404,"stargazers_count":1,"open_issues_count":102,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T12:05:20.542Z","etag":null,"topics":["arduino","drivers","embedded","i2c","steami","stm32"],"latest_commit_sha":null,"homepage":"https://www.steami.cc/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/steamicc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-24T12:44:01.000Z","updated_at":"2026-04-29T15:13:29.000Z","dependencies_parsed_at":"2026-05-26T12:02:02.635Z","dependency_job_id":null,"html_url":"https://github.com/steamicc/arduino-steami-lib","commit_stats":null,"previous_names":["steamicc/arduino-steami-lib"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/steamicc/arduino-steami-lib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steamicc%2Farduino-steami-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steamicc%2Farduino-steami-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steamicc%2Farduino-steami-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steamicc%2Farduino-steami-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/steamicc","download_url":"https://codeload.github.com/steamicc/arduino-steami-lib/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steamicc%2Farduino-steami-lib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33528089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"ssl_error","status_checked_at":"2026-05-26T15:22:15.568Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","drivers","embedded","i2c","steami","stm32"],"created_at":"2026-04-04T17:17:04.891Z","updated_at":"2026-05-26T16:01:08.644Z","avatar_url":"https://github.com/steamicc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# arduino-steami-lib\n\nArduino/C++ driver library for the [STeaMi](https://www.steami.cc/) board. Each driver lives under `lib/\u003ccomponent\u003e/` and follows a standard structure.\n\n## Repository contents\n\n* Ready-to-use **Arduino-compatible drivers**\n* Consistent **API design across all components**\n* CI integration with clang-format and PlatformIO\n\n## Board components\n\n| Component     | Driver                                   | I2C Address | Description                           |\n| ------------- | ---------------------------------------- | ----------- | ------------------------------------- |\n| BQ27441-G1    | [`bq27441`](lib/bq27441/)               | `0x55`      | Battery fuel gauge                    |\n| DAPLink Flash | [`daplink_flash`](lib/daplink_flash/)    | `0x3B`      | I2C-to-SPI flash bridge + config zone |\n| SSD1327       | [`ssd1327`](lib/ssd1327/)               | — (SPI)     | 128x128 greyscale OLED display        |\n| MCP23009E     | [`mcp23009e`](lib/mcp23009e/)           | `0x20`      | 8-bit I/O expander (D-PAD)            |\n| VL53L1X       | [`vl53l1x`](lib/vl53l1x/)               | `0x29`      | Time-of-Flight distance sensor        |\n| APDS-9960     | [`apds9960`](lib/apds9960/)             | `0x39`      | Proximity, gesture, color, light      |\n| HTS221        | [`hts221`](lib/hts221/)                 | `0x5F`      | Humidity + temperature                |\n| WSEN-HIDS     | [`wsen-hids`](lib/wsen-hids/)           | `0x5F`      | Humidity + temperature                |\n| WSEN-PADS     | [`wsen-pads`](lib/wsen-pads/)           | `0x5D`      | Pressure + temperature                |\n| ISM330DL      | [`ism330dl`](lib/ism330dl/)             | `0x6B`      | 6-axis IMU (accel + gyro)             |\n| LIS2MDL       | [`lis2mdl`](lib/lis2mdl/)               | `0x1E`      | 3-axis magnetometer                   |\n| IM34DT05      | `im34dt05` *(not yet implemented)*       | — (PDM)     | Digital microphone                    |\n| BME280        | `bme280` *(not yet implemented)*         | `0x76`      | Pressure + humidity + temperature     |\n| GC9A01        | `gc9a01` *(not yet implemented)*         | — (SPI)     | Round color LCD display               |\n| STeaMi Config | [`steami_config`](lib/steami_config/)   | —           | Persistent board configuration        |\n\n## Quick start\n\n### Prerequisites\n\n* [PlatformIO](https://platformio.org/) or Arduino IDE\n* A STeaMi board\n\n### Build with PlatformIO\n\n```bash\npio run\n```\n\n### Upload to board\n\n```bash\npio run --target upload\n```\n\n## Examples\n\n### List available examples\n\n```bash\nmake list-examples\n```\n\nThis prints one ready-to-run target per example, e.g.:\n\n```\nflash-hts221/comfort_index\nflash-hts221/dew_point\nflash-hts221/read_temperature_humidity\nflash-hts221/temperature_alarm\n```\n\nFilter by driver:\n\n```bash\nmake list-examples DRIVER=hts221\n```\n\n### Flash an example\n\nCopy any line from `make list-examples` and run it:\n\n```bash\nmake flash-hts221/dew_point\n```\n\nThis builds the example, uploads it to the STeaMi board, and opens the serial monitor at 115200 baud on success.\n\n### Capture early serial output\n\n`make flash-…` opens an interactive monitor, which often misses the first lines printed at boot (the monitor finishes its handshake while the board has already moved past `setup()`). When you need those lines — e.g. to see whether `begin()` returned `false` — swap `flash-` for `capture-`:\n\n```bash\nmake capture-hts221/dew_point\n```\n\nThis builds and uploads the example like `flash-…`, but instead of opening miniterm it opens the serial port first, asks OpenOCD to reset the board over CMSIS-DAP, and prints whatever the board sends on stdout for 10 seconds. The output is unbuffered and pipeable:\n\n```bash\nmake capture-hts221/dew_point | grep -i \"HTS221\"\n```\n\nOverride the duration with `DURATION=N` (in seconds):\n\n```bash\nmake capture-hts221/dew_point DURATION=30\n```\n\n## Development\n\n### Setup\n\nRequires **Python 3** (with `venv` — on Debian/Ubuntu: `sudo apt install python3-venv`)\nand **Node.js** (for the git hooks tooling).\n\n```bash\nmake setup    # Install npm tooling, git hooks, and PlatformIO (in a local .venv/)\n```\n\n`make setup` creates a local Python virtualenv in `.venv/` and installs\nPlatformIO there, so no global `pip install` is required. All `make` targets\n(`build`, `upload`, `test-native`, `test-hardware`) transparently use this\nlocal `pio`.\n\nTo use `pio` directly outside of `make`, activate the venv first:\n\n```bash\nsource .venv/bin/activate\npio device monitor -b 115200\n```\n\n### Available commands\n\nRun `make help` to see all available targets:\n\n| Command | Description |\n|---------|-------------|\n| `make lint` | Run clang-format check |\n| `make lint-fix` | Auto-fix formatting |\n| `make build` | Build with PlatformIO |\n| `make test-native` | Run host-side unit tests (no board required) |\n| `make test-hardware` | Run on-board unit tests (STeaMi required) |\n| `make upload` | Upload to board |\n| `make clean` | Remove build artifacts |\n| `make deepclean` | Remove everything including node_modules |\n\n### Git hooks\n\nGit hooks are managed by [husky](https://typicode.github.io/husky/) and run automatically on commit:\n\n- **commit-msg** — validates commit message format via [commitlint](https://commitlint.js.org/)\n- **pre-commit** — branch name validation, content checks, clang-format on staged files\n\n## Troubleshooting uploads\n\nPlatformIO's default uploader on STeaMi is OpenOCD over CMSIS-DAP. On Linux,\nthe most common failure mode is `Error: unable to find CMSIS-DAP device`\n(or similar) caused by incomplete udev rules.\n\n### Install udev rules\n\nThe rules shipped with [pyocd](https://github.com/pyocd/pyOCD) only grant\naccess to the CMSIS-DAP v1 HID interface. OpenOCD prefers the CMSIS-DAP v2\nbulk interface (accessed via libusb on Linux), which needs a separate rule\non the USB subsystem. Install both, and tell ModemManager to stop probing\nthe virtual serial port:\n\n```bash\nsudo tee /etc/udev/rules.d/60-steami.rules \u003e /dev/null \u003c\u003c'EOF'\n# STeaMi / ARM mbed DAPLink\n# CMSIS-DAP v2 (bulk interface — used by OpenOCD by default)\nSUBSYSTEM==\"usb\", ATTRS{idVendor}==\"0d28\", ATTRS{idProduct}==\"0204\", \\\n    TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"\n# CMSIS-DAP v1 (HID fallback — used by pyocd and older OpenOCD)\nKERNEL==\"hidraw*\", ATTRS{idVendor}==\"0d28\", ATTRS{idProduct}==\"0204\", \\\n    TAG+=\"uaccess\"\nEOF\nsudo udevadm control --reload-rules \u0026\u0026 sudo udevadm trigger\n```\n\nThen unplug and replug the board.\n\n### Fallback: use pyocd instead of OpenOCD\n\nIf OpenOCD still fails after the udev rules, pyocd is a drop-in alternative\nwith broader DAPLink firmware compatibility and bundled target definitions:\n\n```bash\nsource .venv/bin/activate\npip install pyocd\n```\n\nThen edit [`platformio.ini`](platformio.ini):\n\n```ini\nupload_protocol = custom\nupload_command = pyocd flash --target stm32wb55rgvx $SOURCE\n```\n\nThe exact pyocd target name may vary by pack version — run\n`pyocd list --targets | grep -i wb55` to confirm. You may need to install\nthe CMSIS pack first: `pyocd pack install stm32wb55`.\n\n### Check OpenOCD version\n\nPlatformIO bundles its own OpenOCD at\n`~/.platformio/packages/tool-openocd/bin/openocd`. STM32WB55 support has\nimproved across versions — if both remedies above fail, verify the bundled\nOpenOCD is recent:\n\n```bash\n~/.platformio/packages/tool-openocd/bin/openocd --version\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under the [GPL v3](LICENSE) License.\n\n## Additional Resources\n\n- [STeaMi Official Website](https://www.steami.cc/)\n- [MicroPython driver library](https://github.com/steamicc/micropython-steami-lib) — sister project\n- [Arduino Documentation](https://docs.arduino.cc/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteamicc%2Farduino-steami-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteamicc%2Farduino-steami-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteamicc%2Farduino-steami-lib/lists"}