{"id":51121685,"url":"https://github.com/nitefood/opsum","last_synced_at":"2026-06-25T03:01:30.054Z","repository":{"id":366672593,"uuid":"1276426858","full_name":"nitefood/opsum","owner":"nitefood","description":"OPSUM - The Open PSU Meter project","archived":false,"fork":false,"pushed_at":"2026-06-22T20:07:45.000Z","size":63221,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-22T22:08:29.049Z","etag":null,"topics":["ammeter","electronics","embedded","esp32","esp32-s3","firmware","hardware-projects","ina226","kicad","open-hardware","repair"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nitefood.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"nitefood","thanks_dev":null,"custom":null}},"created_at":"2026-06-22T00:57:23.000Z","updated_at":"2026-06-22T20:07:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nitefood/opsum","commit_stats":null,"previous_names":["nitefood/opsum"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nitefood/opsum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitefood%2Fopsum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitefood%2Fopsum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitefood%2Fopsum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitefood%2Fopsum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nitefood","download_url":"https://codeload.github.com/nitefood/opsum/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitefood%2Fopsum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34757355,"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":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ammeter","electronics","embedded","esp32","esp32-s3","firmware","hardware-projects","ina226","kicad","open-hardware","repair"],"created_at":"2026-06-25T03:01:29.099Z","updated_at":"2026-06-25T03:01:30.030Z","avatar_url":"https://github.com/nitefood.png","language":"Python","funding_links":["https://buymeacoffee.com/nitefood","https://www.buymeacoffee.com/nitefood"],"categories":[],"sub_categories":[],"readme":"# OPSUM - The Open PSU Meter project\n\nOPSUM is a **DC voltmeter and ammeter board** with 4mm banana socket inputs, that enables measuring and logging **voltage, current and power**, even when using a bench PSU that has no builtin telemetry feature. Communication between the board and the host happens via **UART protocol** over a dedicated USB port that is **galvanically isolated** from the PSU/DUT (*power supply unit and device under test*) side of the PCB, in order to protect the host-side (PC) from potentially destructive shorts or spikes happening on the DUT side.\n\nThis repository is structured as a **monorepo**: hardware design files, enclosure CAD files, firmware, host-side GUI tools, release binaries, communication protocol documentation, and third-party GUIs are kept together so you can build, flash, and evolve the project starting from a single source of truth.\n\n## Features\n\n#### Current\n\n- **Real-time voltage, current, and power monitoring** based on the [INA226](https://www.ti.com/product/INA226) monitor IC and the [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3) SoC.\n- [Kelvin-sensed](https://en.wikipedia.org/wiki/Four-terminal_sensing) shunt layout and full noise filtering (as per TI's [datasheet](https://www.ti.com/lit/ds/symlink/ina226.pdf), chapter *6.4.2 \"Filtering and Input Considerations\"*) for improved measurement accuracy.\n- **Reverse-polarity**, **overvoltage**, and **negative-voltage** protection circuitry.\n- PMOS input protection stage with zener-clamped gate drive.\n- TVS + Schottky protected INA VBUS input.\n- **Galvanic isolation** protecting the host-side USB port from the PSU/DUT side.\n- Handles up to **36 V** bus voltage and **20 A** current.\n- Compact, low-cost, fully **open source hardware, firmware and software** project.\n\n#### Planned\n\n- I\u003csup\u003e2\u003c/sup\u003eC display showing real time telemetry from the board *(I\u003csup\u003e2\u003c/sup\u003eC pin header for the display is already present on the PCB, only needs designing the enclosure lid opening and in-firmware support)*\n\n\n## Images\nEnclosure render (outside) | Enclosure render (inside)\n| - | - |\n| ![](images/render_enclosure.png) | ![](images/render_enclosure_inside.png) |\n\nPCB Layout | PCB 3D View\n| - | - |\n![](images/pcb_layout.png) | ![](images/render_pcb.png) |\n\n3D printed enclosure (top view) | 3D printed enclosure (sockets visible)\n| - | - |\n| ![](images/printed_enclosure.jpg) | ![](images/printed_enclosure2.jpg) |\n\n#### 3D printed enclosure (internal 12AWG wiring)\n![](images/printed_enclosure_inside.jpg)\n\n#### [Farmtech's PSU monitor](/third_party_tools/farmtech/) displaying telemetry coming from a live OPSUM board\n![](images/farmtech_screenshot.png)\n\n---\n\n## Quick Start\n\nIf you want to build the project yourself, the step-by-step approach is:\n\n1. **Manufacture the board** using a third party PCB fab house (I've used [JLCPCB](https://jlcpcb.com/?from=DUYEWB) with great results, so tolerances and specs are guaranteed to comply with their capabilities, but any fab house should be easily capable to manufacture this board). **Gerbers, BOM and CPL** files alongside required production settings and instructions for PCB manufacturing and assembly are all in the [hardware](/hardware/) section.\n\t\u003e Disclaimer: the JLCPCB link above is a referral URL, I get a little kickback if you use it to subscribe or buy from them. Thanks for your support!\n2. **Solder the remaining through-hole components on the PCB** using the instruction under [hardware](/hardware/). I've included a bill of material for THT and hand-assembly components required to complete the project, complete with links to AliExpress to source them.\n3. **First-flash the new ESP32-S3 board** with the `-FULL` image (using `esptool`). Prebuilt binaries and usage instructions for `esptool` are in the [dist](dist/) section.\n4. **3D print the enclosure and assemble the finished product**. Instructions are under [enclosure](/enclosure/).\n5. **Connect the USB port to your PC and use a client-side program** to interface with the OPSUM board and receve its readings. I've included a [minimal GUI](dist/opsum_gui.exe), alongside with fully featured [third party tools](third_party_tools/) compatibile with OPSUM's core firmware [protocol](./protocol-specs/core-uart.md).\n\nIf you want to flash a different firmware, or update/reflash the core firmware in the future, there is **no need to disassemble the board** to access the native MCU USB port. Just use the **isolated USB port** with the included [flash tool](dist/flashtool.exe), and reflash the board using a `-OTA` image. OPSUM's main firmware OTA image is packaged under [dist](dist/) as well.\n\n## Open Tooling Approach\n\nThis repository includes everything, ranging from the basic OPSUM GUI plus third-party client-side tools that support the Core firmware communication protocol, to enclosure CAD models, PCB layout design files, assembly guides and protocol specification documentation.\n\nYou are free to use whichever compatible client (or firmware) matches your needs.\n\n## Repository Layout\n\n| Folder | Contents |\n| - | - |\n| [dist/](dist/) | release binaries + compilation and flash instructions |\n| [protocol-specs/](protocol-specs/) | **DFU** (flashing) and **UART** (runtime communication with the host) protocol specs |\n| [src/Firmware/](src/Firmware/) | **Core** (main) and **DFU** (flash update mode) firmware source code |\n| [src/GUI/](src/GUI/) | host-side GUI tools source code root folder |\n| [src/GUI/flash-tool/](src/GUI/flash-tool/) | desktop DFU flashing GUI source code |\n| [src/GUI/opsum-gui/](src/GUI/opsum-gui/) | minimal OPSUM runtime GUI frontend source code |\n| [third_party_tools/](third_party_tools/) | bundled alternative host-side tools and board-side firmware binaries |\n| [hardware/](hardware/) | schematic, PCB layout, BOM, CPL, Gerbers, manufacturing and THT component soldering step-by-step guide |\n| [enclosure/](enclosure/) | CAD files and assembly instructions for the OPSUM case |\n\n## Contributing\n\n**OPSUM is inteded as an open, community driven project**. Anyone is welcome to contribute to it by creating or improving client-side tools, firmware, enclosure, PCB design, protocol specs or documentation!\n\n## Acknowledgements\n\nThis project was born out of the desire to improve my PCB design skills, and to document a complete DIY approach to getting a full featured ammeter from scratch, instead of buying one.\n\nIn this endeavor, I've received a lot of precious support and ideas from the [JFIXX](https://www.youtube.com/@JFIXX1) community. If you want to join us to say hello, his [discord](https://discord.gg/TcsUshz67p) server is a welcoming and friendly place, full of very skilled and amazing techs!\n\n## Supporting the project\n\nIf you like this project and want to support it, you can do so by clicking the button below. Thank you! \u003c3\n\n[![\"Buy Me A Coffee\"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/nitefood)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnitefood%2Fopsum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnitefood%2Fopsum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnitefood%2Fopsum/lists"}